troubleshootingUpdated 2025

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.

7 min readtroubleshooting

Your campaign name is descriptive and helpful:

Code
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:

Code
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.

🚨 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:

ParameterCharacter Limit
utm_source100 characters
utm_medium100 characters
utm_campaign100 characters
utm_content100 characters
utm_term100 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:

Code
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:

Code
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:

Code
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:

Code
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:

Code
utm_campaign=sponsored_content_partnership_techcrunch_article_five_ways_to_improve_project_management_efficiency_in_remote_teams_january_2024
(129 characters)

GA4 stores:

Code
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

Get Your Free Audit Report

Real Example: $12k Email Campaign Invisible

Company: E-commerce retailer Campaign: January 2024 winter clearance email series

Campaign naming convention:

Code
utm_campaign=email_newsletter_promotional_2024_january_winter_clearance_sale_segment_`{"{"}{"{"}segment{"}"}{"}"}}`_email_`{"{"}{"{"}number{"}"}{"}"}}`_subject_line_`{"{"}{"{"}variant{"}"}{"}"}}`

Actual campaign names:

Code
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:

Code
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:

Javascript
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:

  1. Build test URL with long UTM value
  2. Click it
  3. GA4 → Realtime → View event details
  4. Compare:
    • What you sent: Full 120-character value
    • What GA4 received: Truncated 100-character value

Method 3: Export and Inspect

Monthly audit:

  1. GA4 → Explore → Export campaign names
  2. Sort by length (add formula: =LEN(A2))
  3. Flag any at exactly 100 characters (likely truncated)
  4. Check source campaigns to verify

How to Fix Long UTM Values

Strategy 1: Use Abbreviations

Before:

Code
utm_campaign=email_newsletter_promotional_january_2024_winter_sale
(63 characters)

After:

Code
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:

Code
utm_campaign=winter_sale_email_segment_vip_customers_subject_line_70_percent_off
(79 characters)

After:

Code
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:

Code
utm_campaign=sponsored_content_partnership_techcrunch_article_project_management_jan_2024
(87 characters)

After:

Code
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:

Code
`{"{"}{"{"}channel{"}"}{"}"}}`_`{"{"}{"{"}type{"}"}{"}"}}`_`{"{"}{"{"}year{"}"}{"}"}}``{"{"}{"{"}month{"}"}{"}"}}`_`{"{"}{"{"}descriptor{"}"}{"}"}}`

Examples:

Code
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:

Code
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

Javascript
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

Run Complete UTM Audit (Free Forever)

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:

Code
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:

Code
utm_campaign=winter_sale_2024_en
utm_campaign=winter_sale_2024_es
utm_campaign=winter_sale_2024_fr

Or use utm_content:

Code
utm_campaign=winter_sale_2024
utm_content=lang_es

Keep core campaign name under 100 chars, differentiate by content or source.

UTM

Get Your Free Audit in 60 Seconds

Connect GA4, run the scan, and see exactly where tracking is leaking budget. No credit card required.

Trusted by growth teams and agencies to keep attribution clean.