UTM Naming Conventions: Rules & Examples
The four naming rules
The core convention is short: lowercase everything, replace spaces with hyphens, pick values from a fixed list, and write that list down. UTM parameters are case- and character-sensitive, so analytics treats Email and email as different sources. Almost every broken-attribution story traces back to ignoring one of these four rules.
1. Always lowercase
Force every value to lowercase before it ever reaches a URL. Because the values are case-sensitive, Facebook, facebook, and FACEBOOK become three separate sources and scatter one channel across three rows. Lowercase is the simplest rule to enforce and prevents the most common mistake.
2. No spaces: use hyphens
A space in a UTM value is encoded as %20, producing ugly, error-prone URLs. Replace spaces with a single separator (hyphens are the most readable choice) and use that separator everywhere. Pick - or _ as a team and never mix the two.
3. One controlled vocabulary per parameter
Each parameter should draw from a short, pre-approved list of allowed values rather than free text. If medium can only ever be email, cpc, social, organic, or referral, then nobody can invent e-mail or paid-social and quietly fragment the data.
4. Be consistent and document it
Consistency is the rule that makes the other three stick. The exact same campaign should always carry the exact same tags, every time, from every person. The only reliable way to guarantee that across a team is to document the conventions and route every link through one builder.
Building a controlled vocabulary
A controlled vocabulary is a fixed list of permitted values for each of the five parameters, agreed once and reused forever. It is the single most valuable UTM habit: it turns naming from a judgement call into a lookup, so the same channel, campaign, or creative is always spelled identically.
Decide the allowed values per parameter, keep the list short, and resist adding new ones casually. Below is a typical starting structure; adapt the actual values to your own channels.
| Parameter | What it captures | Example controlled values |
|---|---|---|
utm_source | The specific platform or property | google, facebook, linkedin, newsletter |
utm_medium | The channel type | cpc, email, social, organic, referral |
utm_campaign | The named initiative or offer | spring-sale-2026, q3-webinar, brand-launch |
utm_content | The variant, placement, or creative | hero-cta, sidebar, variant-a |
utm_term | The paid keyword (optional) | marketing-automation, utm-builder |
Source, medium, and campaign should appear on nearly every tagged link. Content and term are optional: add content when you need to tell two creatives or placements apart, and term mainly for paid-search keyword tracking.
Good vs bad examples
The fastest way to internalise the rules is to see them broken. In each pair below the value carries the same intent; only the formatting differs, and the bad version is what silently splits your reports.
| Bad | Good | Why |
|---|---|---|
utm_source=Facebook | utm_source=facebook | Mixed case creates duplicate sources |
utm_campaign=Spring Sale | utm_campaign=spring-sale | Spaces become %20 and break the URL |
utm_medium=paid-social | utm_medium=social | Off-vocabulary value fragments the channel |
utm_source=fb&utm_source=facebook | utm_source=facebook | Aliases for the same platform split the data |
utm_campaign=campaign1 | utm_campaign=q2-demo-push | Vague names are unreadable in reports later |
A clean, fully tagged link reads almost like a sentence: https://example.com/?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale-2026&utm_content=hero-cta. It is lowercase and hyphenated throughout, and every value is drawn from the approved list.
Documenting it in a sheet
Keep one shared, link-accessible spreadsheet as the single source of truth for both the conventions and the links themselves. A convention that lives only in someone's head is a convention that erodes the moment they're on holiday; a documented one survives team changes and onboarding.
A simple two-tab structure works well for most teams:
- Tab 1, Vocabulary. One column per parameter listing the allowed values. This is the reference everyone checks before inventing a new label.
- Tab 2, Link log. One row per campaign URL with the source, medium, campaign, content, the destination page, and the date created, so any link can be traced back later.
Documentation alone won't stop typos, though. The durable setup is the sheet plus a builder that mechanically enforces the rules, so the conventions are applied automatically rather than relying on each person to remember them.
Frequently asked questions
Should UTM parameters be uppercase or lowercase?
Always lowercase. UTM values are case-sensitive, so writing Email or email or EMAIL registers as three separate sources in your analytics and splits one campaign across multiple rows. Standardising on lowercase everywhere removes that whole class of error and keeps reports clean.
How do I handle spaces in UTM values?
Never use raw spaces. A space becomes %20 in the URL, which looks broken and is easy to mistype. Replace spaces with hyphens or underscores and stick to one separator across the whole team, for example spring-sale rather than spring sale or spring%20sale.
What is a UTM controlled vocabulary?
A controlled vocabulary is a fixed, pre-approved list of allowed values for each parameter, for example only google, facebook, or linkedin for source. Everyone picks from the list instead of inventing labels, so the same channel is always spelled the same way and never fragments your reporting.
Do I need to tag utm_term and utm_content?
Not always. Source, medium, and campaign are the three that matter most and should appear on nearly every link. Term and content are optional: use content to tell two creatives or placements apart in the same campaign, and term mainly for paid keyword tracking.
Where should I document our UTM conventions?
In one shared, link-accessible spreadsheet that everyone uses to build links. List the allowed values per parameter on one tab and log every campaign URL on another. A single source of truth, plus a builder that enforces it, prevents the typos that quietly break attribution.
Last updated: 14 June 2026