TrafficTriage

GA4 vs Search Console Clicks: We Found the Missing 40%

By Ugur Saritepe · October 1, 2026

Search Console said 2,619 clicks. GA4 said 1,565 Google organic sessions over the same 28 days on the same site. The whole 40% difference turned out to live in 32 countries, and the reason is a line of our own configuration, not a quirk of either tool.

Why I went looking

game-scout.app is my games site and my test bed. On 2026-09-04, reading a page-scores report, I wrote this:

Lets try to check also ga4 perspective. Because the numbers change a lot between vercel, ga4 and gsc actually. For example now I have 10k page view on vercel bu 2.5 k from ga4. In ga4 it shows 1k gsc click in search console it shows 2k

Three tools, three numbers, and no way to tell which one to plan on. Worth saying up front: the Vercel figure in that quote is the one number in this post I still cannot verify. The Vercel analytics endpoint for that project returned 404 Not Found: Web Analytics not found when I queried it on 2026-09-04 and again on 2026-10-01, so it stays a reported figure and never becomes evidence. What follows is the other two, which I can pull properly.

The site totals looked fine, so I nearly stopped

Both sides pulled on 2026-10-01 for the same window, 2026-09-03 to 2026-09-30. Search Console through the MCP server on my own account, GA4 through its reporting API on property 463665530.

Search Console   2,619 clicks   143,398 impressions   position 8.91
GA4              3,286 sessions   6,541 pageviews   2,876 active users
GA4 by channel   Organic Search 2,000 (google 1,562)   Direct 1,102

GA4 reports 3,286 sessions against 2,619 Google clicks, which is 125%. That is the right shape: Search Console counts clicks from Google alone, GA4 counts sessions from every source, so GA4 should be bigger. And the obvious reconciliation appears to work. GA4 files organic visits whose referrer it cannot read under Direct, so add the Google organic sessions to the Direct ones and you get 2,662 against 2,619 clicks. 101.7%. In September 2026 I wrote that down as near-exact and moved on.

A site-level total that reconciles is the weakest evidence in analytics. Two errors of opposite sign look exactly like no error at all. Join the two sources on a dimension before you believe the sum.

The page-level join broke it

Search Console reports clicks per page and GA4 reports sessions per landing page, so the two can be joined directly. These are the ten pages Google sends the most clicks to, against every GA4 session that landed on them from any source at all:

page                              GSC clicks   GA4 sessions   ratio
/best/best-detective-games               403            264     66%
/best/best-cleaning-chore-games          183            124     68%
/best/best-space-games                   176            102     58%
/best/best-trucking-games                162            138     85%
/best/best-flight-games                  129             93     72%
TOTAL, top 10 by clicks                1,539          1,101     72%

On the biggest page on the site, Google says it sent 403 visitors and GA4 recorded 264 arrivals from Google, Bing, DuckDuckGo, ChatGPT, bookmarks and everything else put together. Across the top ten, 1,101 sessions against 1,539 clicks. Adding Direct back closes part of it and nowhere near all of it. The reconciliation that worked on the totals does not survive contact with a single page.

One obvious alternative first, because Google names it. Search Console reports on the canonical URL while GA4 reports whatever URL loaded, so a site serving the same page at several addresses will split its GA4 rows and look short. That is not happening here: the GA4 landing-page pull returned 285 distinct paths with no query-string and no trailing-slash variants, and /best/best-detective-games appears exactly once. The 139 missing arrivals are not sitting under another URL.

The gap has a border

Both tools report country, so I grouped both sides by it. Search Console returned 212 country rows, not truncated, so absence means zero rather than a row limit. The split is not gradual:

                                    GSC clicks   GA4 sessions   ratio
the 32 EEA/UK/Switzerland countries      1,088            200     18%
everywhere else                          1,531          3,010    197%
whole property                           2,619          3,210    123%

41.5% of this site's Google clicks come from those 32 countries, and GA4 records 18 sessions for every 100 of them. Outside that group it records 197, which is the healthy over-count you expect once Direct and other search engines are in the number. Per country it is starker: the United Kingdom 302 clicks and 60 sessions, Germany 117 and 16, Belgium 37 and 3, Switzerland 16 clicks and zero sessions. Against the United States at 747 clicks and 1,398 sessions, and Canada at 135 and 190.

Nothing about the United Kingdom makes Google count clicks differently there. The border is the giveaway: a definitional difference between two tools applies everywhere, and a configuration applies where you pointed it.

The line of our own code

The 32 countries are a list in our own repository. Our root layout sets Consent Mode v2 defaults and denies analytics storage for exactly that list, and the comment above it has said what that costs since the day it shipped:

// Consent Mode v2 defaults. US-core opt-out model: granted by default, but
// denied in the EEA/UK/Switzerland (CONSENT_REQUIRED_REGIONS). There is no
// consent banner, so in those regions GA4 stays in cookieless-ping mode.

With analytics storage denied and no banner anywhere on the site to ask for it, consent is never granted and the setting never changes. GA4 in that state sends cookieless pings rather than attributed sessions, and what reaches the reports in our case is roughly one session in five. The list is 32 entries long: the European Economic Area plus the United Kingdom, Switzerland, Iceland, Liechtenstein and Norway. Those are our second, fifth, sixth and ninth largest countries by Google clicks.

Google's own documentation names this cause, once, in one clause: if your site is asking users to accept tracking, and users opt out, that can skew Google Analytics data. What its list of eight reasons does not cover is the case we are in, where nobody was asked and the default was never lifted. That is not users opting out. That is a site opting out on their behalf and then reading the resulting reports as if they were complete.

If your traffic is meaningfully European and you set Consent Mode defaults without shipping a consent banner, your analytics is not under-counting a little. It is close to blind in those countries, and your site totals will not show it.

