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 catchescpc,ppc,cpm,paidsocial, andpaid-search, but it does not catchpaidsearch-with-a-typo orpayed. - Organic Social requires the
sourceto be a recognized social platform and themediumto match^(social|social-network|social-media|sm|social network|social media)$. - Email requires
source = emailormedium = 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 onlyutm_source=newsletterand no medium has nothing for the rules engine to match, so it can't be classified. - Case mismatch.
utm_medium=Emailorutm_source=Facebookwon'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.newslettershould beemail;qrshould usually bereferralor a defined custom channel. - Typos.
utm_medium=cpcc,socail, ororgniceach 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/mediumpair 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:
cpcfor paid search and paid social,emailfor newsletters and blasts,organicfor unpaid search,referralfor partner and link placements,socialfor 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.