šŸ”“CriticalImpact: 100% of traffic becomes Unassigned channel - more critical than general case inconsistency
šŸ“ŠCategory: Data Consistency

What This Rule Detects

GA4 uses exact lowercase regex pattern matching on utm_medium to automatically classify traffic into Default Channel Groups. When utm_medium contains ANY uppercase letters (CPC, Cpc, Email, SOCIAL), GA4's pattern matching fails completely, resulting in 100% "Unassigned" channel classification. This is MORE CRITICAL than general uppercase issues because it directly breaks GA4's core channel grouping functionality.

šŸ” Want to scan for this issue automatically?

UTMGuard checks for this and 39 other validation rules in 60 seconds.

Try Free Audit

Why It Matters

Business Impact:

  • 100% channel classification failure - All traffic with uppercase medium becomes Unassigned
  • Channel reports useless - Cannot compare Paid Search, Email, Social performance
  • Executive dashboards broken - Channel ROI reports show incomplete data
  • Budget allocation impossible - No channel performance data for decision-making

Technical Impact:

  • GA4 channel grouping regex patterns are case-sensitive and require lowercase
  • CPC does NOT match pattern ^(.*cp.*|ppc|paidsearch)$ - fails pattern match
  • cpc DOES match pattern - successful classification
  • One uppercase letter destroys 100% of channel classification for that traffic

Real Example:

  • Campaign: Google Ads with utm_medium=CPC (uppercase)
  • Sessions: 10,000 clicks, $20,000 ad spend
  • GA4 Result: 10,000 sessions in "Unassigned" channel (0 in Paid Search)
  • Impact: Paid Search channel shows $0 spend, 0 sessions despite active campaigns
  • Fix: Change to utm_medium=cpc → All 10,000 sessions correctly classified as Paid Search

This is MORE critical than utm_source or utm_campaign uppercase because:

  • utm_medium directly controls channel grouping
  • utm_source/campaign uppercase only causes data fragmentation
  • utm_medium uppercase causes complete channel classification failure

Common Scenarios

Scenario 1: Capitalized utm_medium=Cpc or CPC

Marketing platforms auto-capitalizing medium values:

āŒ?utm_source=google&utm_medium=CPC&utm_campaign=shoes
āœ…?utm_source=google&utm_medium=cpc&utm_campaign=shoes

Scenario 2: Title Case utm_medium=Email

Email platforms using title case for medium:

āŒ?utm_source=mailchimp&utm_medium=Email&utm_campaign=newsletter
āœ…?utm_source=mailchimp&utm_medium=email&utm_campaign=newsletter

Scenario 3: All Caps utm_medium=SOCIAL

Social scheduling tools using uppercase:

āŒ?utm_source=facebook&utm_medium=SOCIAL&utm_campaign=brand-awareness
āœ…?utm_source=facebook&utm_medium=social&utm_campaign=brand-awareness

😰 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

How to Fix

Step 1: Understand GA4 Channel Grouping Regex Patterns

GA4 Default Channel Grouping uses CASE-SENSITIVE lowercase patterns:

Paid Search Channel:

  • āœ… Matches: cpc, ppc, paidsearch
  • āœ… Pattern: ^(.*cp.*|ppc|paidsearch)$
  • āŒ Does NOT match: CPC, Cpc, PPC, Paidsearch

Email Channel:

  • āœ… Matches: email
  • āœ… Pattern: ^(email)$
  • āŒ Does NOT match: Email, EMAIL, E-mail

Organic Social Channel:

  • āœ… Matches: social, social-network, social-media, sm
  • āœ… Pattern: ^(social|social-network|social-media|sm|social network|social media)$
  • āŒ Does NOT match: Social, SOCIAL, Social-Media

Display Channel:

  • āœ… Matches: display, cpm, banner
  • āœ… Pattern: ^(display|cpm|banner)$
  • āŒ Does NOT match: Display, DISPLAY, Banner

Referral Channel:

  • āœ… Matches: referral
  • āœ… Pattern: ^(referral)$
  • āŒ Does NOT match: Referral, REFERRAL

Key Insight: A SINGLE uppercase letter breaks pattern matching completely.

Step 2: Convert All utm_medium Values to Lowercase

Paid Search Campaigns:

āŒ WRONG: utm_medium=CPC, utm_medium=Cpc, utm_medium=PPC
āœ… CORRECT: utm_medium=cpc

Email Campaigns:

āŒ WRONG: utm_medium=Email, utm_medium=EMAIL, utm_medium=E-mail
āœ… CORRECT: utm_medium=email

Social Media Campaigns:

