How GA4 Channel Grouping Uses utm_medium (Complete Logic Breakdown)
You set utm_medium=paidsocial.
GA4 puts your traffic in "Paid Social" channel.
You set utm_medium=paid-social (with hyphen).
GA4 might put it in "Unassigned."
Why does one character change everything?
Because GA4's channel grouping uses strict regex pattern matching with zero tolerance for creative variations.
This is the complete breakdown of how GA4's Default Channel Grouping logic works—with every pattern, every priority rule, and every edge case.
🚨 Not sure what's breaking your tracking?
Run a free 60-second audit to check all 40+ ways UTM tracking can fail.
Scan Your Campaigns Free✓ No credit card ✓ See results instantly
What is Default Channel Grouping?
Default Channel Grouping is GA4's built-in system for automatically classifying traffic into predefined channels.
When a session starts, GA4 evaluates UTM parameters (and other signals like referrer) against a decision tree of rules to assign one channel label:
- Direct
- Organic Search
- Paid Search
- Organic Social
- Paid Social
- Affiliates
- Display
- Paid Shopping
- Paid Video
- Organic Video
- Audio
- SMS
- Referral
- Unassigned (catch-all when nothing matches)
This happens automatically. You don't control it. You can only influence it by using UTM parameters GA4 recognizes.
The Complete Decision Tree (in Priority Order)
GA4 evaluates rules in strict priority order. First match wins.
Priority 1: Direct Traffic
Rules:
- No UTM parameters
- No referrer (or referrer = same domain)
- No platform click IDs (gclid, fbclid, etc.)
Channel assigned: Direct
Example:
User types yoursite.com directly into browser
→ Channel: Direct
Priority 2: Paid Search
Rules (evaluated in this order):
Rule 2a: Google Ads auto-tagging
- Has
gclidparameter
Rule 2b: Manual UTM parameters
utm_sourcematches:(google|bing|yahoo|duckduckgo|baidu|yandex)- AND
utm_mediummatches:^(cpc|ppc|paidsearch)$
Channel assigned: Paid Search
Examples:
✅ Google Ads (auto-tagged)
yoursite.com?gclid=Cj0KCQ...
→ Channel: Paid Search
✅ Manual Google Ads (UTM tagged)
yoursite.com?utm_source=google&utm_medium=cpc&utm_campaign=brand
→ Channel: Paid Search
✅ Bing Ads
yoursite.com?utm_source=bing&utm_medium=ppc&utm_campaign=competitor
→ Channel: Paid Search
❌ Wrong utm_medium
yoursite.com?utm_source=google&utm_medium=paid-search&utm_campaign=brand
→ Channel: Unassigned (utm_medium doesn't match pattern)
utm_medium patterns that work:
cpc✅ppc✅paidsearch✅CPC❌ (case-sensitive)paid-search❌ (hyphen not in pattern)
Priority 3: Paid Social
Rules:
Rule 3a: Platform auto-tagging
- Has
fbclid(Facebook/Instagram) - OR has
li_fat_id(LinkedIn) - OR has
twclid(Twitter/X) - OR has
ttclid(TikTok)
Rule 3b: Manual UTM parameters
utm_sourcematches social platforms:(facebook|instagram|twitter|linkedin|tiktok|pinterest|reddit|youtube)- AND
utm_mediummatches:(paidsocial|paid-social|cpc|ppc|paid)
Channel assigned: Paid Social
Examples:
✅ Facebook Ads (auto-tagged)
yoursite.com?fbclid=IwAR3xK7...
→ Channel: Paid Social
✅ Manual Facebook Ads
yoursite.com?utm_source=facebook&utm_medium=paidsocial&utm_campaign=spring-sale
→ Channel: Paid Social
✅ LinkedIn Ads (with cpc)
yoursite.com?utm_source=linkedin&utm_medium=cpc&utm_campaign=lead-gen
→ Channel: Paid Social
⚠️ Hyphenated version (may not work consistently)
yoursite.com?utm_source=facebook&utm_medium=paid-social&utm_campaign=spring
→ Channel: Varies by GA4 version (use paidsocial instead)
❌ Wrong utm_medium
yoursite.com?utm_source=facebook&utm_medium=social&utm_campaign=spring
→ Channel: Organic Social (missing "paid" indicator)
utm_medium patterns that work for Paid Social:
paidsocial✅ (recommended)cpc✅ (when utm_source is social platform)ppc✅ (when utm_source is social platform)paid-social⚠️ (inconsistent—avoid)
Priority 4: Paid Shopping
Rules:
utm_campaignmatches:^(.*(([^a-df-z]|^)shop|shopping).*)$- AND
utm_mediummatches:^(.*cp.*|ppc|paid.*)$
Channel assigned: Paid Shopping
Examples:
✅ Google Shopping
yoursite.com?utm_source=google&utm_medium=cpc&utm_campaign=shopping-product-feed
→ Channel: Paid Shopping
✅ Facebook Catalog Ads
yoursite.com?utm_source=facebook&utm_medium=paidsocial&utm_campaign=shop-spring-collection
→ Channel: Paid Shopping
Note: This is lower priority than Paid Search/Paid Social, so if traffic matches those first, it goes there instead.
Priority 5: Paid Video
Rules:
utm_sourcematches:(youtube|vimeo)- AND
utm_mediummatches:(cpv|cpa|cpm|cpc|ppc)
Channel assigned: Paid Video
Examples:
✅ YouTube Ads (TrueView)
yoursite.com?utm_source=youtube&utm_medium=cpv&utm_campaign=product-demo
→ Channel: Paid Video
✅ YouTube Discovery Ads
yoursite.com?utm_source=youtube&utm_medium=cpc&utm_campaign=awareness
→ Channel: Paid Video
Priority 6: Display
Rules:
utm_mediummatches:^(display|banner|cpm)$
Channel assigned: Display
Examples:
✅ Display ads
yoursite.com?utm_source=google-display&utm_medium=display&utm_campaign=retargeting
→ Channel: Display
✅ Banner ads
yoursite.com?utm_source=ad-network&utm_medium=banner&utm_campaign=homepage
→ Channel: Display
✅ CPM campaigns
yoursite.com?utm_source=programmatic&utm_medium=cpm&utm_campaign=awareness
→ Channel: Display
❌ Plural doesn't work
yoursite.com?utm_source=ad-network&utm_medium=banners&utm_campaign=homepage
→ Channel: Unassigned
❌ Retargeting goes to "Paid Other"
yoursite.com?utm_source=google&utm_medium=retargeting&utm_campaign=cart-abandoners
→ Channel: Paid Other (not Display)
utm_medium patterns that work:
display✅banner✅ (singular only)cpm✅banners❌ (plural)retargeting❌ (goes to Paid Other)
Priority 7: Paid Other
Rules:
utm_mediummatches:^(cpv|cpa|cpp|content-text)$- OR
utm_mediummatches:^(.*cp.*|retargeting|paid.*)$
Channel assigned: Paid Other
Note: This is a catch-all for paid traffic that doesn't fit other paid channels.
Examples:
yoursite.com?utm_source=content-platform&utm_medium=cpa&utm_campaign=lead-gen
→ Channel: Paid Other
yoursite.com?utm_source=google&utm_medium=retargeting&utm_campaign=cart
→ Channel: Paid Other
yoursite.com?utm_source=partner&utm_medium=paid-content&utm_campaign=sponsored
→ Channel: Paid Other
Priority 8: Organic Search
Rules:
Rule 8a: Search engine referrer (no UTMs)
- Referrer from:
(google|bing|yahoo|duckduckgo|baidu|yandex|ecosia) - No utm_medium parameter (or utm_medium = "organic")
Rule 8b: Manual UTM parameters
utm_sourcematches search engines- AND
utm_mediummatches:^(organic|natural)$
Channel assigned: Organic Search
Examples:
✅ Google organic (no UTMs)
Referrer: google.com/search?q=...
→ Channel: Organic Search
✅ Manual organic tracking (usually unnecessary)
yoursite.com?utm_source=google&utm_medium=organic&utm_campaign=seo
→ Channel: Organic Search
❌ Don't manually tag organic search
This corrupts Google's automatic classification.
Priority 9: Organic Social
Rules:
Rule 9a: Social platform referrer (no UTMs)
- Referrer from:
(facebook|instagram|twitter|linkedin|pinterest|reddit|tiktok|youtube) - No utm_medium parameter (or utm_medium contains "social")
Rule 9b: Manual UTM parameters
utm_sourcematches social platforms- AND
utm_mediummatches:(social|organic-social|social-network|social-media)
Channel assigned: Organic Social
Examples:
✅ Facebook organic post (no UTMs)
Referrer: facebook.com
→ Channel: Organic Social
✅ Manual organic social tracking
yoursite.com?utm_source=twitter&utm_medium=social&utm_campaign=product-launch
→ Channel: Organic Social
❌ Using "paid" medium incorrectly
yoursite.com?utm_source=facebook&utm_medium=social&utm_campaign=ad
→ Channel: Organic Social (should be Paid Social with utm_medium=paidsocial)
Priority 10: Organic Video
Rules:
utm_sourcematches:(youtube|vimeo)- AND
utm_mediummatches:(organic|video)
Channel assigned: Organic Video
Examples:
✅ YouTube organic video description link
yoursite.com?utm_source=youtube&utm_medium=video&utm_campaign=tutorial
→ Channel: Organic Video
Priority 11: Email
Rules:
utm_mediummatches:^(email|e-mail)$
Channel assigned: Email
Examples:
✅ Email campaigns
yoursite.com?utm_source=mailchimp&utm_medium=email&utm_campaign=spring-newsletter
→ Channel: Email
✅ Hyphenated version
yoursite.com?utm_source=newsletter&utm_medium=e-mail&utm_campaign=weekly
→ Channel: Email
❌ Common mistakes
yoursite.com?utm_source=mailchimp&utm_medium=newsletter&utm_campaign=spring
→ Channel: Unassigned
yoursite.com?utm_source=mailchimp&utm_medium=Email&utm_campaign=spring
→ Channel: Unassigned (case-sensitive)
utm_medium patterns that work:
email✅e-mail✅newsletter❌Email❌ (case-sensitive)
Priority 12: Affiliates
Rules:
utm_mediummatches:^affiliate$
Channel assigned: Affiliates
Examples:
✅ Affiliate links
yoursite.com?utm_source=impact&utm_medium=affiliate&utm_campaign=bloggers
→ Channel: Affiliates
❌ Common mistakes
yoursite.com?utm_source=partner&utm_medium=affiliates&utm_campaign=q1
→ Channel: Unassigned (plural doesn't work)
yoursite.com?utm_source=influencer&utm_medium=partner&utm_campaign=collab
→ Channel: Unassigned ("partner" not recognized)
utm_medium patterns that work:
affiliate✅ (singular only)affiliates❌ (plural)partner❌
Priority 13: Audio
Rules:
utm_mediummatches:^audio$
Channel assigned: Audio
Examples:
✅ Podcast ads
yoursite.com?utm_source=spotify&utm_medium=audio&utm_campaign=podcast-sponsorship
→ Channel: Audio
Priority 14: SMS
Rules:
utm_mediummatches:^sms$
Channel assigned: SMS
Examples:
✅ SMS campaigns
yoursite.com?utm_source=twilio&utm_medium=sms&utm_campaign=flash-sale
→ Channel: SMS
❌ Case-sensitive
yoursite.com?utm_source=twilio&utm_medium=SMS&utm_campaign=flash
→ Channel: Unassigned
Priority 15: Referral
Rules:
- Has external referrer (not search/social)
- OR
utm_mediummatches:^referral$
Channel assigned: Referral
Examples:
✅ External site link (no UTMs)
Referrer: partnerblog.com
→ Channel: Referral
✅ Manual referral tracking
yoursite.com?utm_source=partner-blog&utm_medium=referral&utm_campaign=guest-post
→ Channel: Referral
Priority 16: Unassigned (Catch-All)
Rules:
- Doesn't match any of the above patterns
Channel assigned: Unassigned
Common causes:
- Non-standard utm_medium values (
newsletter,paid-social,partner) - Typos (
emai,socail,retargetting) - Case variations (
Email,PPC,DISPLAY) - Creative values (
email-promotional,spring-sale-email)
😰 Is this your only tracking issue?
This is just 1 of 40+ ways UTM tracking breaks. Most marketing teams have 8-12 critical issues they don't know about.
• 94% of sites have UTM errors
• Average: $8,400/month in wasted ad spend
• Fix time: 15 minutes with our report
✓ Connects directly to GA4 (read-only, secure)
✓ Scans 90 days of data in 2 minutes
✓ Prioritizes issues by revenue impact
✓ Shows exact sessions affected
Why utm_medium Is Case-Sensitive
GA4 uses regex pattern matching with case-sensitive rules.
Example pattern for Email:
^(email|e-mail)$This pattern matches:
email✅e-mail✅
This pattern does NOT match:
Email❌ (capital E)EMAIL❌ (all caps)eMail❌ (mixed case)
Every utm_medium pattern is case-sensitive and expects lowercase.
Why Hyphens and Underscores Matter
Exact match patterns require exact character matching.
Example: Affiliates channel
^affiliate$affiliate✅ (exact match)affiliates❌ (extra 's')affiliate-program❌ (extra text)aff❌ (abbreviated)
Example: Email channel
^(email|e-mail)$email✅e-mail✅ (hyphen allowed in this specific case)e_mail❌ (underscore not in pattern)email-newsletter❌ (extra text)
Real-World Troubleshooting Examples
Example 1: Email Traffic in "Unassigned"
Setup:
utm_source=mailchimp
utm_medium=newsletter
utm_campaign=spring-sale
Expected channel: Email Actual channel: Unassigned
Why? GA4's Email pattern is ^(email|e-mail)$. "newsletter" doesn't match.
Fix: Change utm_medium=newsletter to utm_medium=email
Example 2: Paid Social in "Organic Social"
Setup:
utm_source=facebook
utm_medium=social
utm_campaign=spring-ad
Expected channel: Paid Social Actual channel: Organic Social
Why? Paid Social requires utm_medium to indicate "paid" (like paidsocial, cpc, ppc). Plain social matches Organic Social pattern.
Fix: Change utm_medium=social to utm_medium=paidsocial
Example 3: Display Ads in "Unassigned"
Setup:
utm_source=google-display
utm_medium=retargeting
utm_campaign=cart-abandoners
Expected channel: Display Actual channel: Paid Other (not Unassigned, but not Display either)
Why? Display pattern is ^(display|banner|cpm)$. "retargeting" matches a different pattern (Paid Other).
Fix: Change utm_medium=retargeting to utm_medium=display
✅ Fixed this issue? Great! Now check the other 39...
You just fixed one tracking issue. But are your Google Ads doubling sessions? Is Facebook attribution broken? Are internal links overwriting campaigns?
• Connects to GA4 (read-only, OAuth secured)
• Scans 90 days of traffic in 2 minutes
• Prioritizes by revenue impact
• Free forever for monthly audits
Join 2,847 marketers fixing their tracking daily
How to Design UTM Parameters for GA4
Rule 1: utm_medium = Channel Type (GA4-Recognized)
Always use one of these GA4-recognized values:
email- Email campaignscpc/ppc- Paid searchpaidsocial- Paid social adssocial- Organic social postsdisplay- Display adsaffiliate- Affiliate linkssms- SMS campaigns
utm_medium should be stable, rarely changing, and always GA4-compatible.
Rule 2: utm_campaign = Campaign Name (Flexible)
Put all campaign-specific details in utm_campaign:
spring-sale-2025black-friday-emailproduct-launch-videoretargeting-cart-abandoners
utm_campaign can be creative, descriptive, and change frequently.
Rule 3: utm_source = Platform/Vendor
Identify the specific platform or vendor:
mailchimp,sendgrid,hubspot(email)facebook,linkedin,tiktok(social)google,bing(search)impact,shareasale,cj(affiliate)
Rule 4: utm_content = Variant/Placement (Optional)
Track specific ad variants or placements:
hero-bannervssidebar-bannertext-linkvsimage-advariant-avsvariant-b
FAQ
Can I customize GA4's channel grouping rules?
You can create custom channel groups in GA4 (Admin → Data Display → Channel Groups), but:
- They only work in Explorations (not standard reports)
- Must be manually created for each GA4 property
- Don't transfer to Looker Studio or BigQuery
It's better to use GA4-recognized utm_medium values than fight the default grouping.
What happens if I have both auto-tagging AND UTM parameters?
GA4 prioritizes auto-tagging (gclid, fbclid, etc.) over manual UTM parameters. This often creates double-session tracking. Use one or the other, never both.
Does utm_source affect channel grouping?
Yes, for some channels. Paid Social, Organic Social, Paid Search, Organic Search, and Video channels check both utm_source and utm_medium. Other channels (Email, Affiliates, SMS) only check utm_medium.
Why does my traffic sometimes go to "Paid Other" instead of the channel I expect?
"Paid Other" is a catch-all for paid traffic patterns that don't match specific paid channels. Common causes:
- Using
utm_medium=retargeting(goes to Paid Other, not Display) - Using
utm_medium=cpaorutm_medium=cpp - Using
utm_medium=content-text
Can I test which channel my UTM parameters will create?
Yes. Use GA4 Realtime:
- Create test link with UTM parameters
- Click it in incognito browser
- GA4 → Realtime → Wait 30-60 seconds
- Check "Traffic acquisition" → Session default channel group
How often do GA4's channel grouping rules change?
Rarely. The Default Channel Grouping rules have been stable since GA4 launched in 2020. Google occasionally refines patterns but doesn't announce changes. Stick to documented utm_medium values to ensure long-term compatibility.