What I have not separated

Consent is the only explanation I have that is geographic, and the gap is geographic, so it is the leading one. It is not proved alone, and two other things in the same code path suppress pageviews.

Both of those apply worldwide, which is why they cannot be the border. The non-consent countries still read 197%, so whatever those two cost, they cost it on top of a number that is already healthy. Sizing them would mean changing the configuration and re-measuring, and I have not done that.

Two more limits worth stating. Search Console clicks are Google-only and GA4 sessions are all-source, so the 197% is expected and only the 18% is the anomaly; the comparison is useful for spotting a border, not for auditing either tool. And the GA4 cross-tabs total 3,206 to 3,210 sessions against the plain report's 3,286, a difference of about 80 from how GA4 handles rows it cannot attribute. I have reported both numbers rather than picking the flattering one.

How to check this on your own site

Four steps, about ten minutes, no paid tool. Stop at the first one that settles it.

  1. Pull your Search Console clicks by country. Group by country over 28 days and note the row count. If the rows are not truncated, a missing country is a real zero.
  2. Pull your analytics sessions by country for the same dates. Exactly the same window on both sides, or you are comparing two different weeks.
  3. Divide, country by country, and look for a border. A ratio that is roughly flat everywhere is the normal definitional difference between clicks and sessions, and there is nothing to fix. A ratio that collapses in one group of countries is a setting, and the group names it for you.
  4. Read your own consent configuration before you blame the tool. Search your codebase for consent and analytics_storage. If a region list appears next to deniedand you cannot find a banner that asks, you have your answer, and it is not Google's.

The same method works on any dimension both tools report. Country is first because privacy defaults are drawn on borders, so a configuration problem shows up as a cliff rather than a slope. Device type is the useful second one, and landing page is the one that told me the site total was lying before I knew why.

What we have not fixed

We have not shipped a consent banner, so the 1,088 clicks in those 32 countries stay unmeasured, and every GA4 report I read for September was missing a third of the site. The setting shipped with a comment describing exactly this outcome, which means it was understood and then forgotten, which is worse than not knowing.

And we have not measured how many visitors the deferred tag loses, because measuring it needs the tag loaded earlier, which is the thing we deliberately stopped doing for page speed. Both of these are still true at the time of writing.

What to do with this

If one number has to be the one you plan on, use Search Console clicks for anything about search. It is Google reporting its own clicks, there is no tag to break, no consent gate in front of it and no deferred script to miss. Its weakness is the opposite one: it stops at the click and tells you nothing about what happened next, and it names only some of your queries.

Use analytics for behaviour after the click, and treat its traffic totals as a floor rather than a count until you have run the country split above. On this site that floor is 60% of the real figure for Google traffic, which is enough to make a page look dead when it is doing fine.

This is the third measurement in this series where a number turned out to mean something narrower than it looked. The average position autopsy and the keyword volume one are the other two, and the rest are in the AI-assistant SEO series. If your pages are earning impressions and no clicks at all, that is a different problem and this post covers it. And if what you actually want to know is whether Google can see and index the pages you already have, the free Triage Report runs eight checks from a URL and scores them on screen in about 30 seconds, no signup.

FAQ

Why does GA4 show fewer clicks than Search Console?

Usually because something is stopping the tag from recording a visit, and the most common cause is a consent setting you chose yourself. On game-scout.app over the 28 days to 2026-09-30, Search Console counted 2,619 clicks and GA4 recorded 1,565 Google organic sessions, which is 60%. The whole shortfall sat in 32 countries where our own Consent Mode default denies analytics storage and there is no banner to reverse it: 1,088 clicks there against 200 GA4 sessions from every source combined, 18%. Everywhere else GA4 recorded 94% of Google's clicks.

Should GA4 sessions and Search Console clicks ever match?

No, and the point is not to make them match. Search Console counts clicks from Google only, while GA4 counts sessions from every source, so GA4 should normally be the larger number. What matters is the direction and the size of the difference. Our site total looked healthy at 123% of Search Console clicks. The same data split by country showed GA4 recording one session for every five clicks in a third of our traffic, which the site total hid completely.

How do I find out which half of the gap is wrong?

Join the two sources on a dimension both of them report, then look at the spread rather than the total. Country is the fastest one because consent rules and privacy defaults are geographic. Group Search Console clicks by country, group GA4 sessions by country, and divide. A uniform ratio means you are looking at a definitional difference between the two tools. A ratio that collapses in one group of countries means a configuration, and you can usually name it in your own code.

Does Consent Mode explain the whole gap?

On our site it is the only explanation that is geographic, and the gap is geographic, so it is the leading one. We have not proved it alone, because proving it would mean switching the default off and re-measuring, which we did not do. Two other things in our own code suppress pageviews and we have not sized either: the tag loads at browser idle, so a visitor who leaves early sends nothing, and a bot filter drops anyone sending Do Not Track. Both would depress the non-consent countries too, and those still read 197%.

Your analytics is a measurement of your tag. Search Console is a measurement of Google. Create a free account, connect Search Console, and the MCP server lets your assistant pull your own click rows by page, by country and by query in one session, which is the half of this comparison that nobody can break with a configuration mistake. The country split that found this took me one message to run. The part that used to take an afternoon was realising the site total was fine and the site was not.

Create an account

Claude running a scheduled TrafficTriage daily check: a Search Console report on a real site, summarized with clicks, impressions, and the one query cluster that lost rank

In your AI assistant

Ask your AI about your own site

TrafficTriage plugs into Claude, Cursor, and ChatGPT. Your assistant runs the 8 checks, reads your Search Console data, and can even check your site every morning. Free account, no API key, nothing to install.