Which special characters cause problems in UTM strings?

"Special characters" (special/reserved/non-alphanumeric) cause problems in UTM code.

They can break tracking, either by corrupting the URL structure itself or by causing the UTM value to be parsed incorrectly.  

Here's the breakdown… 


Characters that break the URL structure

  • Question mark (?) – if used inside a parameter value, it can be misread as starting a new query string. 

  • Ampersand (&) – separates parameters (utm_source=x&utm_medium=y). An unescaped ampersand inside a value (e.g., a campaign name like "Buy One & Get One Free") will prematurely terminate that parameter and corrupt everything after it.   

    • Warning! When using ampersands to separate parameters, combinations like &reg (for &region=) can be encoded into a registration mark (®) which can break tracking, use &country= instead. 

  • Equals sign (=) – used to assign values to keys. An unescaped = inside a value can be misread as starting a new key-value pair. 

    Hash sign (#) – marks the start of a URL fragment. Anything after an unescaped # gets treated as a fragment identifier and is typically not sent to the server at all — meaning any UTM parameters placed after it are silently dropped. 

    • Often used in anchor tags to auto scroll to specific parts of the page - they can be used but need to be placed after UTMs / Query Strings.

  • Forward slash (/) – not always dangerous, but can cause routing issues if it appears where a path separator is expected, especially in poorly built redirect chains. 


Characters that get mis-encoded or stripped

  • Spaces – a raw space in a UTM value can break the parameter or get truncated by some platforms. If you need it, it is best to encode it as an underscore or dash. 

  • Accented/non-ASCII characters (é, ü, ñ, emoji, etc.) – often get mangled if not properly UTF-8 encoded, showing up as %E9 garbage strings or question marks in reports. 

  • Plus sign (+) – ambiguous, since it's sometimes interpreted as a literal plus and sometimes as an encoded space, depending on the platform. 

  • Percent sign (%) – is used in URLs for percent-encoding (also called URL encoding) to safely transmit characters that are otherwise not allowed or have special meanings. This means it could be transformed into another character, the most common being %20 = space. 


Characters platforms handle inconsistently

  • Commas, colons, semicolons, pipes (, : ; |) – not officially reserved in URLs, but some ad platforms, email tools, or CRMs use them as internal delimiters, so they can silently split or truncate a value. 

  • Apostrophes and quotes (' ") – usually fine in a browser, but can break things downstream if the URL is ever inserted into a database query without sanitization, or if it's embedded in HTML/JS improperly. 

  • Non-breaking spaces – invisible in a spreadsheet or CMS, but they're a different character than a regular space and won't match on comparison, quietly creating duplicate "different" values in reports. 


Practical rules of thumb

  • Always code your links with a proper link management platform like Uplifter. Don’t rely on a spreadsheet which will never prevent these mistakes happening. 

  • Avoid punctuation and special characters entirely in UTM values. 

  • Replace spaces with underscores or hyphens/dashes. 

  • Never place UTM parameters after a # fragment. Place the anchor tags AFTER the code. 

  • Watch for smart quotes/typographic characters (curly quotes “ ” vs straight quotes " ") introduced accidentally by copying from Word, Google Docs, or Slack — these look identical to a person but are different characters to a machine, and are a very common source of silent tracking breakage. 

  • Check for “ghost spaces” - the hard to see spaces that can appear at the end of anything pasted into a spreadsheet. They will be replaced by %20 in a link, messing up the data in the analytics platform. If the space is intended, replace it with an underscore or dash. 

  • Be careful when you remove “utm_” from a parameter name. This might be fine, but it may confuse the CMS platform: calling a parameter “asset=cpu” instead of “utm_asset=cpu” may cause the CMS to think it had an instruction to load something from its asset library! 


tl;dr

Use a proper link management platform like Uplifter.

It will correct 99% of these mistakes before they end up in your data. 

Stop managing UTMs in a spreadsheet!

Uplifter gives your team a centralised UTM builder with locked dropdowns, a shared taxonomy, and a full audit trail, so clean data is the default, not the goal.

Free download: UTM governance checklist

33 expert-backed steps to clean UTM data, including the exact spreadsheet structure and the governance layer that makes it work.

Download the checklist

Ready to replace your spreadsheet?

Uplifter gives your team a governed UTM builder with locked dropdowns, a shared taxonomy, and a full audit trail. Set up in minutes, not months.

Try Uplifter
Next
Next

What are the alternatives to Google’s Campaign URL Builder?