ChatGPT traffic is three measurements. A crawler request, a human click, and a citation are not the same event. Count each one with its own tool.
Three different measurements
A crawler requests a URL from your server. No browser runs, so no analytics script runs.
A human click comes from a person who followed a link in an assistant. The browser may send a referrer or a UTM parameter. It may send neither.
A citation is an answer that names or links to you. Crawl logs and referral reports do not prove that answer. Read a saved answer to check a citation.
Crawlers in your server logs
OpenAI documents separate user agents on its bots page. GPTBot collects pages that may train models. OAI-SearchBot fetches pages for ChatGPT search. ChatGPT-User fetches a page after a person asks ChatGPT to visit it.
Each robots.txt setting is independent. You can allow OAI-SearchBot and disallow GPTBot. If you allow both, OpenAI may reuse one crawl for both uses. ChatGPT-User is started by a person, so robots.txt may not apply. It does not decide search inclusion.
Blocking OAI-SearchBot can keep pages out of ChatGPT search snippets. OpenAI may still show a link and title if it learned the URL elsewhere. Use noindex to limit that, and let the crawler read the tag. That note is in OpenAI's publisher FAQ.
Bot crawlers uses the same split. GPTBot is Training. OAI-SearchBot is Indexing. ChatGPT-User is Answers. OAI-AdsBot is Other, because it visits pages submitted as ads.
Training means a corpus crawler requested the URL. It does not prove a live answer. Answers means an on-demand fetch for a user. Indexing means a search crawler fetched the page for an index. Other covers advertising and link-preview fetches.
ClaudeBot is Training, and Claude-User is Answers. PerplexityBot is Indexing, and Perplexity-User is Answers. For xAI, Grok-DeepSearch is Answers, xAI-SearchBot is Indexing, and GrokBot is Training.
The crawler directory names 70 crawlers. Each entry has a user-agent sample and a robots.txt token.
A row means that bot requested the recorded URL. No row means Aiola received no matching beacon in that period. It does not prove the bot was unable to reach the site.
Filter logs for the tokens you care about. This nginx example prints recent matches.
grep -E "GPTBot|ClaudeBot|PerplexityBot|OAI-SearchBot|ChatGPT-User" /var/log/nginx/access.log \
| awk '{print $1, $7, $9}' | tail -20
A GPTBot spike on /pricing means OpenAI fetched that URL. It does not mean a person opened it.
A firewall rule can return 403 to bots while Chrome still loads the page. Check with curl and a bot user agent:
curl -A OAI-SearchBot -I https://yoursite.com/
A 200 shows the server accepted that user agent.
Human visits from ChatGPT
OpenAI's publisher FAQ says ChatGPT adds utm_source=chatgpt.com to referral URLs from search results. Also watch referrers whose host contains chatgpt.com or chat.openai.com.
In Aiola, a referrer is grouped as ChatGPT when the host contains chatgpt., chat.openai., or openai.. The openai. match is broad. Check the full host before you treat every hit as ChatGPT search.
Other matched hosts include perplexity., claude.ai, gemini.google., bard.google., and copilot.microsoft.. Grok matches grok.com, x.ai, and grok.x.. A referrer of x.com alone is not that Grok rule. bing.com/chat is not the Copilot rule.
The AI view lists AI-answer referrals apart from crawler rows. More assistants match than the hosts named here. Traffic still shows every referrer and UTM campaign.
In GA4, open Traffic acquisition and add Session source. Filter the source or referrer for chatgpt or openai.
Some clients strip the referrer. A copied URL has none. Those visits show as Direct, so treat the assistant count as a floor. Compare it with Direct on the same pages.
You can add utm_source=chatgpt.com on links you write yourself, such as docs or support replies. That tag is yours. It is separate from the tag OpenAI adds.
Discovery files and citations
Publish /llms.txt with short public facts: product name, price, platforms, and download URL. You can also publish /llms-full.txt. A request for either file shows discovery. It does not show a citation.
Confirm robots.txt with curl, not with a guess. Pricing, docs, and sitemap.xml should return 200 to those bots. Firewall rules should not return 403 on public pages. The sitemap should list real URLs and real lastmod dates.
Ask ChatGPT a product question on a schedule you keep. Save the answer, and log whether your site is named. That note is the citation check. Aiola does not run that prompt for you.
What Aiola Analytics records
The Analytics AI view shows crawl totals, bots, pages, and activity over time. Its buckets are Answers, Indexing, Training, and Other. It also shows AI-answer referrals, crawler 404s, and discovery-file health. GPTBot is Training, OAI-SearchBot is Indexing, and ChatGPT-User is Answers.
Crawlers do not run JavaScript, so the browser tag cannot see them. One server or edge snippet from Set Up Analytics posts each matching hit. Only known crawler user agents are stored.
A recorded crawl is not proof that the vendor cited the page. An empty period is not proof that the vendor cannot reach the site.
A check you can run this week
Curl the homepage, pricing page, and /llms.txt as GPTBot, OAI-SearchBot, and ChatGPT-User. Fix a 403 before you trust an empty crawl report.
Compare seven days of those log lines with the GA4 chatgpt filter and with Direct. Fix one crawler 404 or one indexing issue. Record whether one saved answer cites you.
Try it in Aiola
Download Aiola free for macOS 12 or later and Windows 10 or later. Hosted Analytics needs Pro or the 7-day trial, and the pricing page lists both. Open Analytics, then compare crawler activity with AI-answer referrals in the AI view.




