Originally published on angeo.dev. AI platform behavior changes frequently — referrer policies and crawler names may have evolved since publication (July 2026).
You updated your robots.txt. You generated llms.txt. You fixed your Product schema. Your AEO audit score went from 25% to 85%. And then you opened GA4 — and saw nothing unusual.
This is the most common frustration after implementing AEO (AI Engine Optimization) on a Magento 2 store. Not because the work didn't help, but because standard analytics tools were not built to track AI referral traffic. The signals exist — they're just hidden in the wrong buckets.
TL;DR
- Since May 13, 2026, GA4 has a native "AI Assistant" channel that auto-detects ChatGPT, Gemini, and Claude referrals — zero config, but only for sessions with an intact referrer
- ChatGPT still strips referrers on most link types — in-app browsers, mobile apps, and copy-paste all land in Direct
- A custom Channel Group still matters: it catches platforms outside GA4's documented list (Perplexity!) and preserves historical trends (the native channel is forward-only)
- The most reliable way to attribute ChatGPT clicks today is still UTM parameters in your llms.txt
- Search Console Crawl Stats show GPTBot / OAI-SearchBot activity — a leading indicator that precedes traffic by weeks
- If AI traffic converts several times better than organic (early anecdotal data suggests 2–5×), misclassifying it as Direct means you can't measure ROI on any of your AEO work
Why AI traffic disappears in your analytics
Each platform handles referral data differently, which is why no single tracking method covers all of them:
| Platform | Referrer passed? | What GA4 sees by default | Crawler UA |
|---|---|---|---|
| ChatGPT | ❌ No | Direct / (none) | GPTBot, OAI-SearchBot |
| Perplexity | ✅ Yes | Referral — unclassified | PerplexityBot |
| Google Gemini | ⚠️ Partial | Referral from gemini.google.com | Google-Extended |
| Claude | ✅ Yes | Referral from claude.ai | ClaudeBot |
| Microsoft Copilot | ⚠️ Partial | Referral from copilot.microsoft.com | Bingbot (shared) |
| ChatGPT Shopping | ❌ No | Direct / (none) | OAI-SearchBot |
On ChatGPT specifically: behavior depends on where the link appears. Inline links in conversational answers and links opened via the mobile app typically arrive with no Referer header. OpenAI has been appending UTM parameters to some links in ChatGPT Search's "More sources" since mid-2025, but it's not documented as guaranteed behavior. Published estimates of how many ChatGPT sessions arrive with a usable referrer range from ~10% to ~40% depending on the source — verify against your own server logs instead of trusting any single benchmark.
The practical upside: Perplexity, Gemini, and Claude together likely represent more trackable eCommerce referral traffic than ChatGPT right now — and all three are addressable today.
Method 0: GA4's native "AI Assistant" channel (0 minutes)
On May 13, 2026, Google added a native AI Assistant channel to GA4's Default Channel Group. When GA4 detects a referrer matching a recognized AI assistant, it automatically assigns:
-
Medium:
ai-assistant -
Campaign:
(ai-assistant) -
Default Channel Group:
AI Assistant— right next to Organic Search, Direct, etc. -
Source: stays the originating domain (
chatgpt.com,gemini.google.com) so you can still break down by platform
To verify it's live on your property: Reports → Acquisition → Traffic acquisition, set primary dimension to Session default channel group, look for an "AI Assistant" row. If it's missing, expand the date range to 90 days — the rollout was gradual, and zero qualifying sessions is also normal at this stage.
Three limitations to know:
- Not retroactive. Everything before May 13, 2026 stays classified as Direct/Referral. No clean YoY comparisons for a while.
- Still referrer-dependent. Mobile apps, in-app browsers, copy-paste → still Direct. The structural gap didn't go away; it's just easier to see what you're missing.
- Documented coverage is ChatGPT, Gemini, Claude. Some third-party sources claim broader coverage (Perplexity, Copilot, Grok...), but Google's own docs don't consistently confirm it. Treat Perplexity via the native channel as unconfirmed until you see it in your own data.
Method 1: Custom Channel Group (5 minutes)
Still worth it, even with the native channel — mainly for Perplexity coverage and a continuous historical trend line.
- GA4 Admin → Data display → Channel groups → Create new channel group
- Name it "AI Search", condition type Session source contains — one rule per domain, OR logic between rules
- Add the domains below
- Save, wait 24–48h (applies to new sessions only)
perplexity.ai # Perplexity
gemini.google.com # Google Gemini
bard.google.com # legacy
claude.ai # Anthropic Claude
copilot.microsoft.com # Microsoft Copilot
bing.com/chat # Bing Chat
you.com # You.com
phind.com # Phind
poe.com # Poe
kagi.com # Kagi
After saving, go to Traffic acquisition and switch the primary dimension to your new channel group. Most stores discover Perplexity traffic they didn't know existed — it was sitting in Referral all along.
Native channel vs custom group, side by side:
| Capability | Native AI Assistant | Custom Channel Group |
|---|---|---|
| Setup | None | ~5 min |
| Historical data | Forward-only from 2026-05-13 | As far back as configured |
| Coverage | ChatGPT, Gemini, Claude (documented) | Any domain you add |
| Referrer required | Yes | Yes |
| Maintenance | Google maintains list | You update quarterly |
Method 2: UTM parameters in llms.txt (30 minutes)
Since ChatGPT strips referrers on most link types, the most practical way to attribute at least part of ChatGPT traffic is UTM parameters on URLs exposed through AI discovery layers — llms.txt and experimental commerce feeds. UTMs reach GA4 regardless of the missing referrer.
# llms.txt — with UTM tracking
# Products
- [Wireless Headphones XM5](https://store.com/headphones-xm5?utm_source=chatgpt&utm_medium=ai_referral&utm_campaign=aeo)
- [Running Shoes ProGrip](https://store.com/shoes-progrip?utm_source=chatgpt&utm_medium=ai_referral&utm_campaign=aeo)
# Categories
- [Headphones](https://store.com/headphones?utm_source=chatgpt&utm_medium=ai_referral&utm_campaign=aeo)
If you're testing experimental OpenAI commerce feed integrations, tag those URLs too — with a distinct source so you can separate feed-driven clicks from organic ChatGPT referrals:
{
"id": "sku-001",
"name": "Wireless Headphones XM5",
"url": "https://store.com/headphones-xm5?utm_source=chatgpt_shopping&utm_medium=ai_feed&utm_campaign=aeo",
"price": {"amount": 249.00, "currency": "EUR"},
"availability": "InStock"
}
Known limitation: ChatGPT sometimes renders URLs as plain text rather than clickable links. Users copy-paste, and UTMs often get stripped on paste. UTM tracking captures confirmed intentional clicks — it will undercount total AI-influenced traffic. There's no reliable client-side fix; server logs (Method 4) fill the gap.
A note on llms.txt itself: adoption is still developing and platforms vary in how — or whether — they consume it. Treat it as a best-practice signal layer, not a guaranteed crawler instruction standard. Adding UTMs to it is low-effort and worth doing anyway.
Method 3: Search Console Crawl Stats (2 minutes)
GSC doesn't show AI referral traffic — it shows AI crawler activity, which is a leading indicator that precedes recommendation traffic by days or weeks.
Search Console → Settings → Crawl stats → See all crawl requests, then filter by user agent:
| User agent | Platform | Rising crawl frequency means... |
|---|---|---|
GPTBot |
ChatGPT | Your pages are far more likely to be considered for answers |
OAI-SearchBot |
ChatGPT Search | OpenAI indexing you for real-time results |
Google-Extended |
Gemini | Gemini / AI Overviews data collection |
PerplexityBot |
Perplexity | Content may appear in Perplexity answers |
ClaudeBot |
Claude | Claude retrieval + training |
After unblocking AI bots in robots.txt and publishing llms.txt, GPTBot crawl frequency should rise within 1–2 weeks. That's your first measurable confirmation the AEO changes are working — before any traffic hits GA4.
Method 4: Server logs (15 minutes, most accurate)
Server logs capture every HTTP request — including AI crawler visits and referrers where available. It's the only method that confirms GPTBot activity independently of GSC.
# Count AI bot requests
grep -E "(GPTBot|OAI-SearchBot|PerplexityBot|Google-Extended|ClaudeBot)" /var/log/nginx/access.log \
| awk '{print $1}' | sort | uniq -c | sort -rn | head -20
# Which pages is GPTBot crawling most?
grep "GPTBot" /var/log/nginx/access.log \
| awk '{print $7}' | sort | uniq -c | sort -rn | head -20
# Perplexity referral clicks (real users, not bot)
grep "perplexity.ai" /var/log/nginx/access.log \
| grep -v "PerplexityBot" | wc -l
High GPTBot frequency on your top product pages is a good signal — those pages are strong candidates for ChatGPT recommendations. On Hypernode hosting, logs live at /var/log/nginx/access.log with daily rotation; the commands work as-is.
Putting it together: the funnel view
| Stage | Where to measure | What it means |
|---|---|---|
| AI bots crawling | GSC → Crawl Stats | Indexed and eligible for AI recommendations |
| AI referral sessions (ChatGPT/Gemini/Claude) | GA4 native AI Assistant channel | Users clicking through — forward-only |
| AI referral sessions (Perplexity + others) | GA4 custom "AI Search" group | Coverage beyond Google's documented list |
| ChatGPT UTM sessions | GA4 → utm_source=chatgpt | Confirmed intentional clicks |
| Conversions | GA4 → AI channels → Purchase | Revenue attributable to AEO |
In GA4 Explore, build one exploration filtered on channel group = "AI Assistant" OR "AI Search" — a session can only belong to one channel group definition at a time, so there's no double-counting.
If you export to BigQuery (free on all GA4 properties), you can go further: correlate GPTBot crawl events from server logs with session spikes in the following 48 hours, or segment AI sessions by product category to see which parts of your catalog get recommended.
Benchmarks: how much AI traffic is "normal"?
Directional ranges from community reports and early adopter data — not guarantees:
| Store profile | AI share of sessions | Primary source |
|---|---|---|
| No AEO work | 0.1–0.5% | Perplexity (mostly untracked) |
| Basic AEO (robots.txt + llms.txt) | 0.5–2% | Perplexity, Gemini |
| Strong AEO (schema, descriptions, UTMs) | 2–6% | Perplexity, ChatGPT (UTM) |
| Niche authority store | 5–12% | Multiple platforms |
| B2B / specialist | 3–10% | Perplexity, Claude |
One anonymised example: a Magento apparel store went from ~0.3% to ~2.1% AI share over ~90 days after four changes — allowing GPTBot, adding llms.txt, rewriting supplier-copy descriptions, fixing Product schema. Perplexity drove most measurable referrals early; ChatGPT attribution stayed partial and UTM-dependent.
The honest part: attribution stays probabilistic
Setting up all four methods gives you a significantly better picture — not a perfect one. The gap is structural:
| Gap | Why | Workaround |
|---|---|---|
| Dark ChatGPT traffic | No referrer; paste strips UTMs | UTMs catch intentional clicks; logs catch crawls |
| Safari / privacy browsers | Referer removed cross-site | UTMs bypass referrer policy |
| In-app browsers | ChatGPT iOS app may pass nothing | None reliable — lands in Direct |
| Cross-device journeys | See on mobile, buy on desktop | GA4 User ID if logged in |
| URL canonicalisation by AI | ChatGPT may surface a clean URL | Short UTM values; watch server logs |
Practical framing: treat AI traffic measurement as a directional signal. If your AI channel shows 80 sessions this month and 140 next month, the trend is real — even if absolute numbers understate AI-influenced traffic by 40–60%.
Debugging: "I see zero AI traffic"
First, the common AEO gaps: robots.txt blocking GPTBot/OAI-SearchBot, llms.txt returning 404, Product schema missing offers.availability (ChatGPT Shopping skips those products), supplier-copy descriptions AI can't confidently recommend. If those are fixed and your channel group is set up — give it 4–8 weeks; the crawl-to-traffic lag is real.
If bots are crawling but sessions still land in Direct, check: Safari/Firefox ETP/privacy-extension referrer stripping, Cloudflare Transform Rules dropping the Referer, 301/302 redirect chains (referrer dies on hops), GA4 Consent Mode blocking pre-consent data, wrong match type in the channel group condition, Magento URL rewrites stripping UTMs.
Quick diagnostic: visit a product URL with ?utm_source=test_ai&utm_medium=debug from incognito, check GA4 Realtime → Traffic sources. UTM shows up → GA4 is fine, the problem is upstream. Doesn't show → the problem is your data stream or Magento URL handling.
I maintain a set of MIT-licensed open-source Magento 2 modules for AEO (llms.txt generation, robots.txt AI-bot management, structured data, MCP/UCP endpoints) — all on Packagist under angeo/ and GitHub. Questions about the setup above — happy to answer in the comments.
Top comments (0)