PERFMETRIX — in data we trust
All articles
GA45 August 2026·7 min read

GA4 'Unassigned' traffic: the causes, in the order to check them

Unassigned is the bucket GA4 uses when nothing matches. Here's the diagnostic order, including the consent-timing cause that never shows up in a UTM audit.

DeBy Denis · Perfmetrix

Short answer: Unassigned isn't an error code. It's the leftovers bucket — Google's own words are that it's "the value Analytics uses when there are no other channel rules that match the event data" (Analytics Help, checked 5 August 2026). Check the causes in this order: the medium values you're sending, then whether Google Ads auto-tagging is on, then whether your tags are even running when the session starts. That last one is the cause most guides skip. If a tag waits for the cookie banner, the first measured event can land after the campaign parameters have gone from the URL, and a session whose source is "(not set)" matches no rule at all — not even Direct, whose rule needs the source to be exactly "(direct)".

Unassigned is what's left when every rule has failed

The default channel group is a list of rules, and each one tests the source, medium and campaign values a session arrives with. Google publishes the rules, and reading them is faster than reading anything written about them:

ChannelThe rule
DirectSource exactly matches "(direct)" AND medium is one of "(not set)", "(none)"
Organic SearchSource is a known search site OR medium exactly matches organic
Paid SearchSource is a known search site AND medium matches ^(.*cp.*|ppc|retargeting|paid.*)$
ReferralMedium is one of "referral", "app", "link"
EmailSource or medium matches email|e-mail|e_mail|e mail
Cross-networkCampaign name contains "cross-network" (or, for Ads, a cross-network ad network type)

Anything that satisfies none of them is Unassigned.

Two things follow, and both are the opposite of what people assume.

Unassigned and "(not set)" are not the same thing. "(not set)" is a missing dimension value. Unassigned is a channel classification. A session can carry a perfectly present source and medium and still be Unassigned, because the pair matched nothing.

A session with no source at all is not Direct. Look at the Direct rule again: it wants the source to be exactly "(direct)". A session that reaches GA4 with no usable source information at all doesn't satisfy that, so it doesn't land in Direct. It lands in Unassigned. This is why Unassigned is a measurement symptom rather than a marketing one — Direct means "arrived with no referrer", and Unassigned frequently means "we never saw the arrival".

The order to check, and why it isn't a frequency ranking

Nobody has published data on which cause is commonest. Not Google, not any independent study we could find — every ranking in circulation, including the one this post was originally briefed to make, is somebody's impression of their own client base. So here's a diagnostic order instead, cheapest and most reversible first.

1. Your own medium values. Look at Traffic acquisition, add Session source / medium as a secondary dimension, and read the mediums attached to Unassigned. Values like web, banner, qr, newsletter, social, partner match no rule in the table above. newsletter is the classic: it feels like email and matches nothing. Fixing this is a link-building exercise in your own email and print campaigns — use email, use cpc, use referral.

2. Google Ads auto-tagging. With auto-tagging off and no manual UTMs, paid clicks arrive looking like something else. Check the Ads account rather than guessing from GA4.

3. Events arriving outside a session. GA4 generates a session ID with session_start, and session-scoped source, medium and campaign are assigned "each time users return to your website or app" (Analytics Help, checked 5 August 2026). Anything that reaches the property without that session context — a stray Measurement Protocol hit, a server-side event with no session parameters, an event fired on a page where the tag ran but the session didn't start cleanly — has no source to classify.

4. Consent timing. Below, because it's the one that survives all three checks above.

The consent-timing cause a UTM audit will never find

Here's the sequence that produces Unassigned on an advertiser site whose tagging is otherwise correct.

Someone clicks your ad. They land with the campaign parameters in the URL. Your consent banner appears, and your Google tag — deliberately, correctly — hasn't sent anything yet, because Google's instruction is that the consent default must be set "before any commands that send measurement data" (Google, Set up consent mode on websites, checked 5 August 2026).

The visitor takes a few seconds to accept. In those seconds, plenty can happen: a client-side router rewrites the URL and strips the query string, a redirect moves them to a canonical path, they click through to a second page. Now the first event GA4 actually receives is happening on a URL with no campaign parameters and a same-site referrer. The paid click is gone from the record, and what GA4 has is a session it can't classify.

The same shape appears when consent is denied outright. Without analytics_storage, there's no cookie to tie events into a coherent session, and the modelling that's supposed to fill the gap only activates once a property clears Google's published thresholds — an Advanced consent mode implementation, "at least 1,000 events per day with analytics_storage='denied' for at least 7 days", and "at least 1,000 daily users sending events with analytics_storage='granted' for at least 7 of the previous 28 days" (Analytics Help, checked 5 August 2026). Most sites don't clear them, so nothing fills the gap.

Google doesn't document this chain anywhere we could find. It follows from the pieces Google does document — the channel rules, the way session-scoped dimensions are assigned, and the ordering requirement for the consent default — and it's widely reported by practitioners. Treat it as a mechanism to test on your own property rather than as a published fact.

The test is straightforward. Click one of your own ads, accept the banner, and watch what the first event carries. If your page_location has lost the parameters by the time anything fires, you've found it.

The upstream question is whether your tags are ordered correctly around the banner at all, because that's what decides which events exist to be classified. The Consent Mode v2 detector loads your live site and reports whether a consent default fires before your tags, and whether the advertising signals are present when it does.

What you can fix and what you're stuck with

Fixable, and worth doing this week: medium values, auto-tagging, and the order of your consent default relative to your tags. All three change what future sessions look like.

Not fixable: the Unassigned already sitting in your reports. Channel assignment happens when the data is collected. Correcting your tagging today does nothing for last quarter, so don't promise anyone a retrospective clean-up.

Not worth fixing: a small residue. Some Unassigned is normal on any property with real traffic. The number to watch is the trend — a step change in the Unassigned share almost always coincides with a deployment, a CMP change or a campaign launch, and the date it started tells you more than the figure itself.

The five-minute version

Open Traffic acquisition. Add Session source / medium as a secondary dimension. Filter to Unassigned. If you see recognisable-but-wrong mediums, it's your own tagging and you can fix it today. If you see "(not set)" against traffic you know came from ads, the events are arriving without a session source, and the question is what your tags were doing at the moment those visitors landed.

That second answer is nearly always about consent ordering, which is the work we do — and it's the same fix that stops the equivalent gap in your ad platform's conversion data.

Sources

  1. 1.Analytics Help — [GA4] Default channel group (definition of Unassigned and the channel rules) · Checked 2026-08-05
  2. 2.Analytics Help — [GA4] Automatically collected events (session_start, first_visit) · Checked 2026-08-05
  3. 3.Analytics Help — [GA4] User- and session-scoped traffic-source dimensions · Checked 2026-08-05
  4. 4.Analytics Help — [GA4] Behavioural modelling for consent mode, including the eligibility thresholds · Checked 2026-08-05
  5. 5.Google — Set up consent mode on websites · Checked 2026-08-05
  6. 6.Perfmetrix — UK private clinic consent benchmark (our own scan data) · 2026-07-08

Find out what your site leaks — in 30 seconds

Run the free consent checker on your own domain, or book a call and we'll walk your setup together.