Skip to content
New storyWe built Skald to count visitors. It caught an AI-key thief.
SkaldEvery visit, truly told.

Insights · Google Analytics

Why Google Analytics misses AI crawlers: and the AI visitors it half sees

Google Analytics misses AI crawlers for a simple reason: it counts browsers that run its script, and AI crawlers never run it. Even if one did, GA4 drops known bots on purpose. Here is what that leaves out, and where to find it.

Why Google Analytics misses AI crawlers: GA4 counts a visit only when its JavaScript tag runs in a browser and sends a hit to Google. AI crawlers and AI fetchers request the HTML and leave without running scripts, so no hit is ever sent. Only your server's access log records them.

By · Updated · 6 min read

The short answer

Google Analytics is not broken, and it is not set up badly. It was built to count people in browsers, and it does that. AI crawlers are not people and do not use browsers, so they fall outside what it can see. Three things stack up:

  1. No script runs. GA4 counts a visit when its JavaScript tag runs. AI crawlers fetch the HTML and leave without running it.
  2. Known bots are dropped on purpose. GA4 excludes known bot traffic by design, so a bot that did run the tag would still not be counted.
  3. AI clicks lose their referrer. The people AI sends you do reach GA4, but many arrive without the referrer that says where they came from.

The rest of this note takes each in turn, then shows where the missing traffic is.

How Google Analytics counts a visit

When a person opens your page, their browser loads the HTML, then the files the page asks for, including Google's tag. The tag runs in the browser and sends a small hit to Google: this page, this time, this source. No hit, no visit. Everything GA4 reports is built from those hits.

That design has a clear edge. Whatever happens on your server without a browser running the tag never reaches Google. Your server answered the request, but Google was never told.

Reason 1: AI crawlers never run the tag

An AI crawler wants your text, not your page as a person sees it. GPTBot, ClaudeBot, PerplexityBot and the rest ask your server for the HTML, read it, and move on. They do not run your scripts, so the tag never fires. Here is what your server saw, and GA4 did not (sample data):

203.0.113.24 - - [22/Oct/2026:02:10:07 +0000] "GET /pricing/ HTTP/1.1" 200 18342 "-" "... GPTBot/1.2; +https://openai.com/gptbot)"
192.0.2.61 - - [22/Oct/2026:02:11:40 +0000] "GET /blog/ HTTP/1.1" 200 14210 "-" "... ClaudeBot/1.0; +claudebot@anthropic.com)"

Two page requests, no asset requests after them, no hit to Google. The same is true of the live fetchers. When someone asks ChatGPT a question and it reads your page to answer, the request says ChatGPT-User and behaves the same way: the HTML, then gone. Claude-User and Perplexity-User do the same. These are the most interesting AI requests you get, because a real person was waiting, and they never run a script either.

Reason 2: GA4 drops known bots on purpose

Suppose a crawler did render your page and run the tag. GA4 would still leave it out. Google's own docs say GA4 excludes traffic from known bots and spiders automatically. That is the right choice for a tool that counts people: nobody wants crawlers in their conversion rate.

But it means GA4 is not the place to look for machines, by design. Search engine crawlers are excluded for the same reason. If you want to know what Googlebot, GPTBot or ClaudeBot did on your site, GA4 will not tell you, and is not trying to.

Reason 3: the people AI sends you, half seen

The third kind of AI traffic is people. Someone reads an answer in ChatGPT, Perplexity or Claude, clicks the link, and lands on your page in a normal browser. The tag runs, and GA4 counts them. As Google's docs read in October 2026, GA4's default channels even group visits from AI assistants together, apart from Google's own AI Overviews and AI Mode.

The catch is the referrer. GA4 knows a visit came from ChatGPT only if the browser said so. Many AI apps open links in their own browser and send no referrer, privacy settings strip it, and a site's own Referrer-Policy can drop it. Those people still arrive, but GA4 files them under direct. So the AI figure you see in GA4 is real, and it is low.

Google's AI features are a special case. A click from Google AI Mode whose address carries udm=50 can be told apart in a server log. A click from an AI Overview carries nothing at all and looks exactly like any Google search click, in GA4 and in the log alike. Nobody can count those honestly.

