DEV Community

Cover image for Your ChatGPT Traffic Is Hiding in 'Direct' — How to Track AI Search Referrals in Magento 2
Ievgenii Gryshkun
Ievgenii Gryshkun

Posted on • Originally published at angeo.dev

Your ChatGPT Traffic Is Hiding in 'Direct' — How to Track AI Search Referrals in Magento 2

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:

  1. Not retroactive. Everything before May 13, 2026 stays classified as Direct/Referral. No clean YoY comparisons for a while.
  2. 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.
  3. 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.

  1. GA4 Admin → Data display → Channel groups → Create new channel group
  2. Name it "AI Search", condition type Session source contains — one rule per domain, OR logic between rules
  3. Add the domains below
  4. 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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)