Performance Report (GSC)

How Google Search Console's Performance report works — what clicks, impressions, average CTR, and average position really count, plus anonymized queries and limits.

First published: Jun 23, 2026 · Last updated: Jul 18, 2026 · Advanced
demand #4 in Search Engine Tools#7 in Tools#142 in Technical SEO#194 on the site

The Performance report is Google Search Console's view of how your site actually did in Google — real clicks and impressions, not estimates. It reports four metrics (clicks, impressions, average CTR, average position) sliced across six dimensions, keeps 16 months, and is privacy-filtered and averaged — not a statistical sample. Average position is an average across queries (not your live rank), anonymized queries hide low-volume terms so the table won't sum to the chart, and the UI caps at 1,000 rows — for more, use the Search Analytics API (up to 25,000 rows per request) or the BigQuery bulk export. Web Search, Discover, and Google News are separate reports.

TL;DR — The Performance reportThe Google Search Console report that shows how your site actually performed in Google Search, built from real impressions and clicks. It reports four metrics — clicks, impressions, average CTR, and average position — and keeps the most recent 16 months of data. is real served-results data — clicks, impressions, average CTR, average position — across six dimensions, kept for 16 months. Impressions and position are counted per query, per page and then averaged; position is the topmost position your property held for that query, and it’s only recorded when there’s an impression. It’s privacy-filtered, not sampled: anonymized queries are dropped from the query table but stay in the chart totals, so rows won’t sum. The UI caps at 1,000 rows — the Search Analytics API returns up to 25,000 rows per request (not the 50,000 you’ll see repeated), and BigQuery bulk export is the path for everything. Web Search, Discover, and Google News are separate reports.

Evidence for this claim Search Console's Performance report exposes clicks, impressions, CTR, and average position, with dimensions including query, page, country, and device. Scope: Current Search performance report metrics and dimensions. Confidence: high · Verified: Google Search Console: Performance report Evidence for this claim Performance tables omit anonymized queries for privacy, so query-row totals may not equal chart totals. Scope: Current anonymized-query behavior. Confidence: high · Verified: Google Search Console: Anonymized queries

It’s real data, not a model

The first thing to internalize: these numbers come from actual results Google showed to actual people. John Mueller put it directly — the report is “based on actual search results that were shown to users. It’s not a theoretical number, but rather a number based on actual results.” It’s filtered by privacy rules and reshaped by averaging — not a statistical sample — but it isn’t invented.

That’s also why it’s the ground truth for your site in a way a third-party rank tracker can’t be — it’s Google reporting on Google.

The four metrics, exactly how they’re counted

Clicks

A click is counted when a user clicks through to a page outside of Google. Google’s wording: “any click that sends the user to a page outside of Google Search, Discover, or News is counted as a click.” Clicks that keep the user inside Google (expanding a result, say) don’t count. One documented exception: the AMPAMP (Accelerated Mobile Pages) is an open-source web framework Google launched in 2015 to make mobile pages load near-instantly via restricted HTML/CSS/JS and CDN caching. It was never a ranking factor and, since June 2021, is no longer required for Top Stories. reader opens inside Google but is still counted as a click.

Impressions

An impression means “a user has seen (or potentially seen) a link to your site in Search, Discover, or News.” The “potentially seen” part matters: on a normal results page, “an impression is counted whenever an item appears in the current page of results, whether or not the item is scrolled into view” — so you get an impression even if the user never scrolls down to your result. The exceptions are carousels, expandable widgets, and infinite scrollInfinite scroll is a loading pattern where content appears automatically as a user scrolls, instead of via numbered pages. Because Googlebot doesn't scroll or click, indexable infinite scroll needs real per-chunk URLs (paginated loading) that update via the History API — otherwise deep content may never be crawled, or worse, get merged into the wrong page., where “the item must typically be scrolled into view to count an impression.”

There’s also an aggregation wrinkle, and it isn’t a toggle you choose — it follows the dimension you’re viewing. The chart is always aggregated by property. In the table, grouping by Queries, Countries, Devices, or Dates aggregates by property too (one impression for the whole card, even if several of your URLs matched), while grouping by Pages or Search appearance aggregates by page (the same card can show up as several pages with one impression each). So switching which dimension you’re viewing can change your totals without you touching a filter.

