The Search Console for soamee.com shows searches that are not keywords but entire questions. One from a recent week, in German: “kann man messen, wie viel traffic und wie viele leads über chatgpt und andere ki-assistenten auf die eigene website kommen? wie richtet man das ein?”. Twenty-five words typed into Google to ask how to measure what comes in from ChatGPT.
It can be measured, though not all of it. This guide builds the measurement in five layers: a dedicated channel in GA4, a landing page report, server logs, a monthly mentions panel, and the share that arrives as direct traffic. If you don’t know what GEO is yet, start with our guide to appearing in AI search.
What you can measure and what you can’t #
| Source | What you see | What slips through |
|---|---|---|
| GA4 | Sessions with a referrer from chatgpt.com, perplexity.ai, gemini.google.com… and what they do next | Visits without a referrer (apps, copy and paste) |
| Server logs | Which URLs the AI agents request, and when | What the assistant told the user |
| Mentions panel | Whether you appear when someone asks about your category, and next to whom | The questions you didn’t anticipate |
| Search Console | Impressions and clicks on Google, AI Overviews included | Which share comes from AI Overviews: there is no filter |
| Form | What the lead reports | Everyone who skips the field |
No single source is enough. Together they give you a number you can defend.
1. An AI channel in GA4 #
By default, GA4 puts visits from chatgpt.com in the Referral channel, mixed in with links from blogs, directories and partners. You need to pull them out into a channel of their own.
- Admin > Data display > Channel groups > Create new channel group. GA4 copies the default group; work on that copy.
- Add new channel , namedAI Assistants .
- Condition: Session source ·partially matches regex :
chatgpt|openai|perplexity|gemini\.google|copilot|claude\.ai|deepseek|mistral
- Reorder so thatAI Assistants sits aboveReferral . GA4 assigns each session to the first channel whose condition it meets; ifReferral comes first, it takes everything.
- Save.
Two details that save time. Custom channel groups also apply to historical data, so you see the trend from day one without waiting. And ChatGPT adds utm_source=chatgpt.com to the links it shows in its search answers, so those visits are attributed correctly even when the browser sends no referrer.
Review the source list every few months. New assistants appear and some change domain: OpenAI’s moved from chat.openai.com to chatgpt.com.
2. Which pages bring you that traffic #
With the channel in place, open Explore > Free form exploration:
- Dimensions: Custom channel group ,Landing page
- Metrics: Sessions ,Engaged sessions ,Key events
- Filter: channel = AI Assistants
The list of landing pages is, in practice, the list of URLs that assistants cite and that someone clicks. It usually looks little like your top organic pages: comparisons, pricing pages and guides with concrete data carry more weight.
Look at key events too. If AI traffic converts better than organic, which is common because it arrives with the recommendation already made, you want to know that before deciding which content to invest in. If your GA4 doesn’t record reliable conversions, fix that first: how to implement GA4 with events and conversions.
3. Server logs: what GA4 can’t see #
GA4 only counts visits that run JavaScript. AI agents don’t run it, so as far as GA4 is concerned they don’t exist. They do show up in your web server logs, with a piece of data no other source gives you: which URL each agent requested, and when.
Not every agent means the same thing:
| User-agent | Company | Purpose |
|---|---|---|
GPTBot |
OpenAI | Crawling for training |
OAI-SearchBot |
OpenAI | ChatGPT search index |
ChatGPT-User |
OpenAI | A person asked ChatGPT something and it opens your page |
ClaudeBot |
Anthropic | Crawling for training |
Claude-User |
Anthropic | Request made during a conversation |
PerplexityBot |
Perplexity | Search index |
Perplexity-User |
Perplexity | Request made during a conversation |
The -User rows are the ones that matter for measurement. If ChatGPT-User requests your pricing page, someone was asking ChatGPT about pricing in your sector at that moment. It’s the closest thing to a citation you can record.
With the standard nginx or Apache log format, this command pulls the URLs those agents request most:
grep -E "ChatGPT-User|Perplexity-User|Claude-User" access.log \
| awk '{print $7}' | sort | uniq -c | sort -rn | head -20
On Dokku, where we deploy soamee.com, each app writes its log to /var/log/nginx/<app>-access.log. On Vercel, Netlify or behind Cloudflare you have to enable log export, and on some plans it costs extra.
Two caveats. The user-agent can be spoofed: if a number is going to end up in a report, cross-check the IPs against the ranges OpenAI and Perplexity publish. And no visits doesn’t mean nobody cites you, because an assistant can answer from what it already has in its index without requesting the page again.
4. A monthly mentions panel #
Neither GA4 nor the logs tell you whether you appear when someone asks about your category and doesn’t click. For that, you have to ask.
Set up a spreadsheet with 20-30 questions your customer would ask before buying. Not the ones you’d like them to ask: the ones that come up in sales calls, in the contact form and in Search Console. Once a month, run them through ChatGPT, Perplexity, Gemini and Copilot in a session with no history and write down:
- Date, assistant and question
- Do you appear? Yes or no
- Position , if the answer is a list
- Competitors cited
- Linked sources : this column generates the most work, because it tells you where you need to be
Answers vary from one run to the next. Run each question two or three times and count the percentage of answers you appear in. That percentage, month over month, is the metric. There are paid tools that automate this; with fewer than 50 questions, the spreadsheet does the job.
5. Search Console: what it tells you and what it doesn’t #
Google counts AI Overviews impressions and clicks within normal web performance, with no filter to separate them. You can’t tell which share of an impression came from an AI Overview.
What Search Console does give you is two indirect signals:
- Queries shaped like long questions. Like the German one at the top. A regex filter (
^(how|what|which|why|how much)\bor queries longer than eight words) shows you which questions reach Google written as if they were meant for an assistant. - Branded searches. Someone who reads your name in a ChatGPT answer and then searches for it on Google shows up here as a branded search. If branded searches rise without campaigns to explain it, part of the rise usually comes from there.
6. Traffic that arrives as direct #
Some AI-influenced visits leave no trace at all: links opened from the assistants’ mobile apps, copied and pasted URLs, or someone who notes down the name and visits days later.
What works here is asking. Add a “How did you hear about us?” field to your contact form with an explicit option: ChatGPT or another AI assistant. A dropdown gives cleaner data than a free-text field, and the explicit option matters: if it isn’t there, people pick “Google” because it’s the closest match.
Checklist #
- AI Assistants channel in GA4, placed aboveReferral
- Landing page and key events exploration filtered by that channel
- Server logs accessible, with a monthly query for
ChatGPT-User,Perplexity-UserandClaude-User - Sheet of 20-30 questions, run every month across four assistants
- Tracking of branded searches and question-shaped queries in Search Console
- “ChatGPT or another AI assistant” option in the contact form
With these six pieces you can say how many people arrive from an assistant, on which pages, and which assistants cite you, and separate what is data from what is an estimate. It’s what we set up for clients as part of our AI search optimization (GEO) service.