Currently Available: Need a skilled Software Developer for your next project?
Categories
SEO, GEO and AEO

Measuring Image Search Performance in Search Console and BigQuery

Website owners use Google Search Console to see how people find their pages through Google Search. To measure image visibility, first choose which Google Search experience to include: the Google Images tab, images shown in regular search results, or searches that begin with an image. Search Console reports these experiences separately, so combining them into one “image search” total would mix different kinds of activity.

The Image search type measures results in the Google Images tab. Web covers the combined search results page, including images shown alongside other results. Search Console also began rolling out Web multimodal reporting in September 2026 for searches that start with an image, such as Google Lens and image uploads. Review data in Search Console, then export it to Google BigQuery, a cloud data warehouse, to combine data over time or across many pages. Keep each search type labeled separately.

Choose the search surface

In Search Console, the search type tells you which Google search experience produced the reported results. Choose Image when you want to measure appearances in the Google Images tab. Choose Web when you want the broader results-page performance that includes images and other result types. Where the report offers Web multimodal, use it for image-input searches, including Lens, Circle to Search on Android, image uploads to Google Search, and Chrome’s Search this image feature, as described in Google’s multimodal reporting announcement.

These figures answer different questions. Search Console keeps search types separate. Google does not provide a total that removes people or image exposures counted in more than one type. Report the scopes as separate series or sections rather than adding them into an unqualified total. Also verify which search types your BigQuery tables actually contain before assuming that they include Web multimodal data.

What Image-tab metrics count

In the Images tab, Search Console attributes an image result to the page that hosts it. The Pages report therefore identifies the pages associated with search traffic, not image-file URLs. These metrics do not distinguish separate images on the same page.

An Image-tab impression counts when the result is scrolled into view. For a given query, Google counts it once per host-page URL, even if several images from that page appear or a user scrolls away and back. Expanding a thumbnail alone does not count as a click. Google counts a click when the user follows the expanded image or another image link away from Google Search. These rules, along with Google’s definitions of impressions, clicks, and position, explain why an impression is not a count of unique image files.

The rules for images embedded in regular Web results differ. Google can count an image impression in combined results even when the image is outside the browser’s visible area. An image inside a carousel must be scrolled into view within that carousel to count. As a result, Image and Web impression totals do not measure exposure in the same way.

Treat the Image-tab average position as a rough measure of result order. Google numbers results from left to right and then top to bottom in left-to-right languages, but screen size and image dimensions change how many results fit in each row. Compare position trends with the same search type and period; do not read the number as a fixed visual rank.

Review Image performance in Search Console

Open the Search results Performance report, set a date range, and select Search type → Image. Review clicks, impressions, click-through rate (CTR, or clicks divided by impressions), and average position. Use the Queries tab to inspect visible search terms and the Pages tab to find landing pages associated with Image-tab traffic. Google’s Performance report overview describes the available dimensions and filters.

When you need a broader view, repeat the review for Web and, if available, Web multimodal. Keep the date ranges and property consistent, but preserve separate labels for each search type. The report’s direct export is useful for a quick review, but Google limits it to 1,000 representative rows even when the report totals include more data. For larger-scale analysis, use the BigQuery bulk export rather than treating that report export as a complete dataset.

Query Image performance in BigQuery

Search Console’s bulk export writes performance data to BigQuery on a daily schedule. It creates searchdata_site_impression, which aggregates by property, and searchdata_url_impression, which aggregates by URL. An ExportLog table records successful exports. Google says the bulk export covers available Search Console performance data without the daily row limit that applies to other access methods, while anonymized query text remains unavailable. See Google’s bulk export overview and table reference for setup and schema details.

The tables include fields such as data_date, search_type, impressions, and clicks. The site table uses sum_top_position; the URL table uses sum_position. Google defines average position as the impression-weighted mean of the zero-based position values, plus one. Exported dates use Pacific Time.

Check the search-type values before filtering. Google’s table reference and sample queries use inconsistent capitalization, so a copied filter might return no rows even when the table contains Image data:

SELECT
  search_type,
  COUNT(*) AS rows
FROM <code>your_project.searchconsole.searchdata_site_impression
GROUP BY search_type
ORDER BY rows DESC;

