Email UTM Links Breaking After Send: 3 Common Causes + Fixes

UTMGuard Team
7 min readtroubleshooting

You preview your email. UTM link works perfectly. GA4 shows campaign data.

You send to 10,000 subscribers. Zero UTM data appears in GA4.

The email platform broke your URLs. Here's why and how to fix it.

🚨 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

The Problem

Email platforms modify links before delivery:

  1. Click tracking wraps your URL in redirect
  2. Auto-encoding double-encodes already-encoded parameters
  3. Line breaks in HTML split URLs mid-parameter
  4. Link rewriting corrupts special characters

Result: UTM parameters arrive broken or missing in GA4.

Real Example

Company: E-commerce retailer Platform: Mailchimp Campaign: 50,000-recipient newsletter Budget: $5,000 promotional discount

Original URL (working in preview):

https://shop.com/sale?utm_source=newsletter&utm_medium=email&utm_campaign=black_friday

URL received by subscribers (after Mailchimp click tracking):

https://mailchimp.us1.list-manage.com/track/click?u=123&id=456&e=789&url=https%3A%2F%2Fshop.com%2Fsale%3Futm_source%3Dnewsletter%26utm_medium%3Demail%26utm_campaign%3Dblack_friday

Problem: Double-encoded parameters. GA4 received:

  • Source: newsletter%26utm_medium%3Demail%26utm_campaign%3Dblack_friday
  • Medium: Missing
  • Campaign: Missing

Impact:

  • All 50,000 clicks attributed to "Direct" traffic
  • Could not measure email campaign ROI
  • $5,000 promotional cost with zero attribution

😰 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

Cause 1: Click Tracking Double-Encoding

How It Happens

Step 1: Your URL
https://site.com?utm_source=email&utm_campaign=sale

Step 2: Email platform wraps for click tracking
https://platform.com/track?url=https://site.com?utm_source=email...
                               ↑
                    Platform encodes this entire URL

Step 3: If your URL already has encoded characters
https://site.com?utm_campaign=spring%20sale
                                    ↑
                            %20 becomes %2520

The Fix

Use properly encoded URLs, but test delivery:

// ✅ CORRECT: Build URL with proper encoding
const url = new URL('https://site.com');
url.searchParams.append('utm_source', 'newsletter');
url.searchParams.append('utm_medium', 'email');
url.searchParams.append('utm_campaign', 'spring sale');
 
console.log(url.toString());
// https://site.com?utm_source=newsletter&utm_medium=email&utm_campaign=spring+sale
 
// Then TEST by sending to yourself and clicking

How It Happens

<!-- ❌ WRONG: Line break mid-URL -->
<a href="https://site.com?utm_source=email&
         utm_medium=newsletter&utm_campaign=sale">
    Click Here
</a>
 
<!-- Email client parses as: -->
<a href="https://site.com?utm_source=email&">

    Link ends at line break

The Fix

<!-- ✅ CORRECT: URL on single line -->
<a href="https://site.com?utm_source=email&utm_medium=newsletter&utm_campaign=sale">
    Click Here
</a>
 
<!-- Or use template literal without line breaks -->
<a href="${"{"}{"{"}baseUrl{"}"}{"}"}}?${params.toString()}">
    Click Here
</a>

Cause 3: Platform-Specific URL Rewriting

Your email body:
Check out https://site.com?utm_source=email&utm_medium=newsletter

Gmail converts to:
<a href="https://www.google.com/url?q=https://site.com?utm_source=email&utm_medium=newsletter">

Problem: Gmail's redirect wrapper can corrupt parameters

Fix: Always use proper <a> tags. Don't rely on auto-linking.

Original:
https://site.com?utm_source=email

After Outlook SafeLinks:
https://protection.outlook.com/?url=https%3A%2F%2Fsite.com%3Futm_source%3Demail

Problem: Adds additional redirect layer

Fix: Outlook SafeLinks preserves parameters correctly IF your original URL is properly encoded.

Platform-Specific Solutions

Mailchimp

Issue: Click tracking can double-encode

Fix:

  1. Use merge tags correctly:
https://site.com?utm_source=mailchimp&utm_medium=email&utm_campaign=*|CAMPAIGN_UID|*
  1. Test with actual send (not preview)
  2. Check "Track clicks" in campaign settings

Klaviyo

Issue: Template line breaks

Fix:

{# ✅ CORRECT: Single line #}
{{ event.my_url }}?utm_source=klaviyo&utm_medium=email
 
{# ❌ WRONG: Multi-line #}
{{ event.my_url }}?
  utm_source=klaviyo&
  utm_medium=email

HubSpot

Issue: Personalization tokens can inject unencoded spaces

Fix:

❌ WRONG:
utm_campaign={{ contact.firstname }} offer

✅ RIGHT:
utm_campaign={{ contact.firstname|urlencode }}_offer

SendGrid

Issue: Click tracking with custom domains

Fix:

  1. Set up click tracking domain properly
  2. Validate DNS settings
  3. Test with seed list before sending

Testing Checklist

Step 1: Send Test Email (2 minutes)

1. Send to your own email
2. Open in multiple clients:
   - Gmail
   - Outlook
   - Apple Mail
   - Mobile (iOS/Android)
3. Click link in each client
4. Check final URL in browser address bar

Step 2: Verify GA4 Real-Time (2 minutes)

1. Click link from test email
2. Open GA4 → Realtime
3. Check "Traffic acquisition" card
4. Verify all UTM parameters present:
   ✅ utm_source
   ✅ utm_medium
   ✅ utm_campaign

Step 3: Check for Encoding Issues (1 minute)

Look in browser address bar after clicking:

✅ CORRECT:
https://site.com?utm_campaign=spring%20sale

❌ WRONG:
https://site.com?utm_campaign=spring%2520sale
                                    ↑
                            Double-encoded (%20 → %2520)

Prevention Script

// Validate URL before adding to email template
function validateEmailUrl(url) {
    const issues = [];
 
    // Check for line breaks
    if (url.includes('\n') || url.includes('\r')) {
        issues.push('URL contains line breaks');
    }
 
    // Check for unencoded spaces
    if (url.includes(' ')) {
        issues.push('URL contains unencoded spaces');
    }
 
    // Check for double encoding
    if (url.includes('%25')) {
        issues.push('Possible double encoding detected');
    }
 
    // Validate URL structure
    try {
        new URL(url);
    } catch {
        issues.push('Invalid URL structure');
    }
 
    return {
        valid: issues.length === 0,
        issues
    };
}
 
// Usage
const url = 'https://site.com?utm_source=email&utm_campaign=sale';
const result = validateEmailUrl(url);
if (!result.valid) {
    console.error('URL issues:', result.issues);
}

✅ 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

Email previews often bypass click tracking and URL rewriting. Always test with actual delivery.

Should I disable click tracking to preserve UTMs?

No. Click tracking is valuable. Instead, ensure URLs are properly encoded and test delivery.

Can I use URL shorteners in emails?

Yes, but shorten AFTER adding UTMs, and test the final shortened URL.

How do I test across all email clients?

Use services like Litmus or Email on Acid for multi-client testing, or send to seed list with various providers.

Conclusion

Email UTM links break when platforms modify URLs during delivery.

Prevention:

  1. ✅ Encode URLs properly from the start
  2. ✅ Keep URLs on single line in HTML
  3. ✅ Test actual delivery, not just preview
  4. ✅ Check GA4 Real-Time after clicking

Never trust preview. Always test delivery.


Technical Reference: URL Encoding Issues Validation Rule