Why AI traffic lands in your Direct bucket, and how to fix it in GA4
Because GA4's default channel grouping has no rule for AI assistant hostnames. Sessions that do send a referrer fall into Referral, and sessions that arrive without one fall into Direct. A custom channel group separates them, and unlike the native channel it applies to your historical data too.
What is actually happening
GA4 assigns every session a channel by running it through an ordered list of rules. The default list predates AI assistants and has no rule that recognises them, so AI sessions land in whichever generic bucket catches them first.
They split two ways. Sessions arriving from a browser tab on chatgpt.com or perplexity.ai carry a referrer, so GA4 records a source and files them under Referral, mixed in with every other site that links to you. Sessions arriving from a desktop or mobile app often carry no referrer at all, because the app opens the link outside a browsing context. With no source to read, GA4 files them under Direct.
The result is that a channel which may be converting well in B2B is invisible as a channel. It exists only as an unexplained rise in Direct and a scattering of unfamiliar hostnames in Referral.
This is a reporting problem, not a tracking problem
The sessions were always recorded. Nothing was lost and nothing needs re-tagging. GA4 simply had no label for them. That is why the fix is retroactive and why it takes ten minutes rather than a sprint.
The native AI Assistant channel, and its two limits
GA4 added a native AI Assistant channel in May 2026. It needs no setup and Google maintains the source list, which are both real advantages. It has two limits worth knowing before you rely on it.
- The source list is incomplete. New assistants and new hostnames appear faster than the default grouping is updated, and you cannot edit it.
- It is not retroactive. It classifies sessions from its launch onward. It cannot tell you what your AI traffic was doing before that, which is exactly the comparison you need to show a trend.
A custom channel group has neither limit. Use the native channel as a cross-check and the custom one as your reporting line.
Build the custom channel group
- Admin → Data display → Channel groups. Create a new custom channel group. Give it a name you will recognise in a report dimension picker.
- Add a channel called AI Assistants. Set the condition to Session source, operator matches regex. If your property offers matches regex ignore case, use that instead.
- Paste the pattern from the next section into the value field.
- Drag AI Assistants above Referral. This step is the one people miss. GA4 evaluates channels top to bottom and stops at the first match. Referral will happily claim
chatgpt.com, so a channel sitting below it never fires. - Save, then verify. Open Reports → Acquisition → Traffic acquisition, change the first dimension to your new channel group, and set the date range to the last 90 days. Sessions should already be appearing under AI Assistants, including from before you built it.
The pattern
Session source holds the hostname, so match hostnames. Escape the dots, because an unescaped . matches any character.
chatgpt\.com|chat\.openai\.com|openai\.com|perplexity\.ai|claude\.ai|gemini\.google\.com|copilot\.microsoft\.com|edgeservices\.bing\.com|you\.com|poe\.com
Two notes on maintaining it. Keep the older hostnames such as chat.openai.com in the pattern even though current traffic uses chatgpt.com, because the channel group is retroactive and your historical sessions still carry the old hostname. And treat the pattern as a living list: when an assistant changes its domain, traffic silently falls back into Referral until you add the new one, which is the usual reason a previously working setup appears to break.
The blind spot you cannot fix
Clicks from Google's AI Overviews cannot be separated in GA4. They arrive with the same google / organic source and medium as an ordinary search click and carry nothing that distinguishes them. No regex, channel group or filter will isolate them, because the data needed to do so never reaches your property.
Be direct about this when reporting. Any tool that claims to show you AI Overviews sessions in GA4 is inferring from correlations, not measuring. The honest position is that your custom channel measures assistant referrals, that AI Overviews influence sits inside organic, and that the two cannot be summed into a single trustworthy number.
What to do with the channel once it exists
| Report | Why |
|---|---|
| Sessions by AI Assistants, month over month | The volume trend. Expect small absolute numbers early; direction matters more than size. |
| Landing page, filtered to the AI channel | Shows which pages assistants actually send people to, which is rarely the page you would guess. |
| Conversion rate, AI channel against organic and direct | The comparison that justifies the work. Measure it rather than asserting it. |
| Session source within the AI channel | Tells you which assistant is sending traffic, so you know which one you are winning. |
Questions
Does a custom channel group in GA4 apply to historical data?
Yes. GA4 applies channel groupings at query time rather than at collection time, so a custom channel group is applied retroactively and covers sessions recorded before you created it. This is the main practical advantage over the native AI Assistant channel, which is not retroactive.
Why does AI traffic show up as Direct instead of Referral?
Because the referrer is missing by the time the session is recorded. Links opened from a desktop or mobile app rather than a browser tab often arrive with no referrer at all, and some link handling strips it. A session with no source is classified as Direct. The remainder, which do send a hostname, fall into Referral because GA4's default channel grouping has no rule for AI assistant hostnames.
Can I separate traffic from Google AI Overviews in GA4?
No. Clicks from AI Overviews arrive with the same google / organic source and medium as any other Google search click, and carry nothing that distinguishes them. No channel group, regex or filter can isolate them inside GA4. Any tool claiming to report AI Overviews sessions separately in GA4 is inferring, not measuring.
Should I use the native GA4 AI Assistant channel instead?
Use both, but rely on the custom one. The native channel is maintained by Google and needs no setup, but its source list is incomplete and it does not apply retroactively, so it cannot show you what AI traffic did before it launched. A custom channel group is editable the day a new assistant appears and covers your full history.
Related
AI crawler reference: every bot that matters, and what each one actually does. If the channel stays empty after you build it, the cause is usually upstream: an AI crawler that cannot reach the site in the first place.
Get this set up as part of an audit
The AI Visibility Audit includes a GA4 setup guide so AI traffic stops landing in your “Direct” bucket, alongside a crawler access report and a fix list ordered by impact. $750, five to seven business days.