UTM parameters, and what they cost you
UTM parameters are query-string tags you append to a URL so your analytics can report where a visitor came from. Five of them exist, three matter, and they cost you something real: every variant is a distinct URL, which fragments caching, share counts and any per-URL metric.
Worth using deliberately rather than by default.
The five
https://example.com/page/?utm_source=newsletter&utm_medium=email&utm_campaign=july-launch
utm_source — where specifically. newsletter, twitter, partner-site. The one you’ll actually
read in reports.
utm_medium — the channel category. email, social, cpc, referral. Useful for grouping.
utm_campaign — which effort this belongs to. july-launch, black-friday.
utm_term — the paid keyword. Only relevant for paid search.
utm_content — which variant, for distinguishing two links in the same message.
Source, medium and campaign do nearly all the work. The other two are for cases where you specifically need them.
Consistency is the whole discipline
The values are free text, and free text drifts. twitter, Twitter, twitter.com and x become four
sources in your reports, splitting the traffic you were trying to measure.
So write down a convention and stick to it:
- Lower case, always. Analytics tools frequently treat values case-sensitively.
- Hyphens, not spaces or underscores. Spaces become
%20and look broken when shared. - A fixed vocabulary for
medium. Four or five values, decided once. This is the field that benefits most from constraint. - A dated or named scheme for
campaign, so you can find it later.
A short document listing your allowed values is more valuable than any tooling here. The failure mode isn’t technical, it’s that three people tag links three ways.
What tagging costs
URL fragmentation. Each variant is a distinct URL. Platforms that count shares per URL count them
separately, so one page’s engagement splits across five addresses. Some platforms use og:url to
consolidate, which is a good reason to set it to the clean canonical address regardless of tagging.
Ugly links. A URL with three parameters looks like tracking, because it is. Some people won’t click it. In contexts where the link is visible as text, this is a real cost.
Copy-and-paste spread. Someone shares your utm_source=newsletter link on a forum. Now forum
traffic reports as newsletter traffic, and your data is wrong in a way that’s hard to notice.
Cache fragmentation. Caches keyed on the full URL treat each variant as a separate resource. Usually minor, occasionally not.
Analytics noise. Page reports fill with variants of the same page unless you configure stripping.
None is a reason not to tag. They’re reasons to tag where you’ll use the data and not elsewhere.
Where tagging is worth it
Email. You genuinely can’t tell email traffic from direct otherwise, because most email clients send no referrer. This is the strongest case.
Paid placements. You’re paying; you want to know what you got.
Specific campaigns with a beginning and an end, where you’ll actually look at the numbers.
A/B tests of the same destination, where utm_content distinguishes variants.
Where it usually isn’t
Your own internal links. Tagging links between your own pages corrupts your session data — a visitor appears to arrive from a new source mid-visit. Never tag internal links.
Organic social posts, if your analytics already identifies the referrer. Social platforms usually send one. Tag if you want to distinguish your posts from other people’s shares; skip if you don’t.
Links you expect to be re-shared. The parameters travel with the copy-paste and misattribute everything downstream.
Anything you’d link from documentation or a long-lived page. The campaign ends, the link doesn’t.
Set og:url to the clean address
This is the mitigation that makes tagging much less costly:
<meta property="og:url" content="https://example.com/page/">
Not the tagged variant — the canonical one. Platforms that use og:url for consolidation then treat all
your tagged variants as one page, and shares of the tagged link accumulate against the real address.
Same reasoning as rel="canonical" for search engines, and both should point at the same clean URL.
Strip them where they don’t belong
Two hygiene habits:
Configure your analytics to strip UTM parameters from page paths so reports show pages, not variants. Most tools do this or can be told to.
Don’t let tagged URLs become your canonical ones. If a tagged link ends up in a sitemap, a
navigation menu, or a rel=canonical, the tracking parameter has escaped into your site’s structure —
which is a nuisance to unpick later.
The reasonable position
Tag email and paid links, where the data is otherwise unavailable. Use a short fixed vocabulary. Set
og:url to the clean address so shares consolidate. Never tag internal links. Skip tagging where you
won’t read the result.
Tagging everything by reflex produces fragmented URLs and reports nobody reads. Tagging the two or three channels where attribution is genuinely ambiguous produces information you’ll use.