UTM parameters are the tags you add to a link so your analytics knows where a visitor came from, and they fail for reasons that have nothing to do with technical difficulty. They break because four people wrote the same campaign name four ways, and analytics dutifully reported four campaigns.
The rules below are the ones that survive a real team over a real year, which is a different test from the ones that look tidy in a spreadsheet.
This is for you if your traffic source reports contain several rows that are obviously the same thing.
What UTM parameters actually carry
Five fields, and three of them do nearly all the work.
Source is where the traffic came from, such as a newsletter platform or a specific site. Medium is the type of traffic, such as email or cpc. Campaign is what the activity was, such as a product launch or a seasonal promotion.
Term and content exist for finer detail. Term was built for paid keywords, content for distinguishing two links in the same message.
You will use source, medium and campaign constantly and the other two occasionally. Starting with all five populated on everything is a common way to create work nobody reads.
Why UTM parameters break
Inconsistency, almost every time, and it is silent.
Analytics matches values exactly. Facebook, facebook and FB are three sources. Summer-Sale, summer_sale and Summer Sale are three campaigns. Nothing warns anybody, and the report simply splits.
The damage is not that the data is missing. It is that the totals are wrong in a way that looks fine, so somebody reports on one of the three rows and describes it as the campaign.
This gets worse with headcount and with time. A new starter invents their own convention, an agency uses a different one, and a year later nobody can reconstruct which values belonged to which effort.
That is why the fix is procedural rather than technical.
Five rules that hold up
These are the ones I would enforce, and the reasoning matters more than the specifics.
Lower case everything, always. The values are case sensitive, so this single rule removes the largest source of fragmentation for no effort.
Hyphens rather than spaces or underscores. Pick one and never mix. Spaces become encoded characters that are unpleasant to read in reports.
Keep medium to a very short fixed list. Email, cpc, social, referral, affiliate. Medium is what groups your reporting, so proliferation there does the most damage of any field.
Put the date in the campaign name where the activity repeats. A campaign called newsletter is useless by the third month. One called newsletter-2026-09 is still readable next year.
Never invent a value in a hurry. If a link needs a value that does not exist yet, add it to the shared list first, then use it.
The mistake that does real damage
Tagging internal links is the one worth calling out separately, because it corrupts data rather than fragmenting it.
Somebody adds UTM parameters to a link between two pages on your own site, usually meaning to track which banner people clicked. Analytics sees the tags, treats it as a new session from a new source, and reattributes that visitor away from wherever they genuinely came from.
So your own navigation starts appearing as a traffic source, and the original source loses the conversion.
The rule is absolute. UTM parameters go on links arriving from outside your site and nowhere else. Internal clicks get tracked as events, which is what events are for.
I have seen a site where the homepage banner was the second largest traffic source in the reports. Nobody arrived from it. Everybody arriving was being relabelled by it.
Where UTM parameters should not go
Two more places, both common.
Google Ads links do not need them for source and medium. Auto-tagging captures more detail than you can, including keyword, device and network, and adding your own frequently overwrites it. That is a straight loss of information.
Publicly shareable links are the other. If somebody copies a tagged URL and puts it on their site, every visitor arriving through it gets attributed to your original campaign, whatever that campaign was. Keep tags off anything you expect to be shared onward.
Both mistakes are made by people being thorough, which is why they need stating explicitly rather than being left to judgement.
Making consistency survive a team
Documentation does not work here. I have written the document, and people still type.
What works is removing the typing. A shared link builder with dropdown lists for source, medium and campaign, where adding a new value is a deliberate act rather than a keystroke.
The builder does not have to be sophisticated. A spreadsheet with data validation and a formula that assembles the URL is enough for most teams, and it takes an hour to make.
Then audit occasionally. Sort your source and medium reports alphabetically and look for near-duplicates. They accumulate, and catching them at five is much easier than at fifty.
That audit takes ten minutes a quarter and is the difference between reporting that holds together for years and reporting that quietly rots.
What good UTM parameters buy you
Worth being clear about the payoff, because the discipline only feels worthwhile if the benefit is visible.
You get channel comparison that means something. When email, social and referral traffic are tagged consistently, you can genuinely compare what each produces, which is the cross-channel question no single ad platform can answer.
You also get history. A convention held steady for two years lets you compare this September against last September, which is worth more than almost any single month’s optimisation.
And you get the ability to hand the account to somebody else. Consistent tagging is the difference between an inheritable account and one where the reporting has to be rebuilt from scratch.
Why UTM parameters cannot settle the channel argument
One limit is worth stating, because clean tagging creates a confidence it does not entirely earn.
Consistent tags tell you where somebody arrived from. They say nothing about what caused them to arrive. Somebody who saw a social post, searched your name a week later and clicked an email link is recorded as email, and email did the least work in that sequence.
So UTM parameters give you an accurate record of the last labelled step, which is a real improvement over an inaccurate one, and it remains a record of arrival rather than of influence.
The evidence on how far that gap can run is worth holding. Gordon, Zettelmeyer, Bhargava and Chapsky compared observational attribution against randomised experiments across 15 Facebook experiments and 500 million user-experiment observations, finding estimates off by a factor of three in half the studies.
Tagging discipline does not close that gap and it is still worth having. Clean source data is the floor everything else stands on, including any experiment you eventually run.
What to change this week
Three steps.
Sort your source and medium reports alphabetically and count the near-duplicates. That number tells you how much of your channel reporting is currently fiction.
Then build the shared builder with fixed lists, even a simple one, and tell everybody to use it rather than typing links.
Then check for internal links carrying UTM parameters, because that is the one causing active harm rather than untidiness.
The GA4 vs Google Ads discrepancy covers why your two Google tools disagree even with perfect tagging, what conversion numbers actually measure is the counting underneath, incrementality testing is what you reach for when source data cannot answer the question, and cost per lead by channel is the comparison consistent tagging finally makes possible. On Meta the auto-tagging situation differs, which my Meta Ads work sets up correctly. To have your tracking reviewed end to end, book a teardown.