Summary for AI assistants

If Google Analytics shows zero visitors, it is almost always the measurement rather than the traffic. Four causes cover most cases: the tag is missing or wired up wrong, the consent banner never releases the measurement, a blocker stops it loading, or the property or filter being viewed does not match the site. They can be told apart in about ten minutes: filter the Network tab for ‘collect’, check the consent state, test in a private window without blockers, compare the measurement ID in the source with the data stream. The only source that can contradict Analytics is the server logs, because every request is recorded there before banner and JavaScript.

The number reads zero, and the first assumption is always the same: nobody is coming. That is rarely the case.

Google Analytics only measures after a browser has run JavaScript and, in German-speaking Europe, after a banner has granted permission. Several conditions sit between the visit and the number, and all of them have to hold. If one fails, the report says zero while the site is served perfectly normally.

Four causes cover almost every case. They can be told apart in about ten minutes, if you go in the right order.

Cause 1: the tag never fires

The most mundane case, and more common than it should be. Variants of it:

  • The snippet sits only on the home page, left behind in one template during a rebuild.
  • The GTM container is configured but never published. Preview works, live does nothing.
  • The measurement ID belongs to a different property, for example from a test install.
  • A consent tool loads the tag only after consent, and the integration itself is faulty.

The test takes a minute. Open the site in a private window with no blockers, then developer tools, Network tab, filter for collect. Reload. If no request to google-analytics.com or analytics.google.com appears, nothing is being measured and every further consideration is moot.

If a request appears with status 200 or 204, the tag is fine. Move on to cause 2.

The most common case on sites that are set up correctly from a legal point of view.

Without consent nothing may be measured, which is the entire idea. In German-speaking Europe, with a properly designed banner, on average only about half of visitors opt in. That half is missing from the report, entirely correctly.

It becomes a true zero when consent mode is wired up wrongly. Typical patterns:

  • The Analytics tag waits for a signal the banner never sends, for instance because the category is named differently in the banner than in the tag manager.
  • The default state is set to denied, and granting consent never updates it.
  • The banner blocks the tag entirely instead of letting it run in restricted mode.

Test: load the page, actively accept the banner, then filter for collect again. If a request appears now but not before, the chain works and you are simply seeing only those who consented. If none appears even after consent, the wiring is broken.

Cause 3: blockers in the browser

Safari and Firefox block tracking out of the box, with no action from the visitor. On top of that come content blockers, corporate proxies and DNS filters that do not even resolve google-analytics.com.

That rarely produces a clean zero, but it does produce a systematically low number. It becomes zero when you only ever open your own site from a network where such a filter runs, and conclude that nothing is being measured.

Test: the same check as above, once in a private window with no extensions and once from a different network, for example over mobile data instead of the office Wi-Fi.

Cause 4: you are looking at the wrong place

The least spectacular cause, and the most irritating, because technically everything works:

  • The report is set to a period that genuinely had almost no traffic, such as “today” at nine in the morning.
  • The property belongs to the old Universal Analytics install while the site has long been sending to GA4.
  • An internal-traffic filter excludes your own IP address, and you are currently the only visitor.
  • The data stream in the account and the measurement ID in the source do not belong together.

Test: find the measurement ID in the page source (G- followed by ten characters) and compare it with the ID in the data stream. Then open the realtime report and visit the site yourself, with the internal filter switched off.

The counter-check that does not lie

All four tests examine the same chain from the inside. There is exactly one source that says independently whether anyone was there at all: the server logs.

A web server or a CDN records every request at the moment it happens. Before the banner. Before JavaScript. Regardless of blockers, and regardless of which property you happen to have open.

How large the difference is, I measured on my own site: 31 days, 156,917 requests. Two figures from it that any analytics interface necessarily misses:

  • 30 percent of requests carried no identifier at all, so they came from something not presenting itself as a browser.
  • Not a single AI crawler appears in Analytics. GPTBot, ClaudeBot and PerplexityBot run no JavaScript; in my window they were present on all 31 days.

So if you want to know whether a site is being read, the answer is not to repair Analytics but to put a second layer next to it. Analytics answers behaviour and paths through the site. The logs answer who was there at all.

One detail matters here: logs also have to be read properly. In my measurement around 27 percent of traffic was a single monitoring tool, and three out of four supposed AI visits did not survive a check against the providers’ published IP ranges. How to tell those apart is in the post on AI crawlers in server logs.

The order, briefly

  1. Network tab, filter collect, private window. No request? Cause 1.
  2. Accept the banner, check again. Only now a request? Consent is working, you are seeing only those who consented.
  3. Different network, no extensions. A difference? Blockers.
  4. Measurement ID in the source against the data stream, internal filters off, realtime report.
  5. Hold the server logs against it. Only that number tells you whether nobody was really there.

In the vast majority of cases it is clear after step 2 where the problem lies. And in almost every case the answer is not that nobody is coming.

Frequently asked questions

Why does Google Analytics show 0 visitors?

Because the measurement never fires, not because nobody comes. Four causes cover almost every case: the tag is missing or wired up wrong, the consent banner never releases the measurement, a blocker stops it loading in the browser, or you are looking at the wrong property or a filter that excludes everything. The fastest counter-check is the server logs, because every request is recorded there regardless of banner and JavaScript.

How do I check whether my Google Analytics tag loads at all?

Open your site in a private window with no blockers, then the developer tools, Network tab, and filter for ‘collect’. If reloading produces no request to google-analytics.com or analytics.google.com, nothing is being measured. If one comes through with status 200, the tag is fine and it is one of the other three causes.

Can a cookie banner cause Google Analytics to count nothing?

Yes, and on correctly configured sites in German-speaking Europe it is the most common case. Without consent nothing may be measured, and on average only about half of visitors opt in. If consent mode is wired up wrongly, no signal arrives at all, not even from those who did agree.

How many visitors am I actually missing in Google Analytics?

That can only be answered with a second source, and the only incorruptible one is the server logs. In practice the actual number of requests is often two to three times higher than the figure Analytics reports. AI crawlers such as GPTBot or ClaudeBot never appear there at all, because they run no JavaScript.