People Google Analytics misses too

The same edge cuts through human traffic. A person whose ad blocker stops Google's tag sends no hit. A person who declines the cookie banner sends nothing at all under basic consent mode, and only cookieless pings under advanced consent mode, which GA4 then models. Google publishes no rate for how many visits ad blockers hide.

None of this is a fault in GA4. It is what any tool built on a script tag can see. Your server log, on the other hand, writes a line for every request whatever the browser blocked or the visitor chose.

One morning, two records

Put a morning's server log beside the same morning in a script-tag tool and the gap is plain. A sample, for a small site:

What cameServer logScript-tag analytics
People who loaded a pageYes, including those with blockersOnly those whose browser ran the tag
People from an AI answer, referrer keptYes, as people from that assistantYes
People from an AI answer, referrer lostDirect, though the assistant's fetch of that page may sit minutes before itDirect
GPTBot, ClaudeBot and other training crawlersYes, page by pageNo
ChatGPT-User and other live fetchesYes, page by pageNo
Fakes using a crawler's nameYes, and checkable by addressNo

The log is not better at everything. It cannot see what happens inside a page after it loads, it has no link to ad spend, and it records requests, not people, until something turns them into visits. That is why the two work best side by side.

How to see what Google Analytics misses

If you have shell access to your web server, one command gives you a first look. On nginx:

grep -oE "GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|PerplexityBot|Perplexity-User" \
  /var/log/nginx/access.log | sort | uniq -c | sort -rn

That counts requests by name. It does not check whether each one is real, and scanners often borrow GPTBot's name. For the full walk-through, with the pages each bot read and how to check an address against the owner's list, read how to see AI bots in server logs. For the difference between OpenAI's names, read GPTBot vs ChatGPT-User.

Keep Google Analytics, add the log beside it

You do not need to give up GA4 to see AI traffic. Keep it for ad spend, the Google Ads link and in-page analysis. Skald sits beside it and reads the record GA4 never receives: your server's access log.

Skald sorts every line into five groups that add up to the log: people, AI assistants, search engines, bots and scanners, and your own traffic. AI traffic is split by reason, so a training crawl, a live fetch and a click-through are never added together. Each crawler is checked against its owner's published addresses, and a fake shows as "claims to be GPTBot", under bots.

For the clicks that lost their referrer, Skald makes an estimate and keeps it apart: a direct visit to a page an assistant fetched minutes before is marked likely from that assistant, never added to any count. People are counted as visits, an upper bound on people, never as requests. Every figure is counted twice by a separate audit, and a day the two counts disagree on is withheld.

See the side-by-side in Skald vs Google Analytics, or how the counting works in server log analytics. The live demo shows the whole dashboard with sample data and no sign-up, and the 30-day free trial needs no card; we set it up within one working day.

questions

Google Analytics and AI crawlers FAQ

Straight answers, including what Skald does not do.

Can Google Analytics track AI crawlers?

No. GA4 counts a visit when its tag runs in a browser, and AI crawlers such as GPTBot and ClaudeBot fetch the HTML without running scripts. GA4 also excludes known bot traffic on purpose. To see AI crawlers, read your server's access log.

Does Google Analytics show traffic from ChatGPT?

Partly. GA4 can show people who click a link in a ChatGPT answer, when the referrer survives. It never shows ChatGPT-User, the fetcher that reads your page while someone waits for an answer, and clicks that lose their referrer arrive as direct.

Why is my AI traffic in GA4 so low?

Because GA4 sees only one of the three kinds of AI traffic: people who click through. Training crawls and live fetches never reach it, and many AI apps strip the referrer, so some of the clicks land in direct.

Should I replace Google Analytics to see AI traffic?

No need. Keep GA4 for ad spend, the Google Ads link and in-page analysis. Add a tool that reads the server log beside it for the AI crawlers, the live fetches and the visitors GA4 never receives.

$ tail -f access.log | skald

See what AI does with your site. Free for 30 days.

No card. We set up hosted Skald for you within one working day, or you self-host it free. Every line of your log, sorted and added up.

Start free trial Live demo