GA4 Troubleshooting

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.

Jun 27, 2026 9 min readBy The UTM Drift Guard team
GA4 Troubleshooting
EmailEMAILe-mailemail

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.

  1. 1Click hits your siteutm_source + utm_medium attached
  2. 2GA4 records source / mediumexactly as written, case included
  3. 3Values checked against channel rulesthe Default Channel Group
  4. 4A rule matchessession lands in a real channel
  5. 5No rule matchessession is labeled Unassigned
How a session becomes Unassigned: the values are present, but no Default Channel Group rule recognizes them.

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.

Three buckets that look similar in GA4 but mean different things.
BucketWhat it meansMost common cause
UnassignedGA4 has a source/medium, but it matched no channel ruleDirty or unrecognized utm_medium / utm_source values
(not set)GA4 has no value for that dimension on the rowThe value was never collected, or rows are still processing
DirectNo campaign data and no referrer GA4 can readMissing 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 rulenewsletter, qr, partner, podcast, influencer. Useful labels, but no Default Channel Group rule matches them, so they go Unassigned.
  • Mismatched source/medium pairsutm_medium=paid_social with a source GA4 does not see as a social platform can miss the Paid Social rule and fall through.
  • Case and spacing driftEmail, EMAIL, and email are three different mediums in your reports, which splits one channel into several rows. See UTM case sensitivity in GA4.
  • Typos in templatescpc-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)

Organic Search
34%
of sessions
Direct
24%
of sessions
Unassigned
17%
of sessions
Paid Social
12%
of sessions
Email
8%
of sessions
Referral
5%
of sessions
Illustrative channel breakdown for one GA4 property: Unassigned (17%) is the third-largest bucket, ahead of Paid Social and Email.

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.

Real-world UTMs that miss the rules (left of the arrow) and where they end up.
?utm_source=mailchimp&utm_medium=newsletterUnassigned (no Email rule match)
?utm_source=partner-site&utm_medium=partnerUnassigned (no channel rule)
?utm_source=qr&utm_medium=qrUnassigned (custom medium)
?utm_source=Facebook&utm_medium=Paid_Socialsplits from facebook / paid_social
?utm_source=newsletterDirect or (not set): no utm_medium at all
Map each unrecognized value to a canonical token GA4 already understands.
What your team typedCanonical mediumChannel GA4 then assigns
newsletteremailEmail
Paid_Socialpaid_socialPaid Social
cpc-fbcpc (source = facebook)Paid Social
qrqr (needs a custom channel group)Unassigned by default
partnerreferralReferral

What your team typed

EmailEMAILnewsletteremail-blast

Canonical (matches the Email rule)

email
Four ways to write one channel collapse to a single token that 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. 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. 2

    Group the duplicates

    Cluster the case variants, typos, and synonyms — Email, EMAIL, newsletter all mean one channel. This is the audit step, and it is where most of the recovery happens.

  3. 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. 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. 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. 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 like email or paid_social would classify cleanly.
  • Letting case drift — Email and email fragment 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.

A
B
C
D
F
C71 / 100Unassigned over ~15% of sessions usually lands a property in the C range until the mediums are standardized.
UTM Drift Guard turns the audit into a single A–F grade with one line on why.

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.

Run a free audit