GA4 Channel Rules: How the Order of Evaluation Decides the Channel

Contents
A traffic report names a channel and keeps the reason to itself. Sessions arrive as Paid Other where Paid Search was expected, a Performance Max campaign disappears out of search entirely, and a partner link that carries the same medium as the search ads ends up somewhere else. None of that is a fault: it is the order of the rules, visible only to whoever knows it.
The default channel group is a chain of eighteen conditions. GA4 walks it from the top, takes the first that fits and stops – the rules below it are never evaluated. Almost every surprising channel comes from that single sentence.

The Chain Stops at the First Match
A session with the source google and the medium cpc satisfies two conditions. Rule 4 asks whether the source is a search site and the medium a paid one – true. Rule 12 asks whether the source is a search site or the medium is organic – the first half is true as well.
Both are correct, and only the fourth is ever reached, because the chain ends there. That is the whole mechanism, and it is worth stating in exactly this form: a channel is not the best-fitting rule, it is the earliest fitting rule.
The practical consequence shows up when a rule is added higher in the chain than expected. Cross-network sits at position 2, above every paid rule, so a campaign name containing cross-network pulls sessions out of Paid Search that otherwise belong there – which is exactly what happens to Performance Max.
What Counts as a Paid Medium
Five of the first eight rules ask the same question about the medium, and the pattern behind it is broader than it looks: anything containing the letters cp, plus ppc, retargeting, and everything starting with paid.
| Medium | Paid? | Why |
|---|---|---|
cpc, cpm, cpv |
yes | All contain cp. |
paid_social, paidsearch |
yes | Start with paid. |
ppc, retargeting |
yes | Named literally in the pattern. |
display, banner |
no | Neither contains cp – they are caught later by the Display rule. |
ad, ads, sponsored |
no | Nothing in them matches, so they fall through to the bottom of the chain. |
The last row is where most homemade taxonomies come apart. A medium called ads reads as paid to every human and to no rule in the chain; the session ends in Unassigned unless a later rule happens to catch it. And the reverse case exists too – a medium invented as cpx-newsletter contains cp and is classified as paid traffic for that reason alone.
Why the Source Category Decides
Being paid is only half of each of those rules. The other half asks what kind of site the source is, and that question is answered from a list Google maintains: which domains count as search, which as social, which as video, which as shopping.
A source that is not on the list has no category, so the specific rules cannot match it. That is how a partner site tagged with cpc becomes Paid Other rather than Paid Search: the medium is paid, but there is nothing to make it search. The channel is correct, it just describes something narrower than expected.
The same mechanism produces the opposite surprise. Anything on the search list arrives as Organic Search with no medium at all, because rule 12 asks for the source alone. A referral from a search engine’s cached page is therefore organic search traffic, whether or not anyone searched for anything.
What Unassigned Really Is
Unassigned is not the nineteenth rule; it is the absence of the first eighteen. Two cases produce it, and they need different fixes.
The first is a value the chain has no rule for – utm_medium=flyer, utm_medium=ads, a typo like referal. The data arrived intact and the taxonomy is the problem, which means the link has to change, not the report.
The second is a session with a source and no medium at all, which is what happens when a link carries utm_source and utm_campaign but nothing else. Rule 1 requires the source to be direct, and every rule after it needs a medium; the session falls through all eighteen. This is the single most common cause, and it comes from link builders that treat the medium as optional.
Reading a Channel Backwards
The useful habit is to run the chain by hand for any channel that looks wrong. Which rule fired, and which earlier rule would have fired if one field were different. Two answers come out of it: what to change in the tagging, and whether the channel was wrong at all – because often it is right and only the expectation was built on a rule that never gets reached.
What no amount of reading changes is the order itself. Custom channel groups can be defined with a different one, and they even apply retroactively, but the default channel group itself stays unchanged, which makes the default chain the thing worth knowing rather than working around.
Questions and answers
Why does Google Ads traffic without UTM parameters still land in Paid Search?
Because of auto-tagging, which marks every ad click automatically. If this setting is on in the Google Ads account and the account is linked to GA4, every click carries a gclid, from which GA4 derives the source google and the medium cpc. Rule 4 then applies, unless Cross-network at position 2 has already matched, as it does for Performance Max.
A newsletter link carries utm_source=newsletter and utm_medium=newsletter. Which channel does it end up in?
Unassigned, although nothing about it looks wrong. The chain has no rule for newsletter, neither as a source nor as a medium: the word contains no cp, is on none of Google’s lists, and the email rule requires one of the spellings email, e-mail, e_mail or e mail as the source or the medium. The session therefore falls through all eighteen rules, just like utm_medium=flyer.
The fix belongs in the link, not the report: utm_medium=email, with the newsletter’s name in utm_source or utm_campaign. The information is kept, and the email rule applies.
When renaming, the campaign name deserves a look as well. The shopping rules evaluate it too, and a name containing shop or shopping can pull a session into a shopping channel even though it came from a newsletter. Running the new link through the chain once from the top shows this before the mailing goes out.
Why do Facebook ads tagged utm_source=facebook and utm_medium=ads appear under Organic Social?
Because a later rule catches them before they can fall through to Unassigned. The medium ads does not match the pattern for paid media, so Paid Social does not apply. The Organic Social rule, however, needs only one of two things: a source on Google’s list of social sites or a medium such as social. The source facebook is on the list, so it is enough on its own.
The result is more treacherous than Unassigned because it looks plausible: paid reach appears as organic, and the organic channel looks more successful than it is. The fix is a medium that matches the pattern, such as paid_social or cpc; then Paid Social applies, which sits well above Organic Social in the chain.
Practical check: audit real acquisition rows
The Acquisition Audit in the Channel Debugger adds a report-based check to the individual channel-rule examples. After Google authorization, a property and an explicit date range determine the query. The tool reads session source, medium, campaign and default channel group together with sessions. It does not mix first-user acquisition with session acquisition.
- Select a completed reporting period. Recent data may still change.
- Review rows in Unassigned, starting with the largest session values. Compare their source and medium with the channel rules described above.
- Inspect spelling candidates such as
Emailandemail, or campaign names with extra spaces. A candidate is a naming inconsistency to investigate, not an automatic correction. - Inspect the returned metadata before interpreting the result. Thresholding, sampling and an
(other)row can hide detail. - Export the findings as CSV and correct future campaign links or tracking configuration where the evidence supports it.
The displayed Unassigned percentage uses the sum of the returned session values. It is not an independently retrieved property total. The tool rejects incomplete pagination and does not rewrite historical attribution. A row containing (not set) alone cannot establish whether consent, redirects or tagging caused the missing value.
Technical references: Data API dimensions and metrics and response metadata.