What are UTM parameters?
UTM parameters are short labels you append to a URL so your analytics tool can tell you where each visitor came from. They are the difference between a report that says "1,400 visits from google.com" and one that says "620 visits from the spring-sale newsletter, 480 from LinkedIn post #3, 300 from a partner banner".
The name is history, not marketing: Urchin Tracking Module — Urchin was the analytics company Google bought in 2005 and turned into Google Analytics. The convention outlived the product and is now understood by essentially every analytics platform.
The five parameters that matter
| Parameter | Question it answers | Good values |
|---|---|---|
utm_source | Who sent the traffic? | newsletter, linkedin, partner-blog |
utm_medium | What kind of channel? | email, cpc, social, referral |
utm_campaign | Which initiative? | spring-sale-2026, product-launch |
utm_term | Which paid keyword? | crm+software |
utm_content | Which creative/link variant? | cta-top, banner-a vs banner-b |
Only utm_source and utm_medium are effectively required — without them your analytics tool buckets the visit into "(direct)" or "unattributed". The rest are optional but powerful: utm_content is what makes A/B comparisons possible ("the green button won, 2.3× more clicks").
A worked example
Base URL:
https://fernandeslabs.com/tools/json-formatter
Tagged for a LinkedIn post promoting it as part of a launch campaign:
https://fernandeslabs.com/tools/json-formatter
?utm_source=linkedin
&utm_medium=social
&utm_campaign=launch-week
&utm_content=post-dev-tools
Every click on that exact link is now separable in your reports from every other LinkedIn click. Build variants of it in seconds with the Campaign URL Builder — it constructs the URL and keeps the parameter names consistent.
Naming conventions: where analytics goes to die
UTM parameters are case-sensitive and literal in most analytics tools. These three values create three separate report rows for the same newsletter:
utm_source=Newsletter
utm_source=newsletter
utm_source=NEWSLETTER
Pick a convention and enforce it mechanically:
- All lowercase, always (
spring-sale, neverSpring-Sale). - Dashes, not spaces — spaces must be encoded (
spring%20sale) and are invisible in copied links. - No PII — no emails or names in parameters; many tools strip or block them, and it leaks data in referrer headers.
- A fixed medium vocabulary —
email,social,cpc,referral,qr. If one campaign sayssocial-paidand the next sayspaid-social, your channel report splits in two. - Dates in campaign names, not sources —
launch-2026-09expires naturally;linkedin-2026as a source does not.
Teams that skip this end up with reports listing 40 variations of Facebook and no way to merge them after the fact.
Sponsored
Encoding: the silent report killer
URLs can only contain a limited character set. Anything else — spaces, &, +, non-Latin characters — must be percent-encoded. Two failure modes are common:
- Unencoded ampersands inside values.
utm_campaign=spring&saleproduces campaignspringplus a broken parametersale. If your campaign name contains&, use a dash:spring-sale. - Double encoding. An encoded value that gets encoded again turns
spring-saleintospring%252Dsalein reports. This happens when a URL passes through multiple systems (email service → redirect → landing page) and gets "helpfully" encoded at each hop.
If you are building tagged links by hand, run the result through the URL Encoder / Decoder and decode it again to see exactly what a browser will receive. Or skip hand-building entirely: the Campaign URL Builder and UTM Builder encode correctly as they go.
QR codes are UTM campaigns too
A printed QR code is a tracked channel like any other — and unlike a link in an email, you cannot change the destination after printing. Tag the URL inside the QR code:
https://fernandeslabs.com/tools/qr-generator
?utm_source=poster
&utm_medium=qr
&utm_campaign=conference-2026
&utm_content=booth-banner
Two rules make QR attribution work:
- Always use a unique campaign/source (
utm_medium=qrseparates scans from web clicks in the same report). - Shorten before generating — every parameter adds characters, and more characters mean a denser, harder-to-scan code. The QR Campaign Generator builds the tagged URL and the code together, so the tag survives to print.
Because the code on the banner is fixed, utm_content=booth-banner vs utm_content=flyer is how you later tell which physical placement actually drove visits.
Do UTM parameters hurt SEO?
No — with one caveat. Google treats tagged URLs as separate addresses from the canonical page. As long as your pages declare a canonical URL (the tagged parameters are stripped from the canonical), link equity consolidates on the clean URL and the tagged variants do not compete in search results. Publish links with UTMs freely on social and in email; just verify your CMS emits self-referencing canonicals (the Canonical URL Checker confirms it in one paste).
A 30-second pre-flight checklist
Before you publish a tagged link:
- All lowercase, dashes for spaces?
utm_sourceandutm_mediumpresent, with values from your fixed vocabulary?- URL decodes to exactly the parameters you intended?
- Opened the link in a private window — does it land on the right page?
- For print/QR: unique source, short URL, generated from the final tagged address?
Clean UTM data is not a reporting nicety — it is the input to every "which channel should we double down on" decision you will make next quarter. Tag deliberately, and the answer is sitting in your analytics instead of buried under forty spelling variants.
Related free tools
Try these free online tools — all run in your browser with no sign-up.
Keep reading
More hand-written guides from the blog.