# UTM naming conventions that survive contact with a real team

> Lowercase everything, use hyphens, and restrict medium to the standard values analytics tools recognise: email, social, referral, cpc, display, affiliate. Build every link from one place, and never tag internal links - it overwrites the original attribution.

Source: https://rankcert.com/blog/utm-naming-conventions
Published: 2026-08-29 · Updated: 2026-08-29

---


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`.

Free tool: [UTM Builder](https://rankcert.com/tools/utm-builder) - Build tagged campaign URLs with consistent utm_source, utm_medium and utm_campaign values so your launch traffic is actually attributable.

## 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.

<Callout>
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.
</Callout>

<Cta />
