Why 10–20% of Your GA4 Traffic Is 'Unassigned'
A plain look at why sessions fall into Unassigned in GA4, how it differs from (not set), and the steps to pull that traffic back into real channels.
You open Reports → Acquisition → Traffic acquisition in GA4 and a fat slice labeled Unassigned sits near the top — sometimes bigger than Email or Paid Social. The spend was real and the clicks were real, but GA4 cannot tell you where that traffic came from.
What 'Unassigned' actually means in GA4#
GA4 sorts every session into a channel using the Default Channel Group — a fixed list of rules like Email, Paid Social, Organic Search, and Referral. Each rule is a pattern. The Email rule, for example, only matches when the source or medium reads email, e-mail, e_mail, or e mail.
When a session arrives, GA4 reads its utm_source and utm_medium exactly as you wrote them and checks them against every rule in order. If one matches, the session gets that channel. If none match, GA4 has nowhere to put it — so it lands in Unassigned. The traffic is not missing; it just failed the rules.
- 1Click hits your siteutm_source + utm_medium attached
- 2GA4 records source / mediumexactly as written, case included
- 3Values checked against channel rulesthe Default Channel Group
- 4A rule matchessession lands in a real channel
- 5No rule matchessession is labeled Unassigned
Unassigned vs (not set) — they are not the same#
These two get mixed up constantly, and the fix is different for each. The quick test: Unassigned has data that did not match; (not set) has no data at all.
| Bucket | What it means | Most common cause |
|---|---|---|
| Unassigned | GA4 has a source/medium, but it matched no channel rule | Dirty or unrecognized utm_medium / utm_source values |
| (not set) | GA4 has no value for that dimension on the row | The value was never collected, or rows are still processing |
| Direct | No campaign data and no referrer GA4 can read | Missing UTMs, stripped tags, or in-app browsers |
If your source/medium reads '(not set)'
That is the missing-data case, not Unassigned. It usually means the hit never carried campaign data, or the report is still processing recent days. Untagged links and stripped parameters are the usual culprits — covered in GA4 UTM not working.
Why your traffic falls through the rules#
Almost every Unassigned session traces back to a utm_medium value GA4 was never taught to recognize. The Default Channel Group only knows a short, specific list per channel. Anything outside that list has no home.
- Custom mediums with no rule —
newsletter,qr,partner,podcast,influencer. Useful labels, but no Default Channel Group rule matches them, so they go Unassigned. - Mismatched source/medium pairs —
utm_medium=paid_socialwith a source GA4 does not see as a social platform can miss the Paid Social rule and fall through. - Case and spacing drift —
Email,EMAIL, andemailare three different mediums in your reports, which splits one channel into several rows. See UTM case sensitivity in GA4. - Typos in templates —
cpc-fb,e-mail-blast, a trailing space. One wrong character is enough to miss a rule.
10–20%
of GA4 sessions commonly land in Unassigned
26%
of conversions can be credited to the wrong channel when UTM data is fragmented
29%
better attribution accuracy when teams standardize their values (Cometly, 2026)
The reason this keeps happening is governance, not skill. Most teams use UTMs but never write the rules down: 67% use UTMs and only 58% have a documented strategy (SEMrush, 2024). Once more than two people build links, spelling and casing drift, and a slice of every campaign starts missing the channel rules.
Common values that GA4 sends to Unassigned#
Here is what the same intent looks like when it is written four different ways. Only the canonical token on the right matches a Default Channel Group rule.
| What your team typed | Canonical medium | Channel GA4 then assigns |
|---|---|---|
| newsletter | ||
| Paid_Social | paid_social | Paid Social |
| cpc-fb | cpc (source = facebook) | Paid Social |
| qr | qr (needs a custom channel group) | Unassigned by default |
| partner | referral | Referral |
What your team typed
Canonical (matches the Email rule)
How to recover Unassigned traffic#
You cannot rewrite the source/medium already stored on past sessions, but you can find the bad values, correct the links that produce them, and stop the leak going forward. Work in this order.
- 1
Find the real values behind Unassigned
Open Traffic acquisition, then add Session source / medium as a secondary dimension and filter to the Unassigned row. You now see the exact strings GA4 could not classify.
- 2
Group the duplicates
Cluster the case variants, typos, and synonyms —
Email,EMAIL,newsletterall mean one channel. This is the audit step, and it is where most of the recovery happens. - 3
Map each group to a canonical token
Pick one value GA4 recognizes per group:
email,cpc,paid_social,organic,referral. Lowercase, no spaces, no punctuation drift. - 4
Fix the links at the source
Update the email tool, ad platform, and link templates that generate the bad UTMs. Renaming inside GA4 alone does not fix the links still being created.
- 5
Add a custom channel group for legitimate customs
For mediums you genuinely want —
qr,partner,podcast— build a custom channel group so they get a named bucket instead of Unassigned. - 6
Lock the taxonomy
Write down the approved sources and mediums and build new links from that list, so the same value is written the same way every time.
Renaming in GA4 is not the same as fixing the link
A custom channel group can re-bucket sessions in reports, but the link template is still emitting Paid_Social or newsletter. If you do not correct the source, new traffic keeps arriving Unassigned. Fix the link, then the report.
Common mistakes that keep traffic Unassigned#
Avoid these
- Inventing custom mediums (
blast,promo,social-ads) when a recognized token likeemailorpaid_socialwould classify cleanly. - Letting case drift —
Emailandemailfragment one channel into separate rows. - Trusting a spreadsheet to keep values consistent. It stops enforcing consistency once more than two people touch it.
- Fixing values only inside GA4 and leaving the link builders untouched, so the leak refills next week.
- Skipping UTM markup on some campaigns, then wondering why traffic shows up as Direct or (not set).
If a quarterly review is coming up, do the cleanup before the numbers get presented — a 17% Unassigned bucket makes every channel comparison unreliable. Here is how to audit your UTM data before a QBR.
What does Unassigned mean in GA4?
It means GA4 recorded a source and medium for the session but none of them matched a rule in the Default Channel Group, so the session had no channel to go into. The data is present — the classification failed. It is almost always caused by a utm_medium value GA4 does not recognize, such as newsletter or partner.
What is the difference between Unassigned and (not set) in GA4?
Unassigned means the source/medium value exists but matched no channel rule. (not set) means GA4 has no value for that dimension on the row at all — usually because the hit carried no campaign data, the tag was stripped, or the report is still processing recent days. Unassigned is a naming problem; (not set) is a missing-data problem.
Why does my source/medium show as (not set) in GA4?
A (not set) source/medium means GA4 never received a value for that session. Common causes are links without utm_source and utm_medium, parameters dropped by a redirect, in-app browsers that strip query strings, and very recent data that has not finished processing. Add the missing UTMs at the source to resolve it.
How do I reduce the Unassigned channel in GA4?
Find the real values behind it by adding Session source/medium as a secondary dimension on the Unassigned row, group the duplicates, and map each group to a token GA4 recognizes (email, cpc, paid_social, organic, referral). Then fix the link templates producing the bad values and lock an approved list so they do not drift back.
Can I fix GA4 unassigned UTM traffic retroactively?
You cannot rewrite the source/medium already stored on past sessions. A custom channel group can re-bucket some historical sessions in reports, but it does not change the underlying values or fix the links still being created. The durable fix is to correct the link templates so new traffic classifies correctly from now on.
See exactly what is hiding in your Unassigned bucket
Paste a GA4 source/medium export and get an A–F UTM health grade in about a minute — every unrecognized value clustered and a clean taxonomy ready to lock.