The problem: you did the AEO work — robots.txt allows GPTBot, llms.txt is live, Product schema is complete — and GA4 shows... nothing. That's not because the work failed. It's because AI referral traffic hides in the wrong buckets: ChatGPT clicks land in Direct, Perplexity clicks land in generic Referral.
Here are four methods, from zero-effort to most-accurate.
1. GA4's native "AI Assistant" channel (new — May 2026)
GA4 now auto-classifies ChatGPT, Gemini, and Claude referrals into a native AI Assistant channel (medium ai-assistant). No setup. Check it: Reports → Acquisition → Traffic acquisition → primary dimension "Session default channel group".
Caveats:
- Forward-only — nothing before 2026-05-13 is reclassified
- Referrer-dependent — mobile apps, in-app browsers, copy-paste still show as Direct
- Documented coverage is ChatGPT/Gemini/Claude only. Perplexity is not confirmed — verify in your own data
2. Custom Channel Group (5 min — covers Perplexity)
GA4 Admin → Data display → Channel groups → new group "AI Search". One condition per domain, Session source contains, OR between rules:
perplexity.ai
gemini.google.com
claude.ai
copilot.microsoft.com
you.com
phind.com
poe.com
kagi.com
Applies to new sessions after 24–48h. Most stores immediately discover Perplexity traffic that was sitting in Referral all along. Keep this running in parallel with the native channel — it preserves your historical trend line (the native channel doesn't).
3. UTM parameters in llms.txt (the only real ChatGPT fix)
ChatGPT strips referrers on most link types, so the only reliable attribution is UTMs on URLs you expose to AI systems:
# llms.txt
- [Wireless Headphones XM5](https://store.com/headphones-xm5?utm_source=chatgpt&utm_medium=ai_referral&utm_campaign=aeo)
Limitation: when ChatGPT renders the URL as plain text, users copy-paste and UTMs get lost. UTMs capture confirmed clicks, not total AI-influenced traffic.
4. Server logs (most complete picture)
# AI bot activity in the last rotation
grep -E "(GPTBot|OAI-SearchBot|PerplexityBot|Google-Extended|ClaudeBot)" /var/log/nginx/access.log \
| awk '{print $1}' | sort | uniq -c | sort -rn | head
# Which pages GPTBot crawls most (recommendation candidates)
grep "GPTBot" /var/log/nginx/access.log \
| awk '{print $7}' | sort | uniq -c | sort -rn | head
# Real Perplexity users vs the bot
grep "perplexity.ai" /var/log/nginx/access.log | grep -v "PerplexityBot" | wc -l
Bonus leading indicator: Search Console → Settings → Crawl stats → filter by GPTBot / OAI-SearchBot. Crawl frequency rises 1–2 weeks after you unblock the bots — traffic follows weeks later.
What to expect
Directional benchmarks (community/early-adopter data, not guarantees): stores with no AEO see ~0.1–0.5% AI share of sessions; basic AEO (robots.txt + llms.txt) 0.5–2%; strong AEO (schema, rich descriptions, UTMs) 2–6%; niche authority stores 5–12%.
And be honest with stakeholders: attribution stays probabilistic. Safari strips referrers, in-app browsers pass nothing, cross-device journeys are invisible. Track the trend, not the absolute number — if AI sessions go 80 → 140 month-over-month, that trend is real even if it undercounts by half.
Full version with debugging flowcharts and a GA4 Explore dashboard walkthrough: angeo.dev. Open-source Magento 2 AEO modules (llms.txt, robots.txt, schema): Packagist `angeo/`.*