Fix URL Encoding Errors: Complete Troubleshooting Guide
GA4 shows your campaign as "spring%20sale" instead of "spring sale."
Or parameters are truncated. Or special characters appear as gibberish.
Every URL encoding error has a specific fix. Here's your troubleshooting guide.
🚨 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
Common Encoding Errors
Error 1: Literal %20 in Reports
GA4 shows: spring%20sale%20202 4
Expected: spring sale 2024
Cause: Double-encoded URL
Error 2: Truncated Parameters
GA4 shows: spring
Expected: spring sale 2024
Cause: Unencoded spaces
Error 3: Missing Parameters
GA4 shows: utm_source only
Expected: utm_source, utm_medium, utm_campaign
Cause: Unencoded & symbol
Error 4: Corrupted Characters
GA4 shows: spring%20sale%26save
Expected: spring sale & save
Cause: Mixed encoding levels
😰 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
Diagnostic Process
Step 1: Check Browser Address Bar (30 seconds)
Visit the URL and look at the address bar:
✅ CORRECT (single-encoded):
https://site.com?utm_campaign=spring%20sale
Browser displays: spring sale (decoded for readability)
❌ WRONG (double-encoded):
https://site.com?utm_campaign=spring%2520sale
Browser displays: spring%20sale (literal %20)
Step 2: Check GA4 Reports (30 seconds)
Open GA4 → Reports → Acquisition → Traffic acquisition
If you see: Problem is:
---------------- ------------------
"spring%20sale" Double-encoding
"spring" Unencoded spaces (truncated)
"spring%26win" Unencoded ampersand
"spring’sale" Character encoding mismatch
Step 3: Inspect URL Structure (60 seconds)
Paste URL into text editor and examine:
// Check for common issues
function diagnoseUrl(url) {
const issues = [];
// Issue 1: Double encoding
if (url.includes('%25')) {
issues.push({
problem: 'Double-encoding detected',
indicator: '%25 (encoded %)',
fix: 'Decode once before using'
});
}
// Issue 2: Unencoded spaces
const queryString = url.split('?')[1] || '';
if (queryString.includes(' ')) {
issues.push({
problem: 'Unencoded spaces',
indicator: 'Literal space character',
fix: 'Replace spaces with %20'
});
}
// Issue 3: Unencoded ampersand
const value = url.match(/utm_campaign=([^&]*)/)?.[1] || '';
if (value.includes('&') && !value.includes('%26')) {
issues.push({
problem: 'Unencoded ampersand in value',
indicator: '& not encoded as %26',
fix: 'Encode & as %26 in parameter values'
});
}
return issues;
}Fix: Double-Encoding
Symptom
GA4 campaign: "spring%20sale"
Expected: "spring sale"
Solution
Decode URL once before using:
// ❌ WRONG: Encoding already-encoded URL
const url = 'site.com?utm_campaign=spring%20sale';
const encoded = encodeURIComponent(url);
// Result: spring%2520sale (double-encoded)
// ✅ RIGHT: Check if already encoded
function safeEncode(value) {
// Decode first (in case already encoded)
const decoded = decodeURIComponent(value);
// Then encode
return encodeURIComponent(decoded);
}
const fixed = safeEncode('spring%20sale');
// Result: spring%20sale (correctly single-encoded)Testing
// Test URL decoding
const url = 'site.com?utm_campaign=spring%2520sale';
const param = new URL(url).searchParams.get('utm_campaign');
console.log(param);
// If shows "spring%20sale", URL is double-encoded
// Fix
const decoded = decodeURIComponent(param);
console.log(decoded);
// Should show: "spring sale"Fix: Unencoded Spaces
Symptom
GA4 campaign: "spring"
Expected: "spring sale 2024"
Solution
Replace all spaces with %20:
// Manual fix
const broken = 'site.com?utm_campaign=spring sale 2024';
const fixed = broken.replace(/ /g, '%20');
// Result: site.com?utm_campaign=spring%20sale%202024
// Or use URLSearchParams (auto-encodes)
const params = new URLSearchParams();
params.append('utm_campaign', 'spring sale 2024');
const url = `site.com?${params.toString()}`;
// Result: site.com?utm_campaign=spring+sale+2024
// Note: + is valid encoding for spaces in query stringsFix: Unencoded Special Characters
Symptom
GA4 shows incomplete data
Parameters after special character missing
Solution
Encode all special characters:
// Characters that MUST be encoded in URLs
const mustEncode = {
' ': '%20', // Space
'&': '%26', // Ampersand
'=': '%3D', // Equals
'?': '%3F', // Question mark
'#': '%23', // Hash
'+': '%2B', // Plus (in values, not as space replacement)
'%': '%25', // Percent
'/': '%2F', // Forward slash (in values)
};
// Safe encoding function
function encodeUtmValue(value) {
return encodeURIComponent(value);
}
// Usage
const campaign = 'save & win!';
const encoded = encodeUtmValue(campaign);
console.log(encoded);
// Output: save%20%26%20win!Fix: Mixed Encoding Levels
Symptom
GA4 shows: "spring%20sale&save"
Expected: "spring sale & save"
Problem: Space encoded, ampersand not encoded
Solution
Encode consistently:
// ❌ WRONG: Inconsistent encoding
const url = 'site.com?utm_campaign=spring%20sale&save';
// ↑ ↑
// Encoded Not encoded
// ✅ RIGHT: Encode entire value consistently
const value = 'spring sale & save';
const encoded = encodeURIComponent(value);
const url = `site.com?utm_campaign=${"{"}{"{"}encoded{"}"}{"}"}}`;
// Result: site.com?utm_campaign=spring%20sale%20%26%20savePlatform-Specific Fixes
Google Ads
Problem: Value Tracking template adds parameters
Fix: Ensure existing UTMs properly encoded before adding
// ✅ CORRECT
Final URL: https://site.com?utm_campaign=spring%20sale
Value Tracking: `{"{"}{"{"}lpurl{"}"}{"}"}}`?gclid=`{"{"}{"{"}gclid{"}"}{"}"}}`
Result: site.com?utm_campaign=spring%20sale&gclid=123
Facebook Ads
Problem: URL Parameters field in Ad Manager
Fix: Don't include ? in URL Parameters field
// ❌ WRONG
URL Parameters: ?utm_source=facebook&utm_medium=cpc
// ✅ RIGHT
URL Parameters: utm_source=facebook&utm_medium=cpc
Email Platforms
Problem: Click tracking double-encodes
Fix: Use single-encoded URLs, test delivery
// Test after sending
1. Send test email
2. Click link
3. Check browser address bar
4. Should show single-encoded parameters
Validation Script
function validateUrlEncoding(url) {
const errors = [];
// Extract query string
const queryString = url.split('?')[1] || '';
// Check 1: Unencoded spaces
if (queryString.includes(' ')) {
errors.push('Unencoded spaces detected');
}
// Check 2: Double encoding
if (queryString.includes('%25')) {
errors.push('Possible double-encoding (contains %25)');
}
// Check 3: Unencoded special characters
const specialChars = ['&', '=', '?', '#'];
const params = queryString.split('&');
params.forEach(param => {
const [, value] = param.split('=');
if (value) {
specialChars.forEach(char => {
if (value.includes(char) && !value.includes(encodeURIComponent(char))) {
errors.push(`Unencoded ${"{"}{"{"}char{"}"}{"}"}} in parameter value`);
}
});
}
});
// Check 4: Valid percent encoding
const percentPattern = /%[0-9A-Fa-f]{2}/g;
const invalidPercent = queryString.match(/%(?![0-9A-Fa-f]{2})/);
if (invalidPercent) {
errors.push('Invalid percent encoding detected');
}
return {
valid: errors.length === 0,
errors
};
}
// Usage
const url = 'https://site.com?utm_campaign=spring sale';
const result = validateUrlEncoding(url);
console.log(result);
// { valid: false, errors: ['Unencoded spaces 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
How do I know if my URL is double-encoded?
Check GA4 reports. If you see literal %20 or %26 characters, the URL is double-encoded.
Should I use %20 or + for spaces?
%20 works everywhere. + is valid in query strings but less reliable. Use %20 for consistency.
What if I've already launched with broken URLs?
Fix immediately, update all placements, and consider 301 redirects from broken to fixed URLs.
Can I decode URLs in GA4?
No. GA4 stores values as received. Fix the source URLs.
Conclusion
URL encoding errors corrupt UTM tracking. Systematic diagnosis and fixing restores data quality.
Quick Diagnostic:
- Check browser address bar for double-encoding
- Check GA4 for truncation or literal % codes
- Validate with encoding checker
- Fix at source and redeploy
Prevention: Use encodeURIComponent() for all parameter values.
Technical Reference: URL Encoding Issues Validation Rule