GA4 (not set) Campaigns: The Four Real Causes
(not set) isn't (direct)/(none), and it isn't Unassigned. Only one of the three is a real failure. Google's four documented causes, and how to tell them apart.
Three empty values, and only one is a real failure
Open Traffic acquisition, look at the campaign column, and you'll usually find one of three things staring back. (not set). (direct) / (none). A channel called Unassigned. They look like the same problem wearing different clothes. They aren't close to the same problem.
| What you see | What it means | Actually broken? |
|---|---|---|
(not set) |
GA4 received no value for that dimension | Yes. Something didn't arrive |
(direct) / (none) |
Nothing to attribute, filed correctly | Mostly no |
| Unassigned | Source and medium arrived, no channel rule matched | No, but fix your medium |
Two of those rows already have homes. Unassigned is nearly always a utm_medium value GA4 doesn't recognise, which is the mapping table problem. The direct pile has six separate causes and deserves its own afternoon.
This is about the first row.
What (not set) actually means
Google's definition is blunt. It's "a placeholder name that Analytics uses when it hasn't received any information for a dimension."
Not couldn't classify it. Didn't receive it. That distinction is the entire diagnosis, because it means the fault sits upstream of GA4 every single time. Nothing you change inside the interface will fix a value that never showed up.
The tagging causes, which are boring and usually right
Two of the four causes Google documents come down to links that didn't carry what they should've.
First is partial tagging. Someone built a URL with utm_source and utm_medium, then stopped. GA4 records the source, shows (not set) for campaign, and honestly that's less an error than a gap you made yourself. Google's phrasing is "manually tagged destination URLs with incomplete or incorrect UTM parameters." Build links with a UTM builder rather than by hand and it mostly stops.
Second is Google Ads. Accounts not linked, or auto-tagging switched off, and the campaign dimension has nothing to populate from. (Auto-tagging and manual UTMs can run together perfectly well, which is the part people skip because they assume it's either-or.)
Fine. Now the one that wastes actual weeks.
Cause three: the session never started
If the campaign reads (not set) on traffic you know was tagged properly, stop auditing URLs. Go look at the tag.
GA4 attaches campaign data to the automatically collected session_start event. No session_start, no campaign attribution, and your URL can be flawless while this happens. Google names two ways it breaks: the event goes missing, or the Google tag's trigger isn't set to Initialization.
That second one is a Tag Manager default that quietly bites people. A config tag firing on All Pages instead of Initialization can end up firing after an event that needed it to have fired already, and that ordering failure surfaces as missing attribution rather than as anything resembling an error message. Google's tagging guidance says it outright: initialize the Google tag before calling an event method.
We watched a team burn most of a week auditing their UTM spreadsheet over a (not set) problem that turned out to be a trigger type. Check the tag first. Two minutes, costs nothing.
And then there's srsltid
Google appends srsltid to product listing URLs from Merchant Center. Per Google's own documentation, sessions carrying that parameter get filed as (not set) specifically when the referrer isn't google.com.
Sit with that condition for a second, because it tells you what's happening. A tagged URL arriving without a google.com referrer is usually a URL somebody copied and shared. So this is a link-sharing artifact rather than a tagging bug, which is why auditing your own links for it turns up nothing.
If you sell things online and a (not set) pile appeared with no change to how you tag, check whether those landing pages have srsltid in the query string. That one isn't your tagging and mostly isn't yours to fix.
What I'd do with it Monday morning
Sort by the (not set) row and ask four questions in order:
- Do the landing page URLs carry UTMs at all? Tagging problem.
- Is it Google Ads traffic? Linking and auto-tagging.
- Clean, tagged, non-ads traffic? It's the tag, not the URL.
- Ecommerce, with
srsltidin the URLs? Not your bug.
Most (not set) audits start in the wrong place, and I'd argue that's because tagging is the only cause you can see from a spreadsheet. The session-start failure is invisible from the URL side. It's also the one that convinces a disciplined team their naming conventions have failed when the conventions were fine the whole time.
If what you're looking at is a big mixed pile rather than one clean symptom, messy GA4 data is the cleanup order to work through once you know which of the four you've got.