UTM Parameters Explained: Tag Campaign Links Properly
What utm_source, utm_medium, and utm_campaign actually mean, the naming mistakes that ruin reports, and a tagging convention that scales.
Open any analytics account that’s been running for a year and look at the traffic sources report. Odds are you’ll find Facebook, facebook, and facebook.com sitting in three separate rows — the same channel, split three ways because nobody agreed on how to tag links. That’s the whole problem UTM parameters solve, and also the problem they create when used carelessly.
Where UTM tags come from
UTM stands for Urchin Tracking Module. Urchin was a web analytics company Google bought in 2005 and turned into Google Analytics. The product is long dead; its five query parameters outlived it and became the standard everyone reads — GA4, Yandex Metrica, Matomo, Plausible, plus most CRMs.
The idea is simple. You append a few parameters to a link you’re about to publish:
https://example.com/sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring_2026
When someone clicks, your analytics tool records where that visit came from. Without the tags, a click from an email app usually shows up as “direct” — indistinguishable from someone typing your address by hand.
What each parameter means
utm_source— the specific place the link lives: google, facebook, newsletter, a partner site’s name.utm_medium— the channel type: cpc for paid clicks, email, social, banner.utm_campaign— your name for the effort: spring_sale_2026, product_launch.utm_term— the paid keyword. Mostly relevant for search ads, and ad platforms can fill it automatically.utm_content— which variant of the ad or link was clicked: banner_a vs banner_b, or “header link” vs “footer link” in the same email.
Source and medium answer different questions, and mixing them up is the most common mistake I see. Facebook is not a medium. A Facebook ad is source=facebook, medium=paid_social. An unpaid post on the same platform is source=facebook, medium=social. Same site, different channel — and your report should show that difference.
Naming rules that keep reports clean
Analytics tools compare UTM values as raw strings. Spring_Sale and spring_sale become two campaigns, forever, and no setting will merge them retroactively. So:
- Lowercase everything.
- Pick one separator (underscore or hyphen) and stop thinking about it.
- No spaces. A space turns into
%20and makes reports ugly at best. - Keep a shared spreadsheet of the values your team uses. Boring, yes. It works.
One more rule that surprises people: never put UTM tags on internal links between pages of your own site. Clicking a tagged internal link starts a new session attribution — the visitor who arrived from a Google ad suddenly counts as newsletter traffic, and the ad loses credit for the conversion.
Do tagged links hurt SEO?
Not by themselves. Google treats query parameters fine, but if tagged URLs get indexed you end up with duplicate versions of the same page in search. In practice this rarely matters because UTM links belong in ads, emails, and social posts, not in places crawlers follow. A canonical tag on the page covers the edge cases.
Building the links
You can type the parameters by hand, but one typo — utm_sourse, a stray capital, a space — quietly corrupts your data for the whole campaign run. A form is safer. Our UTM Campaign URL Builder assembles the link as you type, encodes special characters, keeps any query parameters your URL already has, and runs entirely in your browser.
Tag the next link you publish, wait a day, and check the acquisition report. Seeing the campaign show up by name beats guessing which of your channels actually works.