UTM hygiene

A naming convention your future self will thank you for

Updated Sep 29, 2026

Five mismatched hand-written tags passing through a gate and emerging as one neat row of identical tags

How one channel becomes three rows

Open the source report of almost any analytics property that is more than a year old and you will find the same channel listed several times: Facebook, facebook, FB, maybe fb-paid and Facebook Ads as well. Every analytics tool treats UTM values as case-sensitive strings, so each spelling is a separate row, and every chart that groups by source quietly splits one channel across five. Nobody decided this. Five people built links on five days, each picked a spelling that looked right, and the reports have been lying by fragmentation ever since.

The fix is not "be more careful". Careful does not survive a new hire, an agency, or a Friday afternoon. The fix is a convention small enough to remember, and a place in the pipeline where it gets enforced without anyone remembering it.

The five parameters, and the three that matter

ParameterWhat it answersUse it
utm_sourceWhere did the click come from? A platform or propertyAlways
utm_mediumWhat kind of channel is that?Always
utm_campaignWhich effort is this part of?Always
utm_contentWhich variant within the campaign? Button, banner, slotWhen you test variants
utm_termWhich keyword? Paid search onlyPaid search only

Source, medium and campaign carry nearly all the value. Content is for A/B distinctions inside one placement. Term exists for paid search and is noise anywhere else.

A convention that scales

Three rules cover almost every link a marketing team will ever build:

  1. utm_source is the platform, lowercase, one word. newsletter, linkedin, packaging, partner-acme. It names where the link lives, never what kind of thing it is.
  2. utm_medium comes from a fixed, short list. email, social, paid-social, paid-search, qr, referral, print. Six to ten values, agreed once, never extended casually. Most analytics tools map these onto their default channel groupings, so a made-up medium lands in "Other".
  3. utm_campaign starts with a date and ends with a slug. 2026-q4-launch, 2026-11-black-friday. The prefix keeps campaigns sortable and makes stale links obvious in a report. Kebab-case, no spaces, no capitals.
utm_source=Facebook&utm_medium=Social Media&utm_campaign=Summer Sale 2026
utm_source=fb&utm_medium=social&utm_campaign=summer_sale
utm_source=facebook.com&utm_medium=cpc&utm_campaign=SummerSale

The "before" lines are three attempts at the same campaign. The "after" lines are two, because paid and organic on the same platform are genuinely different channels, and the medium is where that difference belongs.

The long, tagged URL is the thing people copy wrong. It is also the thing nobody should ever see. Wrap it in a short link and two problems disappear at once: the URL that gets pasted into a bio, a slide or a print run is go.example.com/launch, and the tagged destination lives in exactly one place where it can be checked, corrected and re-pointed.

That single place is also where the parameters should be checked. On rii.link you set the tags once, on the link's destination, with the Campaign tags (UTM) builder: it trims every value, lowercases source and medium, and replaces a tag already on the URL instead of adding a second one. The short link stays clean and there is only one copy of the tags to get right. Because every visitor passes through the redirect, a correction to the destination fixes every copy of the link that was ever shared, including the ones on paper.

Sometimes parameters arrive with the visitor instead: an ad platform appends its own click id, or a partner adds their tag to your short link. The redirect's Append original query params switch passes those through to the destination unchanged, so the short link does not strip attribution that someone else added. It is off by default, so turn it on where partners tag your links.

Route on the parameter you tagged

Once source and medium are reliable, they become inputs, not just labels. On Premium, a rii.link redirect can branch on a query parameter, which turns the tagging convention into routing logic: send utm_source=packaging visitors to a page written for someone holding the product, and utm_medium=email visitors to the page that continues the newsletter's argument. rii.link's analytics still count the tag, because they read it from the short link itself; the visitor gets a better page because you finally know who they are.

Audit what you already have

A convention only helps going forward. The historical mess needs one honest pass:

  • Pull the source and medium breakdown for the last twelve months from your web analytics' source/medium report. rii.link's Campaign tags breakdown shows both the tags on the short link that was clicked and the tags on the destination it sent people to, but the dashboard view covers at most the last 30 days, so it is a spot check, not the archive.
  • Lowercase everything and group. The five-way Facebook split usually collapses to two rows, paid and organic.
  • List every medium that is not on your fixed list. Each one is either a mapping (cpc means paid-search) or a link to fix.
  • Re-point the short links that are still live to the corrected destinations. Old posts and old print keep working, and from that day the data is clean.

The checklist

  • Source: lowercase platform name, one word, no domain suffix.
  • Medium: one of a fixed list, agreed once, mapped to your analytics tool's channel groups.
  • Campaign: date prefix, kebab-case slug.
  • Content and term: only when they answer a real question.
  • Every tagged URL lives behind a short link, and the tags are applied where the link is built.
  • Forward incoming parameters so partners' and ad platforms' tags survive the hop.

Written by

Florian

Florian builds rii.link, the routing layer behind short links: redirects, dynamic responses and links that answer AI agents. He writes The Redirect about what happens between a click and its destination.

On this page