AI Crawlers
ChatGPT, Claude and Perplexity read your site. Your analytics snippet cannot see any of it, and no amount of configuration will change that.
This page explains why, and what to install instead.
Why the snippet can’t see them
sa.js runs in the browser. It records exactly what a browser executes: a
page loads, the script runs, it reports a page view.
An AI crawler executes nothing. GPTBot, ClaudeBot, PerplexityBot and CCBot make one HTTP request, read the bytes that come back, and leave. They never build a DOM, never run a script, and never fire a request to Snow.
This is architectural, not a setting. A <script> tag in <head> can only run
if something runs it. A crawler that only fetches bytes will never record a
visit, in Snow or in any other client-side analytics tool.
That traffic is roughly 82% of AI bot volume, and by default it is invisible to everyone.
The fix: report from your server
Your server does see every one of those requests. So the crawler half of Snow
installs there: a small piece of middleware reads the User-Agent and source IP
of each request and reports it to Snow.
This is a second, separate install. It does not replace your tracking snippet, so keep that exactly as it is. The two halves measure different traffic and never overlap.
| What it sees | Where it installs | |
|---|---|---|
sa.js (tracking snippet) | Humans, and agentic browsers that run JavaScript (ChatGPT Atlas, Perplexity Comet) | <head> on every page |
| Crawler reporting | Crawlers that only fetch: GPTBot, ClaudeBot, PerplexityBot, CCBot | Your server, middleware or edge |
The three legs
Once both halves are installed, Snow can follow an AI-driven visit end to end:
Crawl
An assistant’s crawler fetches your page. Shown on the AI Traffic section.
Citation
The assistant uses your page to answer someone’s question.
Visit
The person clicks through to your site. Snow already classifies these as AI referrals in Traffic sources (chatgpt.com, perplexity.ai, claude.ai, …).
The AI Traffic section joins the first and last: “GPTBot crawled /pricing 40 times
and sent 3 visitors.”
What counts as an AI crawler
Snow reports AI crawlers specifically: 55 crawlers across 21 operators, sorted by what they were fetching for:
| Category | What it means |
|---|---|
| Answer fetch | An assistant read the page to answer someone right now. |
| Search index | Building the corpus assistants search before answering. |
| Training | Bulk fetches collecting pages as training data. |
| Other AI | AI crawlers with no stated purpose, like ad and preview bots. |
| Markdown client | Took a Markdown version without a crawler token, usually coding agents. |
General bots are a different thing
Snow filters ordinary bots out of your human analytics. Googlebot, Bingbot, uptime monitors, scrapers, and headless-browser checks never appear as visitors, so your visitor counts stay honest. That filtering is automatic and needs no configuration.
The AI Traffic section is the other side of that coin: it reports the AI crawlers separately, as crawls rather than visits. It is deliberately not a general “all bots” report, so:
- Googlebot and Bingbot are excluded from the AI Traffic section, even though they feed AI answers indirectly. A well-indexed site can show zero AI crawler activity, which means no AI crawler has visited, not that the install is broken.
- Uptime monitors, scrapers and vulnerability scanners are not reported here either. They are filtered from analytics and otherwise ignored.
Next steps
- Install it: Next.js, Astro, Express, Cloudflare, Hono, WordPress, plain PHP
- Verification: how Snow tells a real GPTBot from something claiming to be one
- The AI Traffic section: reading the report