The Order of the Channel Rules: Why the First Match Wins
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
Four 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 apply from the day they are created rather than backwards, which makes the default chain the thing worth knowing rather than working around.