GA4 Unassigned Traffic: What It Is and How to Fix It (With a Wrong vs Right UTM Table)
GA4 Unassigned traffic happens when source/medium matches no channel rule. A 5-minute diagnosis, a wrong-vs-right UTM table and permanent fixes.
TL;DR — Summary
- Unassigned is traffic whose source/medium pair matches none of GA4's default channel rules; the visit is measured but lands in the wrong bucket.
- The usual cause is a non-standard utm_medium: values like story, bio, offline or whatsapp aren't recognised; paid_social, cpc, social, email, referral and affiliate are.
- Diagnose it: in Traffic acquisition, switch the primary dimension to 'Session source / medium' and filter for channel = Unassigned.
- Fix it: standardise UTMs, create a custom channel group for your own offline/QR channels, and check your tag setup if you see (not set).
What Is Unassigned Traffic in GA4?
Unassigned traffic is made up of sessions whose source and medium GA4 can't map to any rule in the default channel group. The visit is recorded, but it can't be credited to Paid Social, Email, Organic Search or any other channel, so it disappears from channel-level budget decisions.
GA4 tries the rules Google publishes in order. A session whose medium starts with 'paid' or contains 'cp' goes to a paid channel, medium 'email' goes to Email, medium 'referral' goes to Referral. A combination that matches nothing becomes Unassigned.
Unassigned vs (not set) vs Direct
These three are often confused, but their causes differ. Identify which one you have first.
- Unassigned: source/medium EXISTS but matches no channel rule. Usually a UTM naming problem.
- (not set): there is NO source information. Usually a tagging problem: events without a session_start, a duplicate gtag install, events firing before the Google tag, or Measurement Protocol events sent with the wrong client_id/session_id.
- Direct: source is genuinely '(direct)' and medium '(none)' — typed URLs, bookmarks or hops that lose the referrer.
A 5-Minute Diagnosis
Open Reports › Acquisition › Traffic acquisition. Change the table's primary dimension from 'Session primary channel group' to 'Session source / medium' and add a filter for 'Session primary channel group = Unassigned'.
The rows you see are the problem: pairs like 'instagram / story', 'digest / newsletter' or 'qr / offline' tell you exactly which campaign links to fix. Start with the row that brings the most sessions; on most sites a handful of links account for most Unassigned traffic.
If the rows show '(not set)', the issue isn't UTMs but your tag setup — jump to the (not set) checklist below.
Wrong vs Right UTM Table
The rule: platform goes in utm_source, channel type in utm_medium, using mediums GA4 recognises. These mappings follow Google's default channel rules.
- Instagram story ad: medium=story ✗ → source=instagram, medium=paid_social ✓ (Paid Social)
- Instagram bio link: medium=bio ✗ → source=instagram, medium=social ✓ (Organic Social)
- Email newsletter: medium=newsletter ✗ → source=newsletter, medium=email ✓ (Email)
- WhatsApp share: source=campaign, medium=whatsapp ✗ → source=whatsapp, medium=social ✓ (Organic Social)
- SMS campaign: medium=text ✗ → source=sms, medium=sms ✓ (SMS)
- Influencer: medium=influencer ✗ → source=creator-name, medium=affiliate ✓ (Affiliates)
- QR code on a flyer: medium=offline ✗ → source=qr, medium=referral ✓ (Referral) — or a custom channel group
- Banner/display: medium=ads ✗ → medium=display or cpm ✓ (Display)
How to Fix Unassigned Traffic for Good
1) Standardise UTMs: use one source/medium list across the team, lowercase only, no accented characters. Our free UTM Builder shows which GA4 channel a link will land in and warns about Unassigned before you share it.
2) Create a custom channel group for your own channels: if you run offline, QR or event campaigns that Google's default list doesn't cover, go to Admin › Data display › Channel groups, create a new group and map those mediums to your own channel. Custom channel groups also apply to historical data.
3) Use auto-tagging for Google Ads: according to Google, when gclid and manual UTMs are both present, source/medium use the auto-tagged values, so adding UTMs to Google Ads links is unnecessary.
4) Make sure redirects keep your UTMs: link shorteners and http→https or www→apex redirects must not strip parameters. Open the link and check the utm_ parameters survive to the final URL.
Seeing (not set)? Tag Setup Checklist
(not set) sessions carry no source information at all, and UTM fixes won't help. Common causes:
- The gtag/Google tag is installed twice (e.g. hard-coded and via Google Tag Manager, or a plugin plus theme code).
- Event tags fire before the Google tag; in GTM make sure the Google tag uses the Initialization trigger.
- Measurement Protocol events (refunds, offline sales) don't reuse the original client_id and session_id.
- During a server-side migration some events go through the server container and others directly to GA4.
- Consent setup is broken and the share of denied sessions is high.
How Much Unassigned Traffic Is Normal?
You can't always reach zero: ad blockers, very short sessions and in-app browsers can leave a small share. What matters is that the share is small and explainable. If Unassigned grows month over month, or one source/medium row dominates, it's a naming error to fix. Add the diagnosis to your monthly routine and check the channel prediction before launching new campaign links.
Frequently Asked Questions
What does Unassigned mean in GA4?
How do I fix Unassigned traffic?
What's the difference between Unassigned and (not set)?
Why do WhatsApp and QR code visits show as Unassigned?
Do custom channel groups fix historical data?
Resources & Related Reading
Digital marketing specialist building websites, performance ad programs and B2B lead generation systems for B2B and e-commerce brands.
Connect on LinkedIn ↗Last updated: