Tracking accuracy

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):

ChannelMatches when
DirectSource is (direct) and medium is (not set) or (none)
EmailSource or medium matches email, e-mail, e_mail or e mail
Organic SocialSource is on Google's social list, or medium is social, social-network, social-media, sm, social network or social media
Paid SocialSource 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 SearchSource is on the search list and the medium is paid
Paid OtherThe medium is paid and the source is on no list
DisplayMedium is display, banner, expandable, interstitial or cpm
ReferralMedium is referral, app or link
SMSSource or medium is exactly sms
AffiliatesMedium is affiliate
AudioMedium is exactly audio
Mobile Push NotificationsMedium ends with push, or contains mobile or notification, or source is firebase
Organic VideoSource is on the video list, or medium contains video
Cross-networkCampaign 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 linkGA4 channelWhy
utm_source=newsletter&utm_medium=newsletterUnassignedNeither value contains "email"
utm_source=klaviyo&utm_medium=emailEmailMedium matches
utm_source=qr&utm_medium=qrUnassignedNo rule for qr
utm_source=print&utm_medium=flyerUnassignedNo rule for print
utm_source=podcast&utm_medium=podcastUnassignedOnly audio matches
utm_source=podcast&utm_medium=audioAudioMedium matches
utm_source=partner&utm_medium=cpcPaid OtherPaid medium, source on no list
utm_source=instagram&utm_medium=paid-socialPaid SocialSocial 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

  1. Open Reports, Acquisition, Traffic acquisition.
  2. Change the primary dimension to Session source / medium.
  3. Filter Session default channel group to exactly Unassigned.
  4. 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_id and session_id. A new session_id creates 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

Spotted something wrong or out of date? Email hello@sporetag.com and we will fix it.