āŒ WRONG: utm_medium=Social, utm_medium=SOCIAL, utm_medium=Social-Media
āœ… CORRECT: utm_medium=social

Display Campaigns:

āŒ WRONG: utm_medium=Display, utm_medium=DISPLAY, utm_medium=Banner
āœ… CORRECT: utm_medium=display

Referral Campaigns:

āŒ WRONG: utm_medium=Referral, utm_medium=REFERRAL
āœ… CORRECT: utm_medium=referral

Step 3: Update Campaign Sources

Google Ads:

  1. Go to Campaign Settings → Tracking Template or Final URL
  2. Change utm_medium=CPC or utm_medium=Cpc
  3. To: utm_medium=cpc (all lowercase)
  4. Apply to all active campaigns

Facebook Ads:

  1. Go to Ads Manager → URL Parameters
  2. Change utm_medium=Social or utm_medium=CPC
  3. To: utm_medium=cpc (for paid) or utm_medium=social (for organic)
  4. Apply to all ad sets

Email Marketing Platforms:

  1. Check platform URL builder settings (Mailchimp, Constant Contact, etc.)
  2. Change utm_medium=Email or utm_medium=EMAIL
  3. To: utm_medium=email (all lowercase)
  4. Update templates and default settings

Social Scheduling Tools:

  1. Access UTM template settings
  2. Change utm_medium=Social or utm_medium=SOCIAL
  3. To: utm_medium=social (all lowercase)
  4. Save as default for all future posts

Display Ad Networks:

  1. Update tracking templates
  2. Change utm_medium=Display or utm_medium=DISPLAY
  3. To: utm_medium=display (all lowercase)
  4. Apply to all campaigns and creatives

Step 4: Implement Lowercase Validation

URL Builder Tools:

// Add validation to ensure lowercase medium
function buildCampaignUrl(params) {
  // Force utm_medium to lowercase
  if (params.utm_medium) {
    params.utm_medium = params.utm_medium.toLowerCase();
  }
 
  // Build URL with validated parameters
  return constructUrl(params);
}

Team Process:

  1. Document requirement: utm_medium MUST be lowercase
  2. Add validation to URL generation scripts
  3. Use Google Campaign URL Builder (automatically lowercases)
  4. QA checklist: Verify utm_medium is lowercase before launching

Step 5: Verify Channel Classification

Test in GA4 Real-Time:

  1. Click a test link with lowercase utm_medium
  2. Open GA4 → Reports → Real-time
  3. Check "Traffic by source and medium"
  4. Verify traffic appears in correct channel (not Unassigned)

Monitor Channel Reports:

  1. GA4 → Reports → Acquisition → Traffic acquisition
  2. Check "Unassigned" channel volume
  3. After fixing: Should see significant drop in Unassigned
  4. Sessions should move to proper channels (Paid Search, Email, Social, etc.)

Before vs After Example:

BEFORE (uppercase medium):
  - Paid Search: 0 sessions
  - Unassigned: 10,000 sessions (all your paid ads!)

AFTER (lowercase medium):
  - Paid Search: 10,000 sessions āœ…
  - Unassigned: 0 sessions āœ…

Examples

āŒ Incorrect Examples

?utm_source=google&utm_medium=CPC&utm_campaign=shoes
Problem: CPC (uppercase) doesn't match GA4 pattern ^(.*cp.*|ppc|paidsearch)$
Result: 100% Unassigned channel
Impact: Paid Search channel shows 0 sessions despite active campaigns

?utm_source=mailchimp&utm_medium=Email&utm_campaign=newsletter
Problem: Email (title case) doesn't match GA4 pattern ^(email)$
Result: 100% Unassigned channel
Impact: Email channel shows 0 sessions despite active email campaigns

?utm_source=facebook&utm_medium=Social&utm_campaign=brand
Problem: Social (title case) doesn't match GA4 pattern ^(social|...)$
Result: 100% Unassigned channel
Impact: Organic Social channel shows 0 sessions

āœ… Correct Examples

?utm_source=google&utm_medium=cpc&utm_campaign=shoes
Result: Matched GA4 pattern - classified as Paid Search channel āœ…
Channel: Paid Search (correct classification)
Tracking: SUCCESS - all sessions properly attributed

?utm_source=mailchimp&utm_medium=email&utm_campaign=newsletter
Result: Matched GA4 pattern - classified as Email channel āœ…
Channel: Email (correct classification)
Tracking: SUCCESS - email performance measurable

?utm_source=facebook&utm_medium=social&utm_campaign=brand
Result: Matched GA4 pattern - classified as Organic Social channel āœ…
Channel: Organic Social (correct classification)
Tracking: SUCCESS - social traffic properly grouped

