Unassigned traffic in GA4: causes and fixes
GA4 labels a session Unassigned when its source and medium match no channel rule. The rules, the tag values that fall through, and how to fix a spike.
On this page
GA4 puts a session in the Unassigned channel when its source, medium and campaign match none of the rules in the default channel group; Google defines Unassigned as "the value Analytics uses when there are no other channel rules that match the event data" (Google). Most Unassigned traffic comes from UTM values GA4 does not recognize, such as utm_medium=newsletter or utm_medium=qr, and the fix is to change the tags or add a custom channel group.
The rest comes from events that reach GA4 without a session's source attached. This guide shows how to tell which you have, and how to fix each.
How GA4 assigns a channel
GA4 reads each session's source, medium and campaign and walks down its channel rules. The first match wins. The rules that catch most manual tags (Google):
| Channel | Matches when |
|---|---|
| Direct | Source is (direct) and medium is (not set) or (none) |
Source or medium matches email, e-mail, e_mail or e mail | |
| Organic Social | Source is on Google's social list, or medium is social, social-network, social-media, sm, social network or social media |
| Paid Social | Source is on the social list and the medium is paid: it contains cp (as in cpc), starts with paid, or is ppc or retargeting |
| Paid Search | Source is on the search list and the medium is paid |
| Paid Other | The medium is paid and the source is on no list |
| Display | Medium is display, banner, expandable, interstitial or cpm |
| Referral | Medium is referral, app or link |
| SMS | Source or medium is exactly sms |
| Affiliates | Medium is affiliate |
| Audio | Medium is exactly audio |
| Mobile Push Notifications | Medium ends with push, or contains mobile or notification, or source is firebase |
| Organic Video | Source is on the video list, or medium contains video |
| Cross-network | Campaign name contains cross-network |
Anything that matches none of these is Unassigned. The source lists (search, social, video, shopping) are in a spreadsheet linked from the same Google page.
Tag values that fall through
| Tags on the link | GA4 channel | Why |
|---|---|---|
utm_source=newsletter&utm_medium=newsletter | Unassigned | Neither value contains "email" |
utm_source=klaviyo&utm_medium=email | Medium matches | |
utm_source=qr&utm_medium=qr | Unassigned | No rule for qr |
utm_source=print&utm_medium=flyer | Unassigned | No rule for print |
utm_source=podcast&utm_medium=podcast | Unassigned | Only audio matches |
utm_source=podcast&utm_medium=audio | Audio | Medium matches |
utm_source=partner&utm_medium=cpc | Paid Other | Paid medium, source on no list |
utm_source=instagram&utm_medium=paid-social | Paid Social | Social source and a medium starting with "paid" |
The lesson: utm_medium decides the channel. Pick mediums from Google's list unless you have a reason not to. See UTM parameters for a full scheme.
Find what is Unassigned
- Open Reports, Acquisition, Traffic acquisition.
- Change the primary dimension to Session source / medium.
- Filter Session default channel group to exactly
Unassigned. - Sort by sessions.
Each row names its cause:
- A real source with an odd medium (
mailchimp / newsletter,qr / qr): a tagging fix. (not set) / (not set)or a blank source: the session had no source when the event arrived. See the next section and GA4 (not set).- A source you send from your server, or your payment or booking domain: events sent without a session. See below.
Events that arrive without a session
GA4 ties an event to a session's source through the session's id. Two common setups break that:
- Measurement Protocol (server) events. Events sent from your server join the browser's session only when they carry its
client_idandsession_id. A newsession_idcreates a new session (Google), and that session has no source. Google also says events meant to join a browser session should arrive within 48 hours, or attribution may not work as expected. - Events that fire before the Google tag. In Tag Manager, an event tag that fires before the Google tag sends data GA4 cannot place in a session. Fire the Google tag on Initialization - All Pages. The (not set) guide covers the steps.
Fix it
Fix the tags, going forward. Change mediums to values GA4 knows: email not newsletter, audio for podcasts, sms for texts. Write the scheme down and use a link builder with presets, so nobody types tags by hand.
Add a custom channel group, for what you cannot retag. Printed QR codes and old emails keep their tags forever. A custom channel group can add a "QR and print" channel that matches qr and print. A standard property can have 2 custom groups, they apply to past data, and traffic goes to the first channel whose rule it matches, so put specific channels above broad ones (Google).
Fix server events. Pass the browser's client_id and session_id to your server when the visitor checks out or signs up, and send them back with the event.
Where Sporetag fits
Sporetag has no channel rules: reports show the source and UTM values each visit carried, by name, so nothing falls into a bucket like Unassigned. Its link builder presets keep links on one lowercase scheme that GA4 also reads well (email, sms, social, paid-social, cpc), with two exceptions to know if you also run GA4: the QR code and print presets use the mediums qr and print, which GA4 puts in Unassigned. Add a custom channel group for them, as above.
Common questions
What does Unassigned mean in GA4?
The session's source, medium and campaign matched none of GA4's channel rules. It is not lost or broken traffic; GA4 just could not name its channel.
Why did my Unassigned traffic suddenly spike?
Usually a new campaign or email went out with mediums GA4 does not recognize, or a new server-side or Tag Manager setup started sending events without a session. Break Unassigned down by session source / medium for the day of the spike.
Is Unassigned the same as Direct?
No. Direct is traffic with no source at all. Unassigned has a source or medium, just not one any channel rule matches.
Can I move old Unassigned traffic into the right channel?
Yes, with a custom channel group. It applies to past data, so a rule that matches qr re-labels old QR code sessions too.
Sources
- Google Analytics Help: Default channel group, Custom channel groups. Checked October 2026.
- Google for Developers: Send Measurement Protocol events. Checked October 2026.
Spotted something wrong or out of date? Email hello@sporetag.com and we will fix it.