webtracking.org
concepts

AI referral traffic: classifying clicks from ChatGPT, Perplexity, and friends

Humans arriving from AI assistants are real, growing, and mis-bucketed into Referral, Organic, or Direct by default. The referrer signatures to match, a ready-to-paste GA4 custom channel group, the Adobe/CJA equivalent, and the dark-traffic caveat.

last verified 2026-07-11

When someone asks ChatGPT or Perplexity a question, gets an answer that cites your site, and clicks through — that is AI referral traffic: a human, in a browser, running your JavaScript like any other visitor. It is the measurable half of AI-driven discovery (the bots themselves are the other half, and they never reach your analytics). The problem is that no major analytics tool ships a default “AI” channel as of mid-2026, so these sessions scatter into Referral, Organic Search, and — worst — Direct, and the trend line your leadership keeps asking about does not exist until you build it. Building it is one custom channel definition, and this guide includes it ready to paste.

The source signatures

Clicks from the major assistants arrive with these referrer hosts (or the source values derived from them):

  • chatgpt.com and the older chat.openai.com — ChatGPT also appends utm_source=chatgpt.com on some clickthroughs, which conveniently survives even when the referrer does not
  • perplexity.ai
  • gemini.google.com and the legacy bard.google.com
  • copilot.microsoft.com, plus Copilot surfaces under bing.com/chat
  • claude.ai
  • you.com, poe.com

Two structural warts to know before writing rules. First, session source in most tools is a hostname, not a full URL — so Copilot clicks that arrive via bing.com/chat collapse into plain bing.com and cannot be split from Bing search by source alone. Second, this list changes; new assistants and new domains appear, so treat the rule set as versioned configuration, reviewed quarterly, not a one-time setup.

Why the defaults get it wrong

  • GA4 classifies these sources as Referral (or, where a source has been categorized as a search engine, Organic Search) — and a large share lands in Direct, because in-app browsers, apps, and some assistant surfaces strip the referrer entirely.
  • Adobe Analytics and CJA behave the same way: without a custom Marketing Channel processing rule or a derived field, assistant referrers fall into the generic referral bucket.
  • Either way, the damage is the same: AI-assisted acquisition is invisible as a category, and the portion that became Direct is silently misattributed.

The fix follows the same first-match-wins waterfall logic as the channel classification standard: add an “AI Assistants” rule, place it above Organic Search and Referral so it wins the match, and mirror the identical rule in every system that classifies traffic — analytics UI and warehouse both.

GA4: the custom channel group

GA4’s default channel group is read-only, so create a custom channel group (Admin → Data display → Channel groups), add a channel named AI Assistants as the first rule above Organic Search, with the condition Source matches regex:

^(chatgpt\.com|chat\.openai\.com|perplexity\.ai|gemini\.google\.com|bard\.google\.com|copilot\.microsoft\.com|claude\.ai|you\.com|poe\.com)$

GA4 regex conditions are full-match, hence the anchors and the explicit alternation — resist the temptation of a loose .*ai.* pattern, which will happily swallow mail.ru and half the internet. The utm_source=chatgpt.com case is covered automatically, since a UTM source of chatgpt.com matches the same expression. Custom channel groups in GA4 apply retroactively in reporting, so you get history back to the start of your data, not just from today — one of the few genuinely forgiving corners of GA4. If you also run paid placements inside AI surfaces, split AI Assistants — Paid out first by medium, following the paid-before-organic ordering the standard prescribes.

Adobe Analytics / CJA: the rule equivalent

In Adobe Analytics, add a Marketing Channel processing rule near the top of the stack (they are first-match-wins, like everything else here): if Referring Domain matches one of chatgpt.com, chat.openai.com, perplexity.ai, gemini.google.com, bard.google.com, copilot.microsoft.com, claude.ai, you.com, poe.com — the same list as the GA4 rule, always; divergent lists are how cross-tool reconciliation dies — → set channel to AI Assistants, and set channel value to the referring domain. Order it above the generic Referrals rule and below your paid rules. Processing rules are not retroactive — history before the rule stays as it was, so note the deployment date on the dashboard.

In CJA, a derived field on the referrer gives you the same channel at query time — and is retroactive, since derived fields evaluate over stored data:

CASE
  WHEN Referring Domain matches regex
    ^(chatgpt\.com|chat\.openai\.com|perplexity\.ai|gemini\.google\.com|bard\.google\.com|copilot\.microsoft\.com|claude\.ai|you\.com|poe\.com)$
  THEN "AI Assistants"
  ELSE <existing channel logic>
END

Keep the evidence: capture the referrer yourself

Referrer-based attribution is session-scoped and fragile — one redirect or one consent-delayed tag and the source is gone. A cheap insurance policy is to capture the referrer host into your own first-party parameter on the first hit, per the dataLayer spec convention:

// As early as possible on a landing page, before tags fire
(function () {
  var host = '';
  try { host = document.referrer ? new URL(document.referrer).hostname : ''; } catch (e) {}
  window.dataLayer = window.dataLayer || [];
  window.dataLayer.push({ landing_referrer_host: host });
})();

Send it as an event-scoped parameter and you keep AI-source evidence in your warehouse even after the session is rewritten to Direct downstream — and you can audit how often the channel rule and the raw referrer disagree.

The dark-traffic caveat

Now the honest part: a substantial share of AI-assisted discovery produces no referrer at all. The assistant summarizes you and the user never clicks; or they read the answer on mobile and visit your site later by typing the URL; or the click happens in a surface that sends nothing. That traffic lands in Direct and no channel rule can reclaim it. Anyone promising to measure “all AI traffic” from referrers is overclaiming.

What you can do is triangulate. Watch for branded-search and direct-traffic lift that correlates with your citation visibility in AI answers; add “an AI assistant (ChatGPT, Perplexity, …)” as an option in your post-conversion “how did you hear about us?” survey and track its share over time; and treat the AI Assistants channel as a floor, not a total. Report it that way explicitly — “verified click-throughs from AI assistants, excluding non-referred exposure” — and your number stays defensible while everyone else’s inflates.

Total setup time is under an hour in each tool. Given that this is among the fastest-shifting acquisition categories of the mid-2020s, it is the cheapest new trend line you will add this year.