Why GA4 Shows Traffic as Unassigned (and How to Fix It)

Traffic shows up as Unassigned in GA4 when a session's source and medium don't match any rule in the property's default channel grouping — and in practice that almost always means a malformed or non-standard utm_medium. GA4 runs every session through a fixed set of channel definitions; a value those rules don't recognize (a typo, the wrong case, or a custom label like newsletter) falls through every rule and lands in the catch-all Unassigned bucket. The fix is rarely a GA4 setting. It's the tag on the link.

Unassigned is not the same as (Other)

These two labels look alike in a report and mean different things.

Unassigned is a channel value. It appears in the Default Channel Group dimension when a session matched none of GA4's channel rules. The session still has a real source and medium — GA4 just couldn't sort it into Organic Search, Paid Social, Email, or any other named channel (Google Analytics Help: Default channel group).

(other) is a cardinality value. GA4 caps how many unique rows a report can hold; when a dimension has too many distinct values, the lowest-volume ones get rolled together into a single "(other)" row to keep the report within limits (Google Analytics Help: Data differences between reports and explorations). So Unassigned is a tagging problem, and "(other)" is a high-cardinality problem. Chasing one when the report is showing the other wastes a lot of time.

How GA4 decides the channel

GA4 reads three fields off each session — utm_source, utm_medium, and (for paid channels) utm_campaign — and tests them against an ordered rules engine. A few of those rules:

  • Paid Search / Paid Social / Paid Other require the medium to match the regular expression ^(.*cp.*|ppc|retargeting|paid.*)$. That pattern catches cpc, ppc, cpm, paidsocial, and paid-search, but it does not catch paidsearch-with-a-typo or payed.
  • Organic Social requires the source to be a recognized social platform and the medium to match ^(social|social-network|social-media|sm|social network|social media)$.
  • Email requires source = email or medium = email.
  • Organic Search requires a recognized search-engine source with a medium of organic.

If none of these match, the session is Unassigned. The single most common reason: the medium is close to a recognized value but not exactly it. GA4 matches these patterns case-sensitively, so Email, Social, and CPC (capitalized) sail straight past the rules and end up unassigned.

What usually causes it

A handful of patterns produce nearly all real-world Unassigned traffic:

  • Empty or missing utm_medium. A link tagged with only utm_source=newsletter and no medium has nothing for the rules engine to match, so it can't be classified.
  • Case mismatch. utm_medium=Email or utm_source=Facebook won't match the lowercase patterns. GA4 does not normalize case for channel matching.
  • Custom medium values. Teams invent labels — newsletter, blast, qr, partner, influencer — that read clearly to a human but match no GA4 rule. newsletter should be email; qr should usually be referral or a defined custom channel.
  • Typos. utm_medium=cpcc, socail, or orgnic each fall through. One stray character is enough.
  • Redirects that strip parameters. A shortener or a server-side redirect that drops the query string delivers the user with no UTM data at all. The session arrives without a campaign source and gets classified by referrer instead — often as Direct or Unassigned.
  • Double-tagging. Tagging both a redirect hop and the final destination, or letting an ad platform's auto-tagging collide with manual UTMs, can produce a source/medium pair that no rule expects.

Because GA4 reads UTMs exactly as written, a single fragmented value splits one real channel into several rows — some classified, some not (Google Analytics Help: URL builders).

How to diagnose it

Open Reports → Acquisition → Traffic acquisition and look at the Default Channel Group dimension. If Unassigned has meaningful volume, switch the table's primary dimension to Session source / medium to see the raw values feeding that bucket. The offending pairs become obvious: newsletter / (none), facebook / Social, google / cpcc.

For a precise audit, build a free-form exploration, add Session source, Session medium, and Session default channel group as dimensions, add Sessions as the metric, then filter the channel dimension to exactly matches Unassigned (Google Analytics Help: Free-form exploration). The result is a clean list of every source/medium combination that failed to classify — that list is the work order.

How to fix it

The fix lives at the link, not in the GA4 interface (though custom channel groups can paper over a mediums problem after the fact):

  • Standardize medium values to the ones GA4 recognizes: cpc for paid search and paid social, email for newsletters and blasts, organic for unpaid search, referral for partner and link placements, social for organic social. Stop inventing mediums.
  • Lowercase everything. Source and medium should be lowercase, with hyphens instead of spaces, every time.
  • Audit existing links against the exploration above, then re-tag the worst offenders at the source — the email template, the social scheduler, the ad UTM template.
  • Test redirects. Click the live link and confirm the UTMs survive to the landing URL. If a shortener strips them, tag the final destination it lands on.
  • Tag with a builder that normalizes rather than typing UTMs by hand into a spreadsheet, which is where the typos come from.

That last point is what VibeTraker's campaign-link builder is for: it trims and lowercases every value as it's entered, and runs Levenshtein typo detection that warns when a new medium drifts close to one already in use — flagging socail against social, or emial against email, before the link ships. The same normalization helper feeds the GA4 read-back and the owned-event source extraction, so a campaign reads identically whether the number comes from GA4 or from a normalized owned metric. Links that share one spelling don't fragment into Unassigned.

Getting the conventions right upfront is cheaper than re-tagging later — see how to build UTM links for GA4 and the UTM naming convention template. Unassigned isn't a GA4 defect to report. It's the property telling you, accurately, that a link arrived wearing a label it was never taught to read.

FAQ

Frequently asked questions

What does Unassigned mean in GA4?

It means a session's source and medium did not match any rule in GA4's default channel grouping, so the channel couldn't be classified. The session still has a real source/medium; GA4 just had no named channel to put it in. The cause is almost always a non-standard or misspelled utm_medium.

What's the difference between Unassigned and (other) in GA4?

Unassigned is a channel value for sessions that matched no channel rule. "(other)" is a cardinality value: when a dimension has too many distinct rows, GA4 groups the lowest-volume ones into a single "(other)" row to stay within report limits. One is a tagging problem, the other a high-cardinality problem.

Why does my utm_medium not get recognized?

GA4 matches medium values case-sensitively against fixed patterns. Email, Social, or CPC with a capital letter won't match, and custom labels like newsletter, blast, or qr match no rule at all. Use lowercase, GA4-recognized values: cpc, email, organic, referral, social.

How do I find which links are causing Unassigned traffic?

In Traffic acquisition, switch the dimension to Session source / medium to see the raw values, or build a free-form exploration with source, medium, and channel group, then filter to channel exactly matches Unassigned. That gives a clean list of the source/medium pairs that failed to classify.