{
  "question": "Why does Google Analytics show almost no AI bot traffic, and how do I measure how much of my site's traffic is AI agents vs humans?",
  "slug": "why-google-analytics-shows-almost-no-ai-bot-traffic-and-how-to-measure-it",
  "url": "https://www.rightshold.com/answers/why-google-analytics-shows-almost-no-ai-bot-traffic-and-how-to-measure-it",
  "short_answer": "Google Analytics can't see most AI traffic, so it can't tell you the split. GA4 counts visits when its JavaScript tag runs in a browser, and Google says it automatically removes traffic from known bots and spiders (using its own research and the IAB's International Spiders and Bots List). You can't turn that off or see how much it removed. Most AI crawlers never run the tag anyway: Vercel's December 2024 study found that none of the major AI crawlers it measured render JavaScript, including GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot and PerplexityBot. What GA4 does show is people who click through from AI assistants: since May 13, 2026 it has an AI Assistant channel for visits from sources like ChatGPT, Gemini, Deepseek, Copilot or Grok, and ChatGPT adds utm_source=chatgpt.com to the links it shows. To measure the actual split, count from your server or CDN logs, where every request appears, and sort each one into verified crawler, AI user fetch, signed agent, unverified automation or likely human.",
  "checklist": [
    "Use server or CDN logs as the denominator, not GA4. Keep user agent, source IP, path, status, time and any Signature-Agent header for at least a few weeks.",
    "Count page requests only. Drop static assets, health checks, your own monitors and deploy probes first, or they swamp the numbers.",
    "Sort each request into one bucket: verified search or AI crawler (IP in the operator's published list or a reverse-plus-forward DNS match), AI user-triggered fetch (ChatGPT-User, Claude-User, Perplexity-User, also verified by IP), signed agent (a Web Bot Auth signature that verifies), unverified automation (scripts, headless browsers, bot names from the wrong IPs) and likely human.",
    "Be strict about 'likely human'. A browser user agent isn't enough: also require a non-datacenter network, page assets loaded, and ideally a first-party beacon that only fires when JavaScript runs. Swarms of cloud IPs sending real browser user agents are common and will otherwise look like people.",
    "Report the split two ways, by requests and by unique visitors per day (IP plus user agent). Crawlers dominate request counts; humans look larger when you count visitors.",
    "Track AI click-throughs separately: in GA4, check the AI Assistant row in Traffic acquisition, then switch the dimension to Session source / medium and search for chatgpt, perplexity, claude, gemini and copilot. Google's AI Overviews and AI Mode clicks are counted under Organic Search, not AI Assistant.",
    "Compare the two sources every week. Log-based likely-human page views should be in the same range as GA4 views. If logs show many times more 'humans' than GA4, your human filter is letting automation through."
  ],
  "sections": [
    {
      "heading": "Why GA4 under-counts AI traffic by design",
      "points": [
        "Two filters stack up. First, the GA4 tag is JavaScript, so a client that downloads HTML without running scripts never sends a hit. Vercel's crawler study found ChatGPT's and Claude's crawlers do fetch JavaScript files (11.50% and 23.84% of their requests on nextjs.org) but don't execute them; Gemini, using Googlebot's infrastructure, and Applebot do render.",
        "Second, Google's help page says traffic from known bots and spiders is excluded automatically, and that at this time you can't disable that exclusion or see how much was excluded. So even a bot that runs your tag usually disappears.",
        "That's the right behaviour for marketing analytics and the wrong tool for capacity planning, bot policy or deciding whether AI agents matter to your business. Those questions need every request, which only your logs have."
      ]
    },
    {
      "heading": "What GA4 can tell you about AI",
      "points": [
        "AI Assistant channel: Google's default channel definitions say the medium is set to ai-assistant and the campaign to (ai-assistant) when the referrer matches Google's list of AI assistants. The channel covers sources like ChatGPT, Gemini, Deepseek, Copilot or Grok and excludes Google's AI Overviews and AI Mode, which stay in Organic Search.",
        "ChatGPT tagging: OpenAI's publisher FAQ says ChatGPT automatically includes utm_source=chatgpt.com in referral URLs. Look for that source when a referrer is missing, and check that the visit landed in the channel you expect.",
        "These are people who clicked. They don't count the far larger number of times an assistant read your page for someone without a click; in logs that shows up as ChatGPT-User, Claude-User or Perplexity-User requests."
      ]
    },
    {
      "heading": "A worked split from logs",
      "points": [
        "Say one day has 20,000 page requests after removing assets and your own probes. Verified crawlers (Googlebot, Bingbot, GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot and others in their published ranges) are 9,000; AI user fetches 40; signed agents 10; unverified automation 10,500; likely humans 450. Automated share by requests is 97.75%.",
        "Count unique visitors the same way and humans will be a bigger share. Publish both numbers, the date range and your rules, so the split can be repeated next month with the same method."
      ]
    }
  ],
  "checks": [],
  "ask_rightshold": {
    "start": "https://www.rightshold.com/start?ref=seo",
    "mcp_endpoint": "https://www.rightshold.com/mcp",
    "ask": "This request in my logs says it's an AI agent and carries Web Bot Auth headers. Does the signature verify for my site, so I can count it as a signed agent?",
    "mcp_call": {
      "tool": "gate_check",
      "arguments": {
        "policy": {
          "domain": "www.example.com",
          "require_web_bot_auth": true
        },
        "request": {
          "method": "GET",
          "url": "https://www.example.com/<path>",
          "headers": {
            "user-agent": "<as received>",
            "signature-agent": "<as received>",
            "signature-input": "<as received>",
            "signature": "<as received>"
          }
        }
      }
    },
    "also": [
      "Free, no key. If the signature verifies, the answer names the signer (the Signature-Agent host or URL), so the request goes in the signed-agent bucket under a real operator, not just a claimed name.",
      "A missing or failing signature is denied under require_web_bot_auth with the reason. Most crawlers don't sign yet, so check unsigned ones against the operator's IP list or reverse DNS instead."
    ],
    "scope": "Rightshold doesn't read your analytics or logs, count your traffic or block anything. gate_check verifies one Web Bot Auth signature against the policy you send. The bucket rules and example numbers above are a method, not a measurement of your site."
  },
  "sources": [
    {
      "title": "Google Analytics Help: Known bot-traffic exclusion (automatic; IAB list; can't disable or see how much)",
      "url": "https://support.google.com/analytics/answer/9888366"
    },
    {
      "title": "Google Analytics Help: Default channel group (AI Assistant channel; medium ai-assistant; AI Overviews and AI Mode in Organic Search)",
      "url": "https://support.google.com/analytics/answer/9756891"
    },
    {
      "title": "Google Analytics Help: What's new in Google Analytics (May 13, 2026: new AI Assistant traffic measurement)",
      "url": "https://support.google.com/analytics/answer/9164320"
    },
    {
      "title": "Vercel: The rise of the AI crawler (Dec 17, 2024; major AI crawlers don't render JavaScript)",
      "url": "https://vercel.com/blog/the-rise-of-the-ai-crawler"
    },
    {
      "title": "OpenAI Help Center: Publishers and Developers FAQ (utm_source=chatgpt.com in referral URLs)",
      "url": "https://help.openai.com/en/articles/12627856-publishers-and-developers-faq"
    },
    {
      "title": "OpenAI: Overview of OpenAI crawlers (GPTBot, OAI-SearchBot, ChatGPT-User; published IP lists)",
      "url": "https://developers.openai.com/api/docs/bots"
    },
    {
      "title": "The Gate on Rightshold",
      "url": "https://www.rightshold.com/gate"
    }
  ],
  "related": [
    {
      "title": "How to tell ChatGPT-User fetches from AI training crawlers in server logs",
      "url": "https://www.rightshold.com/answers/how-to-tell-chatgpt-user-fetches-from-ai-training-crawlers-in-server-logs"
    },
    {
      "title": "How to verify which AI agent is hitting your site with Web Bot Auth",
      "url": "https://www.rightshold.com/answers/how-to-verify-which-ai-agent-is-hitting-your-site-with-web-bot-auth"
    },
    {
      "title": "How to block spoofed ChatGPT-User and Perplexity-User requests at the edge without blocking the real ones",
      "url": "https://www.rightshold.com/answers/how-to-block-spoofed-chatgpt-user-and-perplexity-user-requests-at-the-edge-without-blocking-the-real-ones"
    },
    {
      "title": "How to catch crawlers that ignore robots.txt with a disallowed trap URL",
      "url": "https://www.rightshold.com/answers/how-to-catch-crawlers-that-ignore-robots-txt-with-a-disallowed-trap-url"
    }
  ],
  "computed_from": "Curated guidance; license verdicts computed from Rightshold's license profiles at render time. Not legal advice.",
  "updated": "2026-11-09"
}