“Unassigned” is one of the most frustrating things to see in a GA4 channel grouping report. Unlike “(not set)” — which indicates missing data — “Unassigned” means GA4 received session data but couldn’t match it to any of its default channel grouping rules.
The good news: it’s almost always fixable once you know which of the four root causes is responsible. This guide walks through each one.
How GA4 Default Channel Groupings Work
GA4 classifies traffic into channels based on the session_source, session_medium, and session_campaign parameters attached to each session. These channel rules are applied automatically:
| Channel | Rule |
|---|---|
| Organic Search | medium = “organic” |
| Paid Search | medium = “cpc” or “ppc”; ad system = Google Ads |
| medium contains “email” or “e-mail” | |
| Direct | source = “(direct)”, medium = “(none)“ |
| Organic Social | source matches social network list, medium = “referral” or blank |
| Paid Social | medium = “paid_social” or “cpc” + source is social network |
| Referral | medium = “referral” |
| Display | medium = “display” or “banner” or “expandable” |
“Unassigned” appears when none of these rules match. GA4 received a session with source/medium data, but the data doesn’t fit any channel definition.
Official reference: GA4 default channel groupings
Cause 1: UTM Parameters Don’t Match Channel Rules
The most common cause. Your links use UTM parameters, but the medium value doesn’t match what GA4 expects.
Examples of medium values that cause Unassigned:
utm_medium=newsletter→ should beemailutm_medium=social-organic→ should beorganic_socialor no mediumutm_medium=sponsored→ should becpcorpaid_socialutm_medium=partner→ no matching channel ruleutm_medium=EDM→ not recognised (should beemail)
How to diagnose: GA4 → Reports → Acquisition → Traffic Acquisition → look for “Unassigned” rows → click through to see the source/medium breakdown.
Or in BigQuery:
SELECT
traffic_source.source,
traffic_source.medium,
COUNT(*) AS sessions
FROM `project.analytics_XXXXXXXXXX.events_*`
WHERE
event_name = 'session_start'
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
GROUP BY 1, 2
HAVING sessions > 10
ORDER BY sessions DESC;
Look for medium values that don’t appear in GA4’s channel grouping rules table.
Fix: Standardise your UTM medium values to match GA4’s expectations:
| What you might use | What GA4 expects |
|---|---|
newsletter, edm, blast | email |
social, social-media | Use source = social network name, medium = social (for organic social) |
partner, affiliate-link | affiliate |
banner, display-ad | display |
sponsored-content | cpc (if paid) |
Build a UTM parameter guide for your team and enforce it. One inconsistent campaign link can send a whole campaign’s traffic to Unassigned.
Cause 2: Auto-Tagged Google Ads Not Linked to GA4
If you run Google Ads with auto-tagging enabled (the default), Google Ads appends a gclid parameter to your ad destination URLs. GA4 uses this gclid to classify sessions as Paid Search, Display, or Demand Gen — but only if your Google Ads account is linked to GA4.
Without the link, GA4 sees the gclid parameter but can’t decode what it means. The session shows as Unassigned instead of Paid Search or Display.
How to diagnose:
In your GA4 traffic report, filter for Unassigned sessions. If the session source contains google and there’s a gclid in the page URL for those sessions, this is your cause.
In BigQuery:
SELECT
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') AS page_url,
traffic_source.source,
traffic_source.medium,
COUNT(*) AS sessions
FROM `project.analytics_XXXXXXXXXX.events_*`
WHERE
event_name = 'session_start'
AND traffic_source.medium IS NULL
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY))
GROUP BY 1, 2, 3
HAVING sessions > 5
If page_url contains gclid= for sessions with NULL medium, the Google Ads link is missing or broken.
Fix:
- GA4 Admin → Product Links → Google Ads Links
- Click Link → select your Google Ads account → confirm
- Allow 24–48 hours for historical data to be re-processed (new sessions only — historical Unassigned data won’t be reclassified)
Cause 3: Traffic from Referral Sources Not Classified as Social
GA4 has a built-in list of domains it recognises as social networks (Facebook, Instagram, Twitter/X, LinkedIn, Pinterest, TikTok, etc.). Traffic from these domains with medium = “referral” is classified as Organic Social.
But the list isn’t exhaustive. If you drive traffic from a platform GA4 doesn’t recognise as social — a newer social platform, a forum, a community site — it arrives as “Referral” not Organic Social. That’s actually correct behaviour, but if you want these reclassified, you need custom channel groupings.
Less commonly: If a social platform’s traffic arrives with a medium that doesn’t match GA4’s social rules, it lands in Unassigned.
Fix: Create a Custom Channel Grouping in GA4:
- GA4 Admin → Channel Groups → Create new channel group
- Add a channel definition for the platform:
- Channel name: e.g., “Reddit”
- Condition:
Source exactly matches reddit.com
- Save and apply to your reports
Custom channel groupings apply going forward — they don’t reclassify historical data.
Cause 4: Internal Traffic Hitting Production Analytics
If your team, developers, or automated scripts access your production site without being filtered from GA4, their sessions can generate Unassigned traffic — particularly if they’re using direct URL access with unusual parameters, API-driven navigation, or tools that don’t pass standard referrer data.
How to diagnose: Look at the time pattern of Unassigned sessions. If they cluster during business hours, align with your team’s working hours, or spike after deployments — internal traffic is likely contributing.
Fix:
- GA4 Admin → Data Streams → Configure tag settings → Define internal traffic
- Add your office IP address ranges
- GA4 Admin → Data Filters → create an “Internal Traffic” filter with Filter type: Exclude and activate it
This removes internal sessions from all GA4 reports going forward.
Cause 5: Medium Values from Email Marketing Platforms
Many email marketing platforms (Klaviyo, Mailchimp, Campaign Monitor, HubSpot) auto-append UTM parameters to links, but use their own default medium values:
| Platform | Default medium (if not customised) |
|---|---|
| Klaviyo | flow or campaign (not email) |
| HubSpot | email (correct) or custom |
| Mailchimp | email (usually correct) |
| Campaign Monitor | email (usually correct) |
| ActiveCampaign | Can be email or custom |
If Klaviyo sends utm_medium=flow, those sessions appear as Unassigned (no GA4 channel rule matches flow).
Fix:
In Klaviyo → Account → Settings → UTM Tracking → customise the default UTM parameters to use utm_medium=email for all flows and campaigns.
Or, add a custom channel grouping rule that maps medium = "flow" to your Email channel.
How Much Unassigned Is Acceptable?
A small percentage of Unassigned is normal:
- 0–2%: Expected — edge cases from automated tools, unusual browsers, internal testing
- 2–5%: Investigate — likely one UTM inconsistency or a missing Google Ads link
- 5%+: Significant problem — systematic UTM issues or a missing platform link
Creating a UTM Governance Document
The most impactful long-term fix for Unassigned traffic is standardising how your team creates UTM-tagged links. A simple reference document circulated across marketing, content, and dev teams prevents most future Unassigned issues:
APPROVED UTM MEDIUM VALUES:
- email (for all email campaigns and flows)
- cpc (for all paid search and paid social)
- display (for display/banner advertising)
- affiliate (for partner/affiliate links)
- organic_social (for manually tagged social posts)
- referral (for links on other websites)
DO NOT USE:
- newsletter, edm, blast (use: email)
- social, social-media (use: organic_social)
- paid (use: cpc or display)
- sponsored (use: cpc)
- partner (use: affiliate)
Keeping this updated and accessible prevents Unassigned traffic from accumulating as your team uses new channels.
If you’re seeing persistent Unassigned traffic and can’t pinpoint the cause, our team does GA4 tracking audits that identify and fix channel attribution gaps. Book a free consultation.