Every analytics account degrades the same way: six months of untracked ad-hoc tagging, and now you have Twitter, twitter, twitter.com and tw as four separate sources that can never be merged.
A convention prevents it. It has to be written down, and it has to be short enough that people follow it.
The convention
Lowercase, always. UTM values are case-sensitive. This single rule prevents most duplication.
Hyphens, never spaces or underscores. Spaces become %20 and look broken in every report.
No brand names in medium. Medium is a channel category, not a platform.
Allowed mediums
Use only these. They map to the built-in channel groupings in every analytics tool:
| Medium | Use for |
|---|---|
email | Newsletters, drip sequences, transactional |
social | Organic posts on any social platform |
referral | Directories, partner sites, launch boards |
cpc | Paid search |
display | Paid banner and programmatic |
affiliate | Affiliate and partner links |
qr | Physical QR codes |
Invent a new one and the traffic falls out of standard channel reports into "unassigned".
Source
The specific property, lowercase, no TLD: producthunt, hackernews, x, linkedin, reddit, mailchimp.
Keep a list. Adding to it is fine; using a variant of an existing entry is not.
Campaign
A consistent format. Two that work:
launch-week-35
2026-q3-pricing-test
Date-prefixed sorts chronologically in reports, which is worth more than it sounds when you have two years of campaigns.
Content
Only when you need to distinguish two links in the same place: hero-button, footer-link, email-p2.
Rules that prevent real damage
Never tag internal links. A UTM on a link between two of your own pages starts a new session and overwrites the original attribution. The visitor who arrived from a newsletter and clicked a tagged internal link is now attributed to that internal link. Use event tracking for internal experiments.
Never tag a link in something permanent. Email signatures, README files and docs outlive their campaign, and a 2024 campaign name in this quarter's report is noise.
Tag the actual landing page. If your launch link goes to a dedicated page, tag that URL. Tagging only the homepage means you cannot compare landing pages.
Set a canonical on every page. A tagged URL is a distinct URL to a crawler. Without a canonical, ?utm_source=newsletter can get indexed and compete with the clean URL.
Keeping it enforced
Build links from one place. A shared builder or a single spreadsheet, not ad hoc in the browser bar. Most inconsistency comes from someone typing a value from memory.
Write the convention in the repo. Three lines in a README beats a document nobody opens.
Audit quarterly. Sort your source and medium reports alphabetically. Near-duplicates jump out immediately - and while you cannot merge historical rows, you can stop creating new ones.
Do not add parameters you will not analyse. utm_term and utm_content on every link produce a report so fragmented nobody reads it.
The value of a convention is entirely in consistency, not in cleverness. A mediocre taxonomy applied consistently produces readable reports; a perfect one applied half the time does not.
Launch it where the numbers are checked
RankCert ranks products on domain control we verify ourselves. Listing is free and the link stays dofollow whether or not you display the badge.
