How GA4 Channel Grouping Uses utm_medium (Complete Logic Breakdown)

UTMGuard Team
9 min readtechnical-guides

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
  • Email
  • 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

Rules (evaluated in this order):

Rule 2a: Google Ads auto-tagging

  • Has gclid parameter

Rule 2b: Manual UTM parameters

  • utm_source matches: (google|bing|yahoo|duckduckgo|baidu|yandex)
  • AND
  • utm_medium matches: ^(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_source matches social platforms: (facebook|instagram|twitter|linkedin|tiktok|pinterest|reddit|youtube)
  • AND
  • utm_medium matches: (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_campaign matches: ^(.*(([^a-df-z]|^)shop|shopping).*)$
  • AND
  • utm_medium matches: ^(.*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_source matches: (youtube|vimeo)
  • AND
  • utm_medium matches: (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_medium matches: ^(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_medium matches: ^(cpv|cpa|cpp|content-text)$
  • OR
  • utm_medium matches: ^(.*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

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_source matches search engines
  • AND
  • utm_medium matches: ^(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_source matches social platforms
  • AND
  • utm_medium matches: (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_source matches: (youtube|vimeo)
  • AND
  • utm_medium matches: (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_medium matches: ^(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_medium matches: ^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_medium matches: ^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_medium matches: ^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_medium matches: ^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

Get Your Free Audit Report

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

Run Complete UTM Audit (Free Forever)

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 campaigns
  • cpc / ppc - Paid search
  • paidsocial - Paid social ads
  • social - Organic social posts
  • display - Display ads
  • affiliate - Affiliate links
  • sms - 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-2025
  • black-friday-email
  • product-launch-video
  • retargeting-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-banner vs sidebar-banner
  • text-link vs image-ad
  • variant-a vs variant-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=cpa or utm_medium=cpp
  • Using utm_medium=content-text

Can I test which channel my UTM parameters will create?

Yes. Use GA4 Realtime:

  1. Create test link with UTM parameters
  2. Click it in incognito browser
  3. GA4 → Realtime → Wait 30-60 seconds
  4. 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.


Related: GA4 Medium Unrecognized Rule Documentation