UTM parameter
A tag added to a link so analytics can credit the right campaign.
Query parameters appended to a destination URL and read by analytics tools to classify a visit: utm_source, utm_medium, utm_campaign, utm_term and utm_content. The convention comes from Urchin, the product Google bought in 2005 and turned into Analytics.
?utm_source=newsletter&utm_medium=email&utm_campaign=spring_launch
Source, medium and campaign are the three that matter. Term and content are optional.
Key takeaways
- Case-sensitive. Facebook, facebook and FaceBook are three sources forever, and nothing downstream can merge them after the fact.
- Medium is the field with real semantics: GA4 reads it to assign the channel grouping, and an invented value lands in unassigned.
- Never tag internal links. It restarts attribution mid-visit and destroys the original source.
- They are visible in the address bar, so client codenames and internal project names do not belong in them.
- Write the convention down and generate links from it. Ten minutes of governance prevents a permanent mess.
What each field is for
Five parameters, of which three carry the weight. The other two are useful on large campaigns and safely omitted on small ones.
- utm_sourceWhere the visit came from, as a specific property: newsletter, linkedin, partnersite. Not a category.
- utm_mediumThe kind of traffic, and the one field with real semantics. GA4 reads it to assign the channel grouping, so it has to match a value the grouping recognises: cpc, email, social, referral, affiliate.
- utm_campaignWhich campaign this belongs to, so several sources roll up to one initiative.
- utm_termOptional. Originally the paid keyword; mostly redundant now that platforms auto-tag.
- utm_contentOptional. Which creative or which link within the same email, for distinguishing two links to the same destination.
Case sensitivity, and why inherited accounts are a mess
UTM values are case-sensitive and are not normalised anywhere in the pipeline. Facebook, facebook and FaceBook produce three separate rows in every report that touches them, for as long as the property exists.
Nothing downstream fixes this. GA4 will not merge them, and historical data cannot be rewritten, so the split is permanent. A year of links tagged by four people with no convention produces a source report where the same channel appears half a dozen times and no single row reflects its real volume.
This one detail accounts for a large share of the mess in inherited analytics accounts, and it is entirely preventable and entirely unfixable in that order.
The rule is lowercase everything, no spaces, no punctuation beyond hyphens or underscores, and pick one of those two and never the other. Which convention hardly matters; that there is one, and that links are generated from it rather than typed, is what matters.
Medium is the field that decides the channel report
Source and campaign are labels you choose. Medium is read by GA4 to assign the default channel grouping, which means it is the field with consequences beyond its own column.
Values the grouping recognises land where you expect: cpc goes to paid search, email to email, organic to organic search. An invented value does not fail loudly, it lands in unassigned, and the campaign disappears from the channel report while still appearing in the source report.
That failure mode is quiet enough to survive for months. The traffic is measured, the sessions are counted, and the channel view, which is what most reporting is built on, is simply missing it.
So the medium value is not a place to be descriptive. newsletter is a source; email is the medium. Being specific belongs in source and campaign, where nothing downstream depends on the string.
The two places they cause damage
Internal links are the first. Tagging a link from one page of a site to another restarts campaign attribution mid-visit: the original source is overwritten, and a visitor who arrived from organic search and clicked a tagged internal banner is recorded as having arrived from that banner. The channel that actually earned the visit loses it.
This happens most often with well-meant internal promotions, and the fix is simply not to do it. Measuring internal clicks is a job for events, not for UTMs.
The second is the address bar. UTM values are visible to the visitor, quoted in shared links, and indexed if the page is linked from anywhere. Internal codenames, client names on an unannounced account and anything describing a segment in unflattering terms all end up in public.
They also generate URL variants, which is why they interact with canonical tags: every tagged link is a distinct address, and without self-referencing canonicals those variants compete with the page they were meant to promote.
What it means for an agency
Write the naming convention down, keep it in one shared sheet, and generate links from it rather than by hand. It is ten minutes of governance that prevents a permanent, unfixable mess in the client historical data.
Where it goes wrong
- Tagging internal links with UTMs, which restarts attribution mid-visit and destroys the original source.
- Using utm_medium values that do not map to a channel grouping, then wondering why traffic is unassigned.
- Letting several people tag by hand, which produces the same source in four capitalisations forever.
- Putting client codenames or internal segment names in a field the visitor can read in the address bar.
In short
UTM tagging is the cheapest governance in marketing and the most expensive thing to fix late, because the damage is written into history and cannot be edited. A shared sheet and a link generator, agreed in the first week, are worth more than any amount of analysis done afterwards.
Frequently asked questions
Are UTM parameters case-sensitive?
Yes, and nothing in the pipeline normalises them. Facebook, facebook and FaceBook produce three separate rows in every report, GA4 will not merge them, and historical data cannot be rewritten. This is the single biggest cause of mess in inherited analytics accounts, and it is both entirely preventable and entirely unfixable afterwards.
Why is my tagged traffic showing as unassigned?
Almost always the medium value. GA4 reads utm_medium to assign the default channel grouping, and a value the grouping does not recognise lands in unassigned rather than failing visibly. The traffic is still counted in the source report, so the problem can survive for months in reporting built on channels. Use the recognised values, and put the descriptive detail in source and campaign.
Should I put UTMs on internal links?
No. Tagging a link between two pages of the same site restarts campaign attribution mid-visit and overwrites the original source, so a visitor who arrived from organic search and clicked a tagged internal banner is recorded as arriving from the banner. Measure internal clicks as events instead.
Do UTM parameters hurt SEO?
Only if canonicals are missing. Every tagged link creates a distinct URL, and without a self-referencing canonical naming the clean address those variants compete with the page itself. With canonicals in place they consolidate and cost nothing. Worth checking before pointing a campaign at a page that already ranks.
Related terms
Sources
Last reviewed
Keplent keeps track of these for you.
It holds what each client agreed to, watches what their campaigns actually did, and tells you in plain sentences what needs you this week.
Join the waitlist