rytisbalys.com / troubleshooting

Your ChatGPT Traffic Is Hiding in Direct: How to Track AI Conversions in GA4

Someone asks ChatGPT for the best product in your category, gets a shortlist with your brand on it, opens your site and buys. In GA4 that sale shows up as Direct. No source, no credit. The same thing happens with Perplexity, Gemini, Copilot and Claude.

I build conversion tracking for ecommerce brands for a living, mostly GA4, Meta Pixel with CAPI, and server-side setups on sGTM. Over the last year the question I get most often has changed from "why doesn't my ROAS match" to "how much of our revenue is actually coming from AI." The honest answer is that with a stock GA4 setup you can't tell, and this page explains why, what's genuinely fixable, and what can only be measured in aggregate.

Why AI conversions get filed under Direct

The core problem is the referrer. A big share of clicks from AI assistants arrives at your site with no referrer at all, because the click happens inside a mobile app, an in-app browser, or a context that strips the header, or because the user copies the link and pastes it into a new tab. Vendor measurements of that no-referrer share range from roughly 36% to 70% depending on the assistant and the platform. When GA4 sees a session with no referrer and no UTMs, it has nothing to classify, so the session becomes Direct.

Even the clicks that do keep a referrer haven't been safe. For most of GA4's life, traffic from chatgpt.com or perplexity.ai landed in Referral or Unassigned, where nobody thinks to look for it.

Then Safari makes it worse. ITP caps client-set cookies at seven days, so a shopper who found you through an AI answer and comes back to buy ten days later shows up as a brand new Direct visitor. The AI touchpoint existed, your analytics just couldn't hold onto it long enough.

GA4's native AI channel doesn't close the gap

Google shipped a native AI channel in GA4 around May 2026, and it's a real improvement, but you should know its limits before assuming the problem is solved. It's forward-only, so it won't reclassify any of your history. It misses several engines outright, including Perplexity, Claude and Meta AI. And clicks from Google's own AI Overviews stay inside Organic Search, which means a fast-growing AI surface is invisible inside your biggest channel.

A custom channel group, by contrast, applies retroactively to data you've already collected. That alone is worth setting up even before touching anything server-side, because it lets you see months of AI-referred sessions you didn't know you had.

What you can prove and what you can't

I split AI attribution into two layers, because they behave completely differently and mixing them up is how vendors end up overpromising.

Layer 1 is deterministic: the user clicked something and landed on your site. Some of those clicks carry a usable signal and some don't, but the ones that do can be captured and tied to revenue with normal tracking rigor.

Layer 2 is dark: the user saw your brand in an AI answer, never clicked anything, and bought later through search or by typing your URL. No tracking stack on earth can attribute that purchase to the AI answer at the individual level. It can only be measured in aggregate, and anyone telling you otherwise is selling you a dashboard.

Being clear about this line is the whole game. Layer 1 gets engineered. Layer 2 gets estimated honestly.

Layer 1: catching the clicks server-side

The fix for Layer 1 lives on the server, not in the browser. At a high level: a server-side tagging container (sGTM, typically on Stape) inspects incoming traffic for the referrer hostnames and UTM patterns that identify AI assistants, writes that classification into durable first-party data, and forwards it downstream. GA4 gets a clean custom AI Assistant channel. Meta gets the same signal through the Conversions API, deduplicated against the browser pixel via event IDs, so your ads reporting sees AI-influenced purchases too.

Two caveats I'd rather you hear from me than discover later. First, cookie lifetime on Safari is not solved by moving the cookie to the server. HttpOnly doesn't bypass ITP, and CNAME-based setups get capped at about seven days. Long-lived first-party persistence needs a true same-origin path, meaning a reverse proxy or a tag gateway on your own domain. Second, if you sell in the EU, all of this runs behind Consent Mode v2. A cookie set by your server is still a cookie under ePrivacy, and consent-gating it properly is part of the build.

One more honest limitation: when an AI model cites you organically, you don't control the URL it emits, so you can't inject UTMs into it. Classification there rests on referrer plus first-party stitching, which is strong but probabilistic at the edges.

What does this recover? Roughly half of the AI clicks that were previously invisible, going by how the no-referrer shares break down. The exact share depends on your traffic mix and device split, which is why I won't quote a fixed percentage, and you should be suspicious of anyone who does.

Layer 2: measuring the buyers who never click

For the no-click layer I use two instruments. A post-purchase survey with the question "Where did you FIRST hear about us?" including an explicit AI assistant option, placed where response rates are decent (order confirmation works well). And branded-search lift tracked against your AI visibility over time, since people who see you in an answer tend to google your name days later.

Neither gives you a per-order attribution line, and I present the output as directional. But run consistently, the survey alone usually surprises brands. The AI option gets picked far more often than their analytics would ever suggest, which is exactly the gap this whole approach exists to expose.

Where this sits next to GEO tools

If you're working on AI visibility, you may already use Profound, Peec or Otterly. Those tools answer one question: do you appear in AI answers, and how often. Useful, and I'm not competing with them. What almost nobody does is the layer underneath, attributing actual conversions server-side. They rank you in the answer. I prove it converts. For GEO and SEO agencies that's the difference between showing a client a visibility chart and showing them revenue.

Who this is for

Ecommerce brands doing meaningful volume who suspect AI is already sending them buyers, and GEO or SEO agencies that need to prove their work drives sales. If your GA4 Direct channel has been quietly growing and nobody can explain why, that's usually the tell.

FAQ

Why does ChatGPT traffic show up as Direct in GA4?

A large share of clicks from AI assistants arrive with no referrer, because the click happens in a mobile app or in-app browser, or the user copies the link into a new tab. With no referrer and no UTMs, GA4 has nothing to classify, so the session lands in Direct.

Does GA4's new AI Assistant channel solve this?

Only partly. It is forward-only, so it reclassifies nothing in your history, and it misses several engines including Perplexity, Claude and Meta AI. A custom channel group applies retroactively to data you have already collected and can cover the engines the native channel skips.

Can you track people who read an AI answer but never click?

Not at the individual level, and nobody can. That layer is measured in aggregate: a post-purchase survey asking where the customer first heard about you, plus branded-search lift tracked against your AI visibility. The output is directional, not a per-order attribution line.

How much invisible AI traffic can server-side tracking recover?

Roughly half of the AI clicks that are currently invisible, based on how no-referrer shares break down. The exact share depends on your traffic mix and device split, so be suspicious of anyone quoting a fixed percentage.

I build this layer in production, on my own store and for clients. If your Direct channel keeps growing and you suspect AI is part of it, send your numbers below and I will tell you what your GA4 is most likely hiding, no charge. If your setup already separates AI traffic cleanly, I will say so.

Which numbers disagree

Rough is fine, and blank is fine too.

or email work@rytisbalys.com · every rated job 5.0 · verify on Upwork