GA4 Impact Analysis

Channel Grouping:

  • Uppercase medium → 100% Unassigned channel classification
  • Lowercase medium → Proper channel classification (Paid Search, Email, Social, etc.)
  • One character difference (C vs c) determines success vs complete failure

Default Channel Group Reports:

  • Acquisition Overview: Unassigned traffic skews channel distribution visualization
  • Traffic Acquisition: Cannot compare channel performance when traffic is Unassigned
  • User Acquisition: New user sources unclear when channel is missing

Attribution Models:

  • First-click attribution: Cannot attribute to channel, only to source/medium
  • Last-click attribution: Channel-based attribution impossible for Unassigned traffic
  • Multi-touch attribution: Channel touchpoints missing from customer journey

Conversion Reports:

  • Conversions by channel: Unassigned traffic excluded from channel-level ROI
  • E-commerce by channel: Revenue not attributed to proper marketing channels
  • Goal completions: Cannot measure channel effectiveness for Unassigned traffic

Historical Data:

  • Past sessions with uppercase medium: Permanently Unassigned
  • Cannot retroactively fix historical data
  • Year-over-year comparison broken if uppercase used in past

Detection in UTMGuard

UTMGuard automatically detects uppercase utm_medium values by:

  1. Case Analysis - Scans all utm_medium values for uppercase characters
  2. Pattern Matching - Tests against GA4 regex patterns to predict classification
  3. Channel Impact - Calculates sessions affected by Unassigned classification
  4. Revenue Impact - Measures revenue attributed to Unassigned channel
  5. Priority Ranking - Sorts by traffic volume to fix highest-impact issues first

Audit Report Shows:

Issue: utm_medium Contains Uppercase Letters
Severity: CRITICAL - Breaks GA4 channel grouping

Affected Traffic:
  utm_medium=CPC: 8,500 sessions, $35,200 revenue
  utm_medium=Email: 2,300 sessions, $8,900 revenue
  utm_medium=Social: 1,200 sessions, $3,100 revenue

Total Impact:
  12,000 sessions in Unassigned channel (should be in proper channels)
  $47,200 revenue with no channel attribution

Recommended Fix:
  Change all utm_medium values to lowercase:
  - CPC → cpc (Paid Search channel)
  - Email → email (Email channel)
  - Social → social (Organic Social channel)

Expected Result:
  12,000 sessions move from Unassigned to proper channels
  Full channel attribution restored
  Channel comparison reports functional again

Frequently Asked Questions

Q: Does utm_source also need to be lowercase?

A: Lowercase is recommended for utm_source to avoid data fragmentation, but it doesn't break channel grouping. utm_medium MUST be lowercase because it's used for pattern matching. utm_source case creates duplicate entries but doesn't break classification.

Q: What about utm_medium=cpC or cPc (mixed case)?

A: Any uppercase character breaks pattern matching. cpC, cPc, CPc all fail to match the lowercase pattern ^(.*cp.*|ppc|paidsearch)$. Only 100% lowercase works.

Q: Can I use custom channel grouping with uppercase medium?

A: Yes, but you'd need to create case-insensitive regex patterns for each channel. This is complex, requires ongoing maintenance, and doesn't apply to historical data. Much easier to use lowercase medium values.

Q: Will Google Campaign URL Builder prevent this?

A: Google's URL Builder (ga-dev-tools.google/campaign-url-builder) automatically lowercases utm_medium, which prevents this issue. Using the official builder is recommended.

Q: My ad platform auto-capitalizes utm_medium. What do I do?

A: Override the platform's default. Most platforms allow custom URL parameters. Manually set utm_medium=cpc (lowercase) in the tracking template. If platform forces uppercase, contact support or use different parameter field.

Q: Can I use UPPER CASE for emphasis in reports?

A: No. GA4 uses the exact value as provided in URLs. utm_medium=CPC shows as "CPC" in raw data but fails channel grouping pattern match. Always use lowercase.

Q: What's the difference between this rule and "uppercase-other-params"?

A: utm_medium uppercase breaks channel grouping (critical - 100% Unassigned). utm_source/campaign uppercase causes data fragmentation (warning - multiple rows). Medium uppercase is MORE critical.

Q: How do I fix 50,000 historical sessions with uppercase medium?

A: You cannot fix historical data in GA4. Those 50,000 sessions remain Unassigned forever. Fix utm_medium immediately to ensure all future traffic is classified correctly. Use GA4 annotation to mark when you fixed it.

āœ… 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

External Resources


Last Updated: November 9, 2025
Rule ID: utm_medium_not_lowercase
Severity: Critical
Category: Consistency