GA4's 100-Character Limit: Why Long UTM Values Get Truncated
GA4 truncates UTM parameters longer than 100 characters, creating duplicate data and broken reporting. Learn the limits and how to avoid truncation.
Your campaign name is descriptive and helpful:
utm_campaign=2024_january_winter_sale_email_newsletter_promotional_existing_customers_segment_a_test_variation_1
Perfect, right? You'll know exactly what this campaign is when reviewing data.
Wrong. GA4 sees this:
utm_campaign=2024_january_winter_sale_email_newsletter_promotional_existing_customers_segment_a_test_vari
The last 13 characters are gone. Truncated. Lost forever.
Now you have TWO rows in GA4:
...test_variation_1(20 characters, under limit)...test_vari(100 characters, truncated)
Your descriptive campaign name just fragmented your data.
Table of contents
- GA4's Character Limits
- Why Truncation Creates Problems
- Problem 1: Data Fragmentation
- Problem 2: Duplicate Rows
- Problem 3: Lost Context
- Real Example: $12k Email Campaign Invisible
- How to Detect Truncation
- Method 1: Character Count Check
- Method 2: GA4 Comparison
- Method 3: Export and Inspect
- How to Fix Long UTM Values
- Strategy 1: Use Abbreviations
- Strategy 2: Move Details to utmcontent
- Strategy 3: Use Codes/IDs
- Strategy 4: Standardized Format
- Prevention: Character Limit Enforcement
- Google Sheets Validation
- JavaScript Validation
- Pre-Launch Checklist
- FAQ
- What's the exact character limit for each UTM parameter?
- Does the 100-character limit include URL encoding?
- Can I increase the character limit?
- What happens to truncated characters—are they stored anywhere?
- Does Universal Analytics have the same limit?
- How do I handle multi-language campaigns with long names?
🚨 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
GA4's Character Limits
UTM parameter maximum lengths:
| Parameter | Character Limit |
|---|---|
| utm_source | 100 characters |
| utm_medium | 100 characters |
| utm_campaign | 100 characters |
| utm_content | 100 characters |
| utm_term | 100 characters |
What happens at 101 characters?
GA4 truncates. No warning. No error. Just silently cuts off everything after character 100.
Why Truncation Creates Problems
Problem 1: Data Fragmentation
Scenario: Testing two email subject lines
Campaign names:
Campaign A: email_newsletter_january_2024_promotional_winter_sale_subject_line_variation_get_50_percent_off_today_only
(111 characters)
Campaign B: email_newsletter_january_2024_promotional_winter_sale_subject_line_variation_free_shipping_no_minimum
(113 characters)
GA4 stores:
Campaign A: email_newsletter_january_2024_promotional_winter_sale_subject_line_variation_get_50_percent_of
(100 characters, truncated)
Campaign B: email_newsletter_january_2024_promotional_winter_sale_subject_line_variation_free_shipping_no
(100 characters, truncated)
Both end with different truncated endings:
...percent_of(Campaign A)...shipping_no(Campaign B)
Good news: They're still distinct (different campaigns). Bad news: The meaningful part (actual subject line variation) is cut off.
Problem 2: Duplicate Rows
Worse scenario: Multiple campaigns with same prefix
Campaign names:
Campaign 1: 2024_q1_winter_sale_promotional_email_newsletter_segment_existing_customers_high_value_test_variation_1
Campaign 2: 2024_q1_winter_sale_promotional_email_newsletter_segment_existing_customers_high_value_test_variation_2
If both exceed 100 characters and get truncated at the SAME point:
Both become: 2024_q1_winter_sale_promotional_email_newsletter_segment_existing_customers_high_value_test_vari
GA4 sees ONE campaign. Your two campaigns merge into a single row.
Problem 3: Lost Context
Campaign name:
utm_campaign=sponsored_content_partnership_techcrunch_article_five_ways_to_improve_project_management_efficiency_in_remote_teams_january_2024
(129 characters)
GA4 stores:
utm_campaign=sponsored_content_partnership_techcrunch_article_five_ways_to_improve_project_management_effi
(100 characters)
Lost: "ciency_in_remote_teams_january_2024" (29 characters)
You lose critical context: Which article? When published?
😰 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
Real Example: $12k Email Campaign Invisible
Company: E-commerce retailer Campaign: January 2024 winter clearance email series
Campaign naming convention:
utm_campaign=email_newsletter_promotional_2024_january_winter_clearance_sale_segment_`{"{"}{"{"}segment{"}"}{"}"}}`_email_`{"{"}{"{"}number{"}"}{"}"}}`_subject_line_`{"{"}{"{"}variant{"}"}{"}"}}`
Actual campaign names:
email_newsletter_promotional_2024_january_winter_clearance_sale_segment_vip_customers_email_1_subject_line_70_percent_off
(119 characters)
email_newsletter_promotional_2024_january_winter_clearance_sale_segment_regular_customers_email_1_subject_line_50_percent_off
(127 characters)
Both truncated to 100 characters:
Both become:
email_newsletter_promotional_2024_january_winter_clearance_sale_segment_vip_customers_email_1_subject
GA4 merged TWO campaigns into ONE row:
- VIP campaign (70% off, $4k spend)
- Regular campaign (50% off, $8k spend)
Impact:
- Can't see VIP vs regular performance
- Can't compare discount levels (70% vs 50%)
- Can't optimize future segmentation
- $12k in email spend with unusable attribution
Fix: Shortened campaign names to 85 characters max.
How to Detect Truncation
Method 1: Character Count Check
Before launching campaign:
function checkLength(value, paramName) {
if (value.length > 100) {
console.log(`WARNING: ${"{"}{"{"}paramName{"}"}{"}"}} is ${value.length} chars (limit: 100)`);
console.log(`Will be truncated to: ${value.substring(0, 100)}`);
}
}
checkLength(utm_campaign, 'utm_campaign');Method 2: GA4 Comparison
After campaign launch:
- Build test URL with long UTM value
- Click it
- GA4 → Realtime → View event details
- Compare:
- What you sent: Full 120-character value
- What GA4 received: Truncated 100-character value
Method 3: Export and Inspect
Monthly audit:
- GA4 → Explore → Export campaign names
- Sort by length (add formula:
=LEN(A2)) - Flag any at exactly 100 characters (likely truncated)
- Check source campaigns to verify
How to Fix Long UTM Values
Strategy 1: Use Abbreviations
Before:
utm_campaign=email_newsletter_promotional_january_2024_winter_sale
(63 characters)
After:
utm_campaign=email_promo_2024_jan_winter_sale
(38 characters - saved 25 chars)
Abbreviate:
- newsletter → nl
- promotional → promo
- january → jan
- february → feb
Strategy 2: Move Details to utm_content
Before:
utm_campaign=winter_sale_email_segment_vip_customers_subject_line_70_percent_off
(79 characters)
After:
utm_campaign=winter_sale_2024
utm_content=vip_70pct_off
Benefits:
- Campaign stays short and readable
- Details preserved in utm_content
- Can still filter/segment by content
Strategy 3: Use Codes/IDs
Before:
utm_campaign=sponsored_content_partnership_techcrunch_article_project_management_jan_2024
(87 characters)
After:
utm_campaign=sponsored_tc_pm_2401
utm_content=article_proj_mgmt
# Create lookup table:
sponsored_tc_pm_2401 = TechCrunch Partnership, Project Management, Jan 2024
Trade-off:
- UTM is cryptic
- Requires documentation
- But stays well under 100 chars
Strategy 4: Standardized Format
Template:
`{"{"}{"{"}channel{"}"}{"}"}}`_`{"{"}{"{"}type{"}"}{"}"}}`_`{"{"}{"{"}year{"}"}{"}"}}``{"{"}{"{"}month{"}"}{"}"}}`_`{"{"}{"{"}descriptor{"}"}{"}"}}`
Examples:
email_promo_2024_01_winter_sale (34 chars)
social_organic_2024_01_blog_share (37 chars)
paid_social_2024_01_product_launch (38 chars)
Consistent, predictable, always under 100 characters.
Prevention: Character Limit Enforcement
Google Sheets Validation
Add character count indicator:
Cell D2 (next to utm_campaign):
=IF(LEN(C2)>100, "⚠️ TOO LONG: "&LEN(C2)&" chars", "✅ "&LEN(C2)&" chars")
Shows:
- ✅ 87 chars (under limit)
- ⚠️ TOO LONG: 112 chars (over limit)
JavaScript Validation
function validateUTMLength(params) {
const limits = {
utm_source: 100,
utm_medium: 100,
utm_campaign: 100,
utm_content: 100,
utm_term: 100
};
const errors = [];
Object.keys(params).forEach(key => {
if (params[key].length > limits[key]) {
errors.push(
`${"{"}{"{"}key{"}"}{"}"}} is ${params[key].length} chars (max: ${limits[key]})\n` +
`Will truncate to: ${params[key].substring(0, limits[key])}`
);
}
});
return errors.length === 0 ? 'Valid ✅' : errors;
}Pre-Launch Checklist
Before campaign launch:
- All UTM values < 100 characters
- Character count checked in URL builder
- Tested in GA4 Realtime (full value appears)
- No truncation detected
✅ 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
FAQ
What's the exact character limit for each UTM parameter?
All UTM parameters: 100 characters maximum
This applies to: utm_source, utm_medium, utm_campaign, utm_content, utm_term
Does the 100-character limit include URL encoding?
Yes. If your UTM value has spaces or special characters that get URL-encoded (e.g., space becomes %20), the encoded length counts toward the limit.
Example:
utm_campaign=winter sale 2024 (17 raw characters)
Becomes: winter%20sale%202024 (21 encoded characters)
The 21-character encoded version counts toward the 100-character limit.
Can I increase the character limit?
No. The 100-character limit is hard-coded in GA4. You cannot configure it higher.
What happens to truncated characters—are they stored anywhere?
No. Once GA4 truncates at 100 characters, the remaining characters are permanently lost. They are not stored in raw logs, debug view, or anywhere else.
Does Universal Analytics have the same limit?
No—Universal Analytics had a 500-character limit for campaign parameters. GA4's 100-character limit is significantly stricter, which catches many teams off guard during migration.
How do I handle multi-language campaigns with long names?
Use language codes:
utm_campaign=winter_sale_2024_en
utm_campaign=winter_sale_2024_es
utm_campaign=winter_sale_2024_fr
Or use utm_content:
utm_campaign=winter_sale_2024
utm_content=lang_es
Keep core campaign name under 100 chars, differentiate by content or source.