GA4 Default Channel Grouping Explained — And How to Fix It
Understand how GA4 default channel grouping works, why sessions end up in Unassigned, and how to build custom channel groupings for your business.
"Unassigned" is the channel your marketing team ignores — and probably shouldn't. In most GA4 implementations, Unassigned represents 5-25% of traffic, representing sessions that couldn't be categorized because of broken UTMs, missing parameters, or channel rules that don't match your actual marketing mix.
This guide explains how GA4's default channel grouping works, why sessions fall through, and how to build custom groupings that actually reflect your marketing channels.
How Default Channel Grouping Evaluates Sessions
When a session starts, GA4 evaluates the traffic source parameters in priority order to assign it to a channel. The evaluation uses three pieces of data: - session_source (from utm_source or referrer) - session_medium (from utm_medium or automatically detected) - session_campaign_name (from utm_campaign)
GA4 runs through its channel rules from top to bottom and assigns the first match. If no rule matches, the session goes to Unassigned.
The rules are not fully documented by Google, but through testing, the core logic for the most common channels is:
Direct: source = "(direct)" AND medium = "(none)" OR "(not set)"
Paid Search: source matches a known search engine (google, bing, yahoo, baidu, etc.) AND medium matches the regex `^(.*cp.*|ppc|retargeting|paid.*)$`
Organic Search: source matches a known search engine AND medium = "organic" (or medium is not set and there's no utm_source)
Email: source OR medium matches `email|e-mail|e_mail|em` (case-insensitive)
Paid Social: source matches a social platform (facebook, instagram, twitter/x, linkedin, tiktok, etc.) AND medium matches paid patterns
Organic Social: source matches a social platform AND medium matches `social|social-media|sm|social_media|organic_social`
Referral: medium = "referral" OR medium = "app" OR medium = "link"
Affiliates: medium matches `affiliate|affiliates`
Display: medium matches `^(display|cpm|banner|rich_media|interstitial|cpc_display)$`
Why Sessions End Up in Unassigned
Sessions land in Unassigned when:
- No UTM parameters and no referrer — direct traffic that doesn't match the Direct definition (rare but happens with tracking blockers)
2. UTM medium doesn't match any channel rule — Using utm_medium=paid, utm_medium=newsletter, utm_medium=sponsored, or any medium not in the rules above
3. Source/medium combination not recognized — A custom platform used as utm_source that GA4 doesn't recognize as a search engine or social platform
4. Auto-tagged traffic missing gclid — If Google Ads auto-tagging is enabled but the gclid parameter is being stripped by your website (common with some redirect configurations)
5. Missing or corrupted UTMs — Spaces in UTM values, special characters that aren't URL-encoded, UTMs only on some URLs in a campaign
Diagnosing Your Unassigned Traffic
In GA4, create a free-form Exploration with these dimensions: - Session source - Session medium - Session default channel group
Filter to show only sessions where Session default channel group = "Unassigned".
The Session source/medium column will show exactly what's causing the misclassification. Common findings:
- newsletter / Email (capital E) → fix to newsletter / email
- tiktok / paid → fix to tiktok / paid-social or tiktok / cpm
- (direct) / (none) showing with high numbers → investigate dark social and UTM-less campaigns
- (not set) / (not set) → sessions starting from a page with no referrer information (app links, PDF links, desktop apps)
Building Custom Channel Groupings
GA4 allows you to create Custom Channel Groups that override the default grouping for your specific business. Go to Admin → Data Display → Channel Groups → Create new channel group.
When to Use Custom Channel Groupings
Scenario 1: You use a non-standard medium
Your email tool sends with utm_medium=edm (electronic direct mail). Default grouping puts these in Unassigned. Create a custom rule: medium exactly matches "edm" → channel = "Email".
Scenario 2: You have multiple paid search platforms You want to distinguish Google Ads from Bing Ads from Apple Search Ads in your channel reports. Create specific rules: source = "google" AND medium = "cpc" → "Google Paid Search", source = "bing" AND medium = "cpc" → "Bing Paid Search".
Scenario 3: You have affiliate partners as sources You track affiliate traffic with custom utm_source values (partner names) and utm_medium = "affiliate". Build custom rules to group these under a single "Affiliates" channel with subchannels by partner.
Scenario 4: Internal test traffic Add a rule at the top of your custom grouping: source contains "internal" OR source contains "test" → channel = "Internal". This keeps test traffic from polluting your reports.
Custom Channel Grouping Best Practices
- Place the most specific rules first (they're evaluated in order)
- The last rule should always be a catch-all that assigns your equivalent of "Other" to everything that doesn't match earlier rules
- Don't delete the default channel grouping — keep it alongside your custom one for comparison
- Custom groupings are retroactive in explorations but not in standard reports
The Impact of Clean Channel Grouping on Business Decisions
When 20% of your traffic is Unassigned, you don't know: - Whether your email campaigns are driving revenue or just visits - How paid social compares to organic social in revenue per session - Whether your affiliate program is profitable
Clean channel grouping isn't an analytics hygiene project — it's a prerequisite for making any channel investment decision with confidence. Fix your UTMs, build appropriate custom groupings, and suddenly your "marketing doesn't work" conversation becomes "paid social has a 3.2x higher revenue per session than display but we're spending 40% of budget on display."
Use our Attribution Confidence tool to get a scored assessment of your attribution health and specific recommendations for fixing your channel grouping. Run an attribution audit →
Check your GA4 implementation
Run a free AI-powered audit to see how your tracking stacks up.
Start Free Audit