AI visibility guide
Build an AI Referral Channel in GA4 Without Hiding Unknown Traffic
Use GA4's AI Assistant channel, add a custom channel for tagged assistant links it misses, test both, and reconcile totals so direct and unassigned visits stay visible.
On this page
GA4’s default channel group already includes an AI Assistant channel for visits whose referrer matches Google’s list of assistants. Start there. If your data shows assistant visits landing elsewhere, such as links tagged with UTM parameters, build a custom channel group that adds them, test it with real sessions, and reconcile its totals against the default group. Keep Direct and Unassigned as their own rows: some assistant visits can arrive with neither a referrer nor a UTM tag, and no channel rule can identify them.
Know what GA4 already classifies
Google’s documentation of the GA4 default channel group, checked September 27, 2026, defines the AI Assistant channel as “the channel by which users arrive at your site from sources like ChatGPT, Gemini, Deepseek, Copilot, or Grok. It excludes Google’s AI Overviews and AI Mode.” Its rule: “The medium exactly matches ‘ai-assistant’. The medium is set to ‘ai-assistant’ and the campaign is set to ‘(ai-assistant)’ if the referrer matches a list of AI Assistants.”
Three consequences follow:
- Automatic classification depends on the referrer. A visit that arrives without a referrer cannot match the list.
- Google’s AI features are not in it. Visits from AI Overviews and AI Mode are Google search traffic: the same default channel group page places them in Organic Search. Google’s AI features documentation, checked September 27, 2026, says these appear in Search Console’s Performance report under the “Web” search type. The preview controls guide covers those features.
- UTM parameters change the rules. Google’s help on traffic-source dimensions and manual tagging, checked September 27, 2026, says that “if any UTM parameter is present on the URL, Google Analytics will derive all cross-channel traffic source dimension values from UTM parameters, exclusively,” and that missing UTM parameters “will result in (not set) values.” A link carrying only
utm_sourcecan therefore arrive with a source and a medium of(not set).
Before building anything, open the Traffic acquisition report, set the dimension to Session default channel group, and note what the AI Assistant row shows for the last 90 days. Then switch the dimension to Session source / medium and look for sources that look like assistants but sit in other channels.
Define matching domains and exclusions
Build the list from your own data, not from a list you found elsewhere. In the source / medium view, search for assistant-related names and record each one with its medium and current channel.
An illustrative worksheet (the rows and numbers are invented to show the layout):
| Session source / medium | Sessions | Default channel | Include in custom AI channel? |
|---|---|---|---|
| chatgpt.com / ai-assistant | 120 | AI Assistant | Yes, already classified |
| chatgpt.com / (not set) | 45 | Unassigned | Yes: a UTM-tagged link |
| perplexity.ai / referral | 30 | Referral | Check whether it belongs; decide once |
| (direct) / (none) | 900 | Direct | No |
| google / organic | 3,000 | Organic Search | No; includes AI Overviews |
Decide exclusions deliberately:
- Direct and (not set) without a source. Never reassign these to an AI channel. You cannot tell which of them came from an assistant.
- Google organic. Leave it in Organic Search.
- Your own campaigns. If your team tags links as
utm_source=chatgptfor a promotion you ran yourself, exclude that campaign, or it will look like assistant referral traffic.
Build the custom channel group
Google’s help on custom channel groups, checked September 27, 2026, describes the process: go to Admin → Data display → Channel groups, with Editor access or above, and choose Create new channel group or copy an existing one. It says standard properties can have two custom groups besides the default, with up to 50 channels each; that “traffic is included in the first channel whose definition it matches given the current order of channels in the group”; and that custom channel groups “can be applied to your reports retroactively.”
- Start from a copy of the default channel group. Google says Create new channel group starts with that copy, so every other channel keeps its standard definition.
- Add a channel named, for example, “AI assistants (all detected).”
- Set the conditions so either signal qualifies: Medium exactly matches
ai-assistant, OR Source matches regex against the assistant domains from your worksheet. Google’s Admin API reference for channel groups, checked September 27, 2026, describes a channel rule as lists of conditions OR’ed together, with those lists AND’ed together, so both conditions belong in the same OR list. If you run your own campaigns with an assistant’s name as the source, add a Campaign name condition that excludes them, joined to that list by AND. An illustrative pattern:
.*(chatgpt\.com|perplexity\.ai|claude\.ai|copilot\.microsoft\.com|gemini\.google\.com).*
Replace the domains with the ones your data actually shows. The leading and trailing .* keep the pattern working whether the comparison is a full or partial match.
- Reorder so the new channel sits above every channel that could also match those sessions, including Referral and the AI Assistant channel copied from the default group (or remove that copied channel). Otherwise, those channels capture matching sessions first.
- Leave Direct untouched, and add no rule that sweeps unmatched traffic into the AI channel. Unassigned is the value Analytics uses when no channel rule matches.
- Save, then select the new group in the Traffic acquisition report’s dimension picker.
The default group’s own AI Assistant channel stays as it is. Your custom group is a second view, not a replacement.
Test referral and campaign cases
Check each case with real sessions before trusting the report, in a browser where you have not blocked analytics. Close every private window between tests so each test starts a new session: Google’s sessions help, checked September 27, 2026, says a session starts when a page is viewed and no session is currently active. DebugView, with debug mode enabled, shows the events Analytics collects as they arrive (DebugView help, checked September 27, 2026). If your property has an active developer traffic filter, Google says data collected while debug mode is enabled is filtered out of your reports (developer traffic filter help, checked September 27, 2026), so run the channel tests without debug mode. The Realtime report is not a reliable check here: Google’s Realtime report help, checked September 27, 2026, says it shows active users by first user source, medium, source platform, or campaign, and that a new user does not appear in that card until processing. Check each result in the Traffic acquisition report once the data has processed.
| Test | How | Expected in the custom group |
|---|---|---|
| Assistant referral | Ask an assistant a question that returns a link to your site, and click it | AI assistants channel, if a referrer or UTM tag your rules match arrives |
| Tagged link | Open a page URL with ?utm_source=chatgpt.com appended |
AI assistants channel, via the source regex |
| Your own campaign | Open a URL with your campaign’s UTM values | Its usual channel, not AI assistants |
| Typed visit | Type your URL into a new private window | Direct |
Record the result of each test and the date. If the assistant referral arrives as Direct, the assistant or browser most likely passed neither a referrer nor a UTM tag for that click. That is exactly the traffic no channel can recover.
If your site uses a consent banner, sessions from visitors who decline analytics may not appear, or may appear differently, depending on your configuration. Note your consent setup beside the report so readers know what the numbers cover.
Reconcile the resulting totals
Every session belongs to exactly one channel in a group, so the custom group’s total should equal the default group’s total for the same date range. Use a worksheet like this each month:
| Row | Default group | Custom group |
|---|---|---|
| AI Assistant (default rule only) | not applicable | |
| AI assistants (all detected) | not applicable | |
| Referral | ||
| Direct | ||
| Unassigned | ||
| All other channels | ||
| Total sessions |
Checks:
- The totals match. If they do not, check that the date ranges and filters are the same.
- AI assistants (all detected) is at least the default AI Assistant figure. The difference is what your extra rules caught.
- Referral, Unassigned, and any other rows fell by that difference in total. If a row you did not expect fell, check which of your domains it held.
- Direct is reported unchanged, with a note that it may include an unknown share of assistant visits.
Report the AI channel as “detected assistant referrals,” never as all assistant traffic.
Use the landing pages
The most useful dimension to add is Landing page. The pages assistants send people to are the pages whose facts matter most in those answers. Check each for current prices, hours, service scope, and descriptions, and fix what is out of date. The business description guide has a worksheet for checking those facts, and measuring AI citations covers placing these visits alongside citation checks.
Checklist
- Default AI Assistant channel reviewed for the last 90 days.
- Assistant domains taken from your own source / medium data.
- Custom group copied from the default, with the AI channel ordered above Referral, the copied AI Assistant channel, and any other channel that could match its sessions.
- Four test cases run and recorded.
- Monthly totals reconciled against the default group.
- Direct and Unassigned reported as their own rows, with their limits stated.