Average CTR

Average CTR is just “the click count divided by the impression count.” It’s “average” because it’s computed across whatever set of rows you’re looking at, so filtering by page or query changes it.

Average position

This is the most misread metric on the report, so it’s worth being precise. Position is “an attempt to show approximately where on the page a given link was seen, relative to other results,” where “1 is the topmost position.” The reported number is “the topmost position occupied by a link to your property” — averaged across every query where you appeared. Mueller again: “If there are multiple URLs from your website which are shown in the search results page we’ll use the topmost one for this average.”

Two consequences:

  • It’s only recorded on an impression. “A link must get an impression for its position to be recorded.” So page-2 and page-3 appearances that nobody scrolled to don’t drag your average down — they’re simply not counted.
  • A worked example. Say a page ranks #1 for its head term but also surfaces at positions 20–40 for fifty long-tail variants. Its average position might read 12. That’s not “you rank 12th” — it’s the blend. Accuracy improves with impression volume; thinly-seen queries make the average noisier.

This is also why your average position won’t match your rank tracker. Mueller’s explanation: “You might not always see the same position when you check yourself. That’s generally due to personalization, or geoGenerative Engine Optimization (GEO) is the practice of optimizing content and brand presence so AI-powered search engines and assistants — Google AI Overviews, ChatGPT, Perplexity — cite, recommend, or mention you when generating answers. Google's position is that it's still SEO.-targeting, or because of short-lived visibility in search.”

Dimensions and the search-type filter

You can slice by six dimensions — Queries, Pages, Countries, Devices, Search appearance, and Dates — and the Search appearance dimension breaks out rich-result types (videos, AMPAMP (Accelerated Mobile Pages) is an open-source web framework Google launched in 2015 to make mobile pages load near-instantly via restricted HTML/CSS/JS and CDN caching. It was never a ranking factor and, since June 2021, is no longer required for Top Stories., recipes, and so on) where they apply. Within Web Search there’s a search-type filter for web, image, video, and news results.

Don’t confuse that filter with Discover and Google News, which are separate reports in the left nav, not values of the Web-Search search-type filter. If you read your Web Search numbers as your whole Google footprint, you’re missing those entirely.

16 months, comparison mode, and the personalization caveat

The report retains the most recent 16 months of data, so anything older needs to be exported and stored yourself. Date ranges support comparison mode (period over period). And if you run a query yourself and don’t see your own site, that’s expected — results are specific to the time, place, device, and recent history of the person searching.

One more freshness note: there’s an optional 24-hour view that shows data from the last available day with only a few hours’ delay — useful for checking how newly published content is picking up. The Search Analytics APIA set of REST APIs that let you programmatically read and manage Google Search Console data for properties you've verified — Performance data, URL index status, sitemaps, and properties — authorized with OAuth 2.0. extends that with an hourly HOURLY_ALL data state covering up to 10 days, which Google explicitly flags as data that “might be partial.” Treat anything from the most recent day or two as preliminary and let it settle before drawing conclusions.

Why your data is “missing”: anonymized queries

This is the section I have first-party data on. To protect privacy, Google withholds low-volume and sensitive searches from the query table while still counting them in the chart totals. Google’s own phrasing, which I quoted in my study of anonymized GSC queries: “To protect user privacy, the Performance report doesn’t show all data. For example, we might not track some queries that are made a very small number of times or those that contain personal or sensitive information.”

