Common UTM Tracking Mistakes (and How to Fix Them)
Inconsistent casing
The fix is to force every value to lowercase before it reaches a URL. UTM values are case-sensitive, so Email, email, and EMAIL are stored as three separate sources, splitting one channel across three report rows. Casing drift is the single most frequent UTM error because it is invisible at link-build time and only surfaces weeks later in a fragmented report.
Why it breaks attribution
Analytics platforms match values as exact strings. When half your team writes Facebook and half writes facebook, the channel's traffic, conversions, and revenue are divided between two rows that should be one, and any total you read off the top is understated.
The fix
Standardise on all-lowercase as a hard rule and enforce it mechanically. A builder that lowercases input automatically removes the entire class of error, because no one has to remember the rule at the moment they are pasting a link into an ad platform.
Tagging internal links
The fix is simple: never put UTM parameters on links between pages of your own site. When a visitor who arrived from Google clicks an internally tagged button, the new UTMs overwrite the original source and start a fresh session, so a Google visitor is suddenly re-attributed to your own homepage banner.
What goes wrong
Internal UTMs inflate whatever source you tagged the button with and erase the real acquisition channel for that visit. Over time this makes on-site elements look like top traffic sources while starving your genuine channels of credit, quietly corrupting every attribution model downstream.
The fix
Reserve UTMs strictly for inbound links: emails, ads, social posts, partner sites, anything that lives on another property. For clicks within your own site, use event tracking (a click or button event) instead, which records the interaction without resetting the session source.
Missing required parameters
The fix is to treat utm_source, utm_medium, and utm_campaign as required on every tagged link. Source and medium feed your analytics channel grouping; campaign ties the traffic to a specific initiative. Drop any of the three and the visit either falls into an "unassigned" bucket or loses the context that makes the data usable.
What each required parameter does
| Parameter | Status | Why it matters |
|---|---|---|
utm_source | Required | Names the specific platform; without it the visit is uncategorised |
utm_medium | Required | Drives channel grouping (email, cpc, social) in reports |
utm_campaign | Required | Ties traffic and conversions to a named initiative or offer |
utm_content | Optional | Separates two creatives or placements within one campaign |
utm_term | Optional | Records the paid-search keyword |
The fix
Make the three core parameters mandatory fields in whatever builds your links, so a link cannot be generated until source, medium, and campaign are all filled in. Leave content and term optional, and only add them when you genuinely need to tell variants or keywords apart.
Spaces and duplicate campaigns
The fix is to replace spaces with a single hyphen and to draw every campaign name from one approved list. A raw space becomes %20 in the URL, producing ugly, easy-to-mistype links; meanwhile small spelling differences spawn duplicate campaigns that scatter a single initiative across several rows.
Spaces and special characters
Never type a space, and avoid characters that need URL-encoding. spring sale renders as spring%20sale and is trivial to fat-finger into spring+sale or spring sale elsewhere. Standardise on hyphens, as in spring-sale, and use that one separator across the whole team.
Duplicated campaign names
Duplicates are casing and separator drift wearing a different hat. q2-demo, Q2-Demo, and q2_demo are three campaigns to your analytics, so one push reports as three. The table below shows the typical broken-versus-clean pairs.
| Mistake | Fixed value | Why |
|---|---|---|
utm_campaign=Spring Sale | utm_campaign=spring-sale | Space becomes %20 and breaks the URL |
utm_campaign=q2_demo & q2-demo | utm_campaign=q2-demo | Mixed separators create duplicate campaigns |
utm_source=fb & facebook | utm_source=facebook | Aliases for one platform split the data |
The fix
Decide one exact string per campaign in advance, document it, and reuse it character-for-character on every link. A builder that strips spaces and lowercases values turns "remember the exact name" into something the tool guarantees for you.
No documentation
The fix is to keep one shared, link-accessible spreadsheet as the single source of truth for both your approved values and the links themselves. Almost every mistake above, whether casing drift, duplicate campaigns, or off-vocabulary mediums, comes from people guessing values link by link because nothing tells them the right one.
What to document
A simple two-tab structure covers most teams:
- Tab 1, Vocabulary. One column per parameter listing the allowed values, so everyone picks from a list instead of inventing labels.
- Tab 2, Link log. One row per campaign URL with source, medium, campaign, the destination page, and the date, so any link can be traced back later.
The fix
Documentation defines the rules, but it won't stop typos on its own. The durable setup is the sheet plus a builder that mechanically enforces it, so conventions are applied automatically rather than relying on each person to remember them under deadline.
Frequently asked questions
Why is my UTM campaign showing up twice in reports?
Almost always a spelling or casing difference. spring-sale and Spring-Sale, or spring-sale and spring_sale, are treated as two distinct campaigns because UTM values are case- and character-sensitive. Pick one exact string, draw it from a documented list, and reuse it identically on every link.
Should I put UTM parameters on internal links?
No. Tagging links between pages on your own site overwrites the original source and restarts the session, so a visitor who arrived from Google gets re-attributed to your internal button. Reserve UTMs for inbound links from other properties and use event tracking for on-site clicks.
Which UTM parameters are actually required?
Source, medium, and campaign are the three to treat as required on every tagged link. Source and medium drive your channel grouping in analytics; campaign ties spend to an initiative. Content and term are optional and only added when you need to separate creatives or track paid keywords.
How do I fix UTM links that are already broken in the wild?
You usually cannot retag a link that is already published, so fix it forward. Decide the correct value, update any link you still control, and in analytics create a channel grouping or rule that maps the wrong variants onto the right one so future reports consolidate cleanly.
What is the single biggest UTM mistake to avoid?
Having no documented convention. Every other mistake, whether casing drift, duplicate campaigns, or off-vocabulary mediums, stems from people guessing values link by link. One shared sheet of approved values, plus a builder that enforces them, prevents the majority of UTM problems before they happen.
Last updated: 14 June 2026