Use the exact value shown for Image in your table. This query returns daily property-level Image performance for a selected date range in Pacific Time. Confirm that the export has arrived for the dates you plan to analyze; a scheduled export does not guarantee that every date is complete.

SELECT
  data_date,
  SUM(impressions) AS impressions,
  SUM(clicks) AS clicks,
  SAFE_DIVIDE(SUM(clicks), SUM(impressions)) AS ctr,
  SAFE_DIVIDE(SUM(sum_top_position), SUM(impressions)) + 1
    AS avg_position
FROM <code>your_project.searchconsole.searchdata_site_impression
WHERE search_type = 'image'
  AND data_date >= @start_date
  AND data_date < @end_date
GROUP BY data_date
ORDER BY data_date;

Replace the example search-type value if your inspection query shows different capitalization. The date filter also limits how much date-partitioned data BigQuery scans. BigQuery stores that data in sections grouped by date. SAFE_DIVIDE returns a safe result when the denominator is zero. Google’s query guidelines provide additional aggregation examples.

For landing-page performance, query the URL table. Its url field represents the page associated with the result, not the image asset:

SELECT
  url,
  SUM(impressions) AS impressions,
  SUM(clicks) AS clicks,
  SAFE_DIVIDE(SUM(clicks), SUM(impressions)) AS ctr,
  SAFE_DIVIDE(SUM(sum_position), SUM(impressions)) + 1
    AS avg_position
FROM <code>your_project.searchconsole.searchdata_url_impression
WHERE search_type = 'image'
  AND data_date >= @start_date
  AND data_date < @end_date
GROUP BY url
ORDER BY impressions DESC;

BigQuery does not guarantee that each exported row combines all records for a date, URL, or other grouping. Sum clicks and impressions across the intended grouping, calculate CTR from those summed metrics, and calculate position using the impression-weighted position fields. Do not treat an individual raw row as the total for a page or date.

Check whether the data supports your analysis

Confirm that the Search Console property covers the pages you want to measure. If images or landing pages use a separate subdomain, a different property may be needed to see the corresponding data. Google’s property guidance explains how property boundaries affect reported performance.

Next, check export coverage before interpreting a missing date as zero activity. Review ExportLog for successful exports and consult Search Console’s bulk-export settings or error notifications if dates are absent. ExportLog does not record failed attempts, so an empty log entry does not by itself explain a gap. Google documents that it retries some missed days for about a week; prolonged export failures can eventually stop the export.

Keep rows with anonymized queries in totals. Privacy protections can hide query text while leaving performance metrics relevant to the aggregate. Exclude those rows only when you are building a list of readable query strings, and describe that view as incomplete. In the URL example above, adding a query filter would change the scope of the analysis and could reduce its totals.

When comparing BigQuery with the Search Console report, match the property and search type, then use the same dates and dimensions. Also compare data at the same level of grouping, since the UI report and the two BigQuery tables do not necessarily represent the same grouping. Use Pacific Time when matching exported dates, and check whether the latest date has fully exported before comparing totals.

Common measurement errors

Several mistakes produce plausible numbers that answer the wrong question. Treating Image as all image exposure misses images in Web results and image-input searches. Reading the Pages report as a list of image files mistakes landing-page attribution for asset-level reporting. Summing separate search types into a supposed total visual audience implies deduplication that Google does not provide.

BigQuery introduces its own traps. Filtering on the wrong capitalization of search_type can return no rows. Querying raw rows without aggregation can understate page or date totals and distort position. Removing anonymized-query rows before calculating totals can also make performance appear lower than it was. When a query returns nothing, inspect the actual search-type values and date range. Also check the property, export status, and matching Search Console report before concluding there was no Image activity.

What I'm building

Delegate tasks. Get software.

Give Vroni a GitHub issue, bug report, spec, or rough idea. It reads the repo, plans the change, writes code, runs checks, and works toward a review-ready pull request.

Take a look at vroni.com

Email updates

Usually a new article and a few links I found interesting.

No spam. Unsubscribe with one click.

Leave a Reply

Your email address will not be published. Required fields are marked *