Email UTM Links Breaking After Send: 3 Common Causes + Fixes
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:
- Click tracking wraps your URL in redirect
- Auto-encoding double-encodes already-encoded parameters
- Line breaks in HTML split URLs mid-parameter
- 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
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 clickingCause 2: HTML Line Breaks in Links
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 breakThe 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
Gmail Auto-Link Detection
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.
Outlook SafeLinks
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:
- Use merge tags correctly:
https://site.com?utm_source=mailchimp&utm_medium=email&utm_campaign=*|CAMPAIGN_UID|*
- Test with actual send (not preview)
- 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=emailHubSpot
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:
- Set up click tracking domain properly
- Validate DNS settings
- 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
Join 2,847 marketers fixing their tracking daily
FAQ
Why do UTM links work in preview but break after sending?
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:
- ✅ Encode URLs properly from the start
- ✅ Keep URLs on single line in HTML
- ✅ Test actual delivery, not just preview
- ✅ Check GA4 Real-Time after clicking
Never trust preview. Always test delivery.
Technical Reference: URL Encoding Issues Validation Rule