How much is hidden? In my Ahrefs study, “Almost Half of GSC Clicks Go to Anonymous Queries” (published February 2025), across one month of data spanning 146,741 websites and nearly 9 billion total clicks, “these instances of anonymous queries account for 46.08% of all clicks in our study.” Nearly half. In a February 2026 follow-up, I pulled April-2025 data across 22 billion clicks and 887,534 GSCA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. properties and foundA 302 (\"Found\") is a temporary redirect: it forwards users to a new URL while telling search engines the original URL should stay in the index. It's a weak canonicalization signal, not the zero-equity dead end of SEO folklore. anonymized queries had crept up to 46.77% — so this isn’t a fluke of my original sample, and the direction is up, not down.

Two practical takeaways:

  • Your query table will never sum to your total clicks. The gap is the anonymized queries. That’s not a bug — it’s the privacy filter plus property-vs-page aggregation doing exactly what they’re designed to do.
  • It’s likely getting worse, not better. As AI OverviewsAI Overviews are the AI-generated summary box Google shows above or within its regular search results, written by Gemini models from pages retrieved out of Google's normal Search index. It's a Search feature, not a separate platform or index. and other features reshape the SERP, expect more of the click data to fall below the visibility threshold.
TIP Estimate the hidden-query gap without pretending to recover exact queries

The model allocates the visible chart-to-table gap across candidate keywords. Its estimates are directional, not recovered Google data.

Compare a Performance export with third-party keyword candidates using my free Hidden Query Finder Free

  1. Export page-level Search Console performance data for a consistent date range.
  2. Add candidate keyword data and review the estimated hidden share by page.
  3. Use the confidence and allocation notes as prioritization clues, never as reconstructed query-level truth.
The useful output preserves the uncertainty: candidates and allocations are estimates, while the missing chart-to-table gap is real.

The result shows 200 total clicks, an estimated hidden click share of 25 percent, 50 estimated hidden clicks, 1,800 estimated hidden impressions, and one of two pages with hidden clicks. For a running-shoes page it lists two candidate keywords with medium and low confidence and explains that the allocation is modeled rather than precise attribution.

Beyond 1,000 rows: the API and BigQuery bulk export

The UI caps any export at 1,000 rows. The most common “how do I get more” question has two real answers — and one persistent myth to kill:

  • Search Analytics API (searchanalytics.query). Its rowLimit field has a “Valid range is 1-25,000; Default is 1,000.” So you get up to 25,000 rows per request, paginated with startRow (“Zero-based indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. of the first row in the response”). Not 50,000 — the 50,000 figure floating around applies to Looker Studio, not this endpoint. The URL Inspection toolA Google Search Console feature that reports how Google sees one specific URL on a property you own. By default it shows the last-indexed snapshot; a separate \"Test live URL\" mode fetches the current version. and the broader Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. API are siblings here for programmatic access.
  • BigQuery bulk export. This is the path when you want everything. It writes all the performance data available to your property — and crucially, instead of silently dropping anonymized queries, it folds them into a special aggregated row per site/URL per day, so impressions and clicks still sum correctly. There’s no daily 1,000-row cap. The data lands in searchdata_site_impression (aggregated by property) and searchdata_url_impression (aggregated by URL).

Common misreadings to avoid

  • “Average position 1 means I rank #1.” No — it’s the topmost link, averaged across all your queries.
  • “My query table should add up to my total clicks.” No — anonymized queries push the chart total above the visible rows.
  • “GSC clicks should match my Google Analytics sessions.” No — different definitions, deduplication, consent and measurement gaps, and timing all diverge.
  • “GSC average position should match my rank tracker.” No — personalization, geoGenerative Engine Optimization — visibility inside AI answer engines., device, and time pull live checks apart.
  • “The API gives 50,000 rows.” It’s 25,000 per request; paginate with startRow.
  • “Discover/News traffic is in my Web Search numbers.” It isn’t — separate reports.
  • “More impressions means something’s broken.” Impressions can rise from new queries or SERP featuresSERP features are any element on a search results page beyond the classic ten blue links — featured snippets, People Also Ask, knowledge panels, sitelinks, image and video packs, AI Overviews, and structured-data-driven rich results. Google documents that losing rich-result eligibility doesn't affect ranking; their SEO relevance is CTR (they redistribute clicks). Some are unlocked by markup; most are purely algorithmic. with no change in clicks; always read impressions alongside CTR and position, not alone.

For the broader walkthrough of every report, see the Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. hub; the Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. covers the coverage/indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. side rather than this performance side.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.