# 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.

Source: https://datacenter.so/guides/ga4-unassigned-traffic
By the Datacenter team. Updated October 23, 2026.

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](https://support.google.com/analytics/answer/9756891)). 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](https://support.google.com/analytics/answer/9756891)):

| Channel | Matches when |
|---|---|
| Direct | Source is `(direct)` and medium is `(not set)` or `(none)` |
| Email | 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` | 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](https://datacenter.so/guides/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)](https://datacenter.so/guides/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](https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events)), 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](https://datacenter.so/guides/ga4-not-set) 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](https://support.google.com/analytics/answer/13051316)).

**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 Datacenter fits

Datacenter 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](https://support.google.com/analytics/answer/9756891), [Custom channel groups](https://support.google.com/analytics/answer/13051316). Checked October 2026.
- Google for Developers: [Send Measurement Protocol events](https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events). Checked October 2026.

## Where Datacenter fits

Datacenter reports the source and UTM values a visit carried, by name, with no channel rules to fall through, and its link builder presets keep every link on one lowercase scheme. More: https://datacenter.so/docs/utm-presets
