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 AuditWhy 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
CPCdoes NOT match pattern^(.*cp.*|ppc|paidsearch)$- fails pattern matchcpcDOES 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:
Scenario 2: Title Case utm_medium=Email
Email platforms using title case for medium:
Scenario 3: All Caps utm_medium=SOCIAL
Social scheduling tools using uppercase:
š° 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
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:
- Go to Campaign Settings ā Tracking Template or Final URL
- Change utm_medium=CPC or utm_medium=Cpc
- To: utm_medium=cpc (all lowercase)
- Apply to all active campaigns
Facebook Ads:
- Go to Ads Manager ā URL Parameters
- Change utm_medium=Social or utm_medium=CPC
- To: utm_medium=cpc (for paid) or utm_medium=social (for organic)
- Apply to all ad sets
Email Marketing Platforms:
- Check platform URL builder settings (Mailchimp, Constant Contact, etc.)
- Change utm_medium=Email or utm_medium=EMAIL
- To: utm_medium=email (all lowercase)
- Update templates and default settings
Social Scheduling Tools:
- Access UTM template settings
- Change utm_medium=Social or utm_medium=SOCIAL
- To: utm_medium=social (all lowercase)
- Save as default for all future posts
Display Ad Networks:
- Update tracking templates
- Change utm_medium=Display or utm_medium=DISPLAY
- To: utm_medium=display (all lowercase)
- 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:
- Document requirement: utm_medium MUST be lowercase
- Add validation to URL generation scripts
- Use Google Campaign URL Builder (automatically lowercases)
- QA checklist: Verify utm_medium is lowercase before launching
Step 5: Verify Channel Classification
Test in GA4 Real-Time:
- Click a test link with lowercase utm_medium
- Open GA4 ā Reports ā Real-time
- Check "Traffic by source and medium"
- Verify traffic appears in correct channel (not Unassigned)
Monitor Channel Reports:
- GA4 ā Reports ā Acquisition ā Traffic acquisition
- Check "Unassigned" channel volume
- After fixing: Should see significant drop in Unassigned
- 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:
- Case Analysis - Scans all utm_medium values for uppercase characters
- Pattern Matching - Tests against GA4 regex patterns to predict classification
- Channel Impact - Calculates sessions affected by Unassigned classification
- Revenue Impact - Measures revenue attributed to Unassigned channel
- 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
Related Validation Rules
Related Validation Rules
Non-Standard utm_medium Value
Medium doesn't match GA4 channel grouping patterns
Uppercase Characters in UTM Source/Campaign
Case-sensitive fragmentation in source and campaign values
Conflicting Source and Medium Combination
Illogical source/medium pairs break channel classification
Orphaned UTM Parameters
Missing utm_medium with utm_source present
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
Join 2,847 marketers fixing their tracking daily
External Resources
- GA4 Default Channel Grouping Rules
- Campaign URL Builder (Google)
- GA4 Traffic Acquisition Reports
- Custom Channel Groups in GA4
- UTM Parameter Best Practices
utm_medium_not_lowercase