UTM character encoding and special characters
A space, an ampersand, or an emoji inside a UTM value can corrupt the whole query string if it is not percent-encoded. This page explains URL encoding for UTM values — which characters need escaping, why + and %20 differ, and how encoding mistakes truncate or split your campaign data.
Why encoding matters
The query string uses reserved characters: ? begins it, & separates parameters, = assigns values. If a UTM value contains a raw & or =, the parser treats it as structure, not data, and your value is cut off or misread.
A value like spring & summer becomes utm_campaign=spring with everything after the & lost — unless the & is encoded as %26.
Common characters to encode
Percent-encode anything that is not an unreserved character. The frequent offenders:
- Space → %20 (a literal space breaks many tools)
- & → %26 (otherwise it splits parameters)
- = → %3D
- + means space in query strings — encode a literal plus as %2B
- Non-ASCII (accents, emoji) → UTF-8 percent-encoding
Better: avoid the problem
The most robust fix is to keep UTM values in a simple, lowercase, hyphenated vocabulary with no spaces or special characters at all (spring-summer, not Spring & Summer). Then encoding is rarely needed and values stay readable across every tool.
Worked example (correctly encoded):
https://example.com/?utm_source=email&utm_campaign=spring%20%26%20summer
How it appears in analytics and logs
A campaign value that appears truncated (everything after a raw & is gone) or shows literal %-sequences means an encoding error. Proper percent-encoding keeps the value whole and readable in reports.
Diagnostic use case
Encode UTM values correctly so spaces, ampersands, and non-ASCII characters do not break the query string or split a campaign into fragments.
What WebmasterID can help detect
WebmasterID's link builder encodes UTM values for you, avoiding the truncation and splitting that hand-built URLs cause when a value contains a reserved character.
Common mistakes
- Leaving a raw & in a value, truncating everything after it.
- Assuming + is harmless — it decodes to a space in the query string.
- Pasting unencoded non-ASCII characters into UTM values.
- Encoding personal data and treating it as safe in a public URL.
Privacy and accuracy notes
Encoding is about URL safety, not the visitor. Still, keep values to generic campaign labels; encoding personal data does not make it safe to put in a public URL.
Frequently asked questions
- Why does my campaign name get cut off in reports?
- An unencoded ampersand or equals sign in the value is being read as URL structure. Encode it (& becomes %26) or, better, use a hyphenated value with no special characters.
Related pages
- UTM validation and QA
Most UTM data problems are preventable with a validation step before links go live. This page describes what to check on every tagged URL — presence of the core parameters, lowercase consistency, proper URL encoding, no double question marks — and a lightweight QA workflow so broken or inconsistent tags never reach production.
- UTM casing and consistency
Casing is the single most common UTM data bug. Because tools match values as exact strings, utm_source=Reddit and reddit are two separate rows, so one campaign quietly fragments. This page makes the lowercase rule concrete and shows how to deepen it into real consistency.
- UTM naming conventions that survive reporting
Most UTM data problems are naming problems. Because tools treat utm_source=Reddit and reddit as different values, inconsistent casing and spelling fragment one campaign across many rows. This page gives a convention — lowercase, hyphenated, documented allow-list — that keeps reports clean.
- Campaign links (docs)
Generate correctly encoded UTM URLs automatically.
Sources and verification notes
- MDN — Percent-encodingWhich characters must be percent-encoded in a URL.
- RFC 3986 — Uniform Resource Identifier (URI)Reserved vs unreserved characters in the query component.
Last reviewed 2026-06-24. Facts are checked against primary/official sources where available; uncertain specifics are marked “Data not yet verified” rather than guessed.