Why GA4 Shows Unassigned Traffic
Unassigned is not a channel. It is what GA4 writes down when it cannot work out which channel a session belongs to, and in a paid media account it is almost always the same single field causing it: utm_medium.
The link still works. The click still lands. The revenue still happens. It simply gets filed under a bucket nobody reports on, which is why the campaign looks like it delivered nothing.
What Unassigned actually means
GA4 assigns every session a Default Channel Group by running the session's source and medium through a fixed set of rules. Those rules are not fuzzy and GA4 does not guess. If utm_medium is missing, or holds a value the rules do not recognise, the session falls through every rule and lands in Unassigned.
Three things follow from that:
- A perfect
utm_sourceandutm_campaignwill not rescue a wrongutm_medium. - Fixing the links only helps sessions collected after the fix. Historic Unassigned rows stay Unassigned, because the channel group is stamped at collection time.
- A single misspelled medium in one placement can move a meaningful share of a launch out of reporting.
The values GA4 recognises
These are the mediums that map to a channel group. Anything outside them is Unassigned.
| Channel group | Use one of these | Seen in the wild instead |
|---|---|---|
| Paid Search | cpc, ppc, paid, retargeting | google_ads, search, sem |
| Paid Social | paid_social, social_paid | facebook_ads, paidsocial, meta |
| Organic Social | social, social_network, sm | instagram, linkedin |
| Display | display, banner, cpm, expandable | programmatic, dv360 |
email, e_mail | mailchimp, edm, klaviyo | |
| Affiliates | affiliate | partner, referral_program |
| Video | video | youtube, yt |
The pattern in the right hand column is always the same mistake: somebody put the platform in the medium field. The platform belongs in utm_source. The medium says what kind of marketing it was.
Rule of thumb: source answers where the click came from, medium answers what you paid for. Facebook is a source. Paid social is a medium.
How to find the broken links
In GA4, open Reports, then Acquisition, then Traffic acquisition. Set the primary dimension to Session default channel group and find the Unassigned row. Then add Session source / medium as a secondary dimension. Every offending value is now listed in front of you, with the sessions each one cost.
What you usually see is a short list: two or three wrong mediums that account for most of the volume. Those are the links to fix first, and they are usually pasted into an ad platform in one place, which means one edit fixes thousands of clicks.
The five causes, in the order they show up
- An unrecognised medium. The list above. This is the majority of cases.
- No medium at all. A link built with only
utm_campaign, which happens when somebody copies a URL from a report and edits the campaign name. - Parameters stripped by a redirect. The click goes to a shortener or a redirect chain that drops the query string. Test the final landing URL, not the one you pasted.
- A macro that never resolved. The report literally shows
{{campaign.name}}as the campaign. The link reached the browser with the placeholder still in it, which means the macro was encoded, misspelled, or placed where the platform does not substitute it. - Casing drift.
CPCis notcpc. GA4 lowercases medium for channel grouping in most cases, but source and campaign stay case sensitive, so the campaign splits into several rows even when the channel is right.
Fixing it without repeating it
Fixing the live links is the easy half. Keeping them fixed is the half that fails, because tagging is done by whoever happens to be launching, in whatever tool they have open.
Three things make it stick:
- One agreed convention. Lower case, underscores instead of spaces, and a fixed medium per channel. Write it down once.
- One place links are built. Not a spreadsheet each person keeps, not memory.
- A check before launch. Paste the finished link into a linter and read what it says. This takes ten seconds and it is the only step that catches the mistake while it still costs nothing.
The UTM builder on this site does all three. It builds one link or one row per channel, it flags a medium GA4 will not map, and its Check a URL tab takes a finished link somebody else built and tells you exactly what is wrong with it. Nothing is uploaded, so it is safe to paste client URLs into.
What Unassigned is not
Two things get blamed for Unassigned that are usually innocent. Consent mode is one: when a visitor refuses cookies the session is modelled, not misfiled, and modelled sessions still carry a channel. Cross domain tracking is the other: a broken cross domain setup shows up as a self referral, not as Unassigned.
If Unassigned appears next to a real source and medium pair in the secondary dimension, the tagging is the problem. If it appears next to (not set), look at your consent and data collection setup instead.
Related reading
For what each parameter does and a naming convention worth adopting, read UTM parameters explained for paid media. For the placeholder syntax each ad platform substitutes at click time, read ad platform URL macros for UTM tracking.