utm.new
guide ·

Why your AI traffic shows up as Direct / None — and how to fix it

Some ChatGPT and Perplexity clicks land in your analytics as Direct or None. Here's why the referrer disappears, why no UTM can recover it, and what actually helps.

You launched something, an AI assistant started recommending your page, and your traffic ticked up. But in GA4 some of those visitors are piling into (direct) / (none) — the same bucket as someone who typed your URL from memory.

Before you go looking for a tagging fix: most of your AI traffic probably isn’t in there. GA4 and AnyTrack both classify AI-assistant referrals automatically, and the majority of assistant clicks arrive with a referrer that gets read correctly. What lands in Direct is the residue — the clicks where the referrer never arrived at all.

That residue is real, and it’s worth understanding precisely, because the popular fix for it doesn’t work and the honest one is unglamorous.

What “Direct / None” really means

(direct) / (none) is GA4’s shrug. It’s where a session lands when there’s no evidence of where the visit came from — no referrer header, no UTM parameters, no recognized click ID. It does not mean the person typed your address. It means the signal never arrived.

In practice it’s a junk drawer for:

  • Links opened from apps that strip the referrer (messaging apps, some email clients).
  • HTTPS-to-HTTP downgrades (rare now, historically a big one).
  • Links pasted into a browser bar.
  • And some — not all — clicks that originate inside an AI assistant.

Why some AI clicks lose their referrer

When a browser navigates between pages it normally sends a Referer header telling the destination where the click came from. Analytics reads that header to attribute the visit. AI assistants are inconsistent about it.

Three things happen depending on the surface:

  • Most pass a real hostname. You’ll see chatgpt.com, perplexity.ai, gemini.google.com, copilot.microsoft.com, and claude.ai in your reports. GA4 recognizes several of these and files them under AI Assistants on its own; the rest arrive as ordinary referrals under their hostname. Either way, they’re attributed without you doing anything.
  • Some pass nothing. Depending on the client, the app wrapper, and how the link was opened, the header can be absent. That click lands in (direct) / (none).
  • Some pass something opaque that doesn’t map to a marketing channel, and GA4 files it generically.

And one category has no referrer by definition: Google’s AI Overviews and AI Mode render inside a Google search results page. A click from an Overview is ordinary google.com organic traffic. Google excludes them from the AI Assistants channel explicitly, because structurally that’s what they are.

Why no UTM recovers this

Here’s where most advice on this topic goes wrong. The common prescription is to “tag the links you control with utm_source=chatgpt&utm_medium=ai-assistant” so the parameters survive when the referrer doesn’t.

Trace it through and it falls apart.

The link an assistant cites is your canonical URL — the address it read off your own page. You never handed it a tagged link, and there’s no field in ChatGPT where you supply one. So to get a UTM onto that citation, you’d have to publish your canonical URL with ?utm_source=chatgpt permanently attached. Then:

  • Every visitor to that page reports as AI traffic — organic search, email, referrals, bookmarks. You’ve inflated the AI channel with your entire audience.
  • You overwrite correct classifications. UTMs on the URL beat referrer detection in GA4. The sessions that did arrive with a good referrer, and were already filed correctly, now carry your manual label instead.
  • You still don’t catch the referrer-less click, unless that specific visitor happened to follow the specific tagged URL — which, for a model-written citation, they didn’t.

You cannot tag a link you didn’t author. That’s not a configuration gap; it’s the shape of the problem. A UTM lives in a URL, and the URL in question is written inside someone else’s product.

What actually helps

1. Read the classification you already have. Check the AI Assistants channel in GA4 and the referral rows for perplexity.ai and claude.ai. In AnyTrack, the Campaign Report assigns a channel to every session from the referrer and URL parameters, so AI assistants appear as their own channel with the conversions attached. Most of your AI traffic is visible right now, correctly labeled, with no work done.

2. Capture the visit server-side. When a request hits your server, the server sees the full URL and headers before any client-side script runs and before a single-page app can rewrite anything. That doesn’t conjure a referrer that was never sent — but it stops you losing the sessions that did carry one to ad blockers, consent gates, and fast bounces. AnyTrack (anytrack.io) captures inbound attribution server-side and persists it through the session, so a correctly-classified AI click survives even when the client-side picture is murky.

3. Treat the number as a floor, and say so. Some share of AI-driven visits will never be attributable, because the click arrived with no signal. Report the AI channel as a known undercount. That’s a defensible position. A number inflated by tagging your own canonical URLs is not.

4. Tag AI ads — when you’re buying them. The one case where UTMs genuinely apply is paid placement. When an assistant sells advertising, you author the destination URL and the platform publishes its own tracking template and click-ID parameter. Tag those the way you tag any ad platform, following that platform’s own advertiser documentation at the time you set it up. That’s a different channel from organic citations and should stay separate in your reports.

The takeaway

AI assistants are a real and growing referral source, and your analytics is already classifying them from the referrer. The part that lands in (direct) / (none) is the slice where the browser sent nothing — and no parameter you add to your own pages reaches into a citation the model wrote.

You can’t make an assistant send better headers. What you can do is read the classification you already have, capture visits at a point in the stack that doesn’t depend on a cooperative browser, and be honest that the total is a floor. See the GA4 AI Assistants channel for exactly how that classification is made.

More in this series