← ALL GUIDES

UTM Naming Conventions That Don't Fall Apart

A concrete UTM naming scheme — lowercase, dashes, a fixed vocabulary per field — and the free builder + checker that keeps your whole team on it.

LAST UPDATED AUG 20, 2026 · 8 MIN READ

Somewhere around month three, you open the campaign report and find "email", "Email", "e-mail", and "newsletter" each sitting in its own row like four separate channels. Same emails. Same audience. Same links, even. But the report treats them as strangers, and now someone has to export the data, fix the labels by hand, and quietly wonder which numbers to trust.

Nobody did anything wrong here. Sarah tagged her links the way she'd tag anything. Marcus capitalized because it looked cleaner. The agency used "e-mail" because that's their house style. Every individual choice was reasonable. But UTM parameters are dumb text fields, and dumb text fields do exactly what you type into them. There was never a convention to break, which is precisely how it broke.

We cover the full journey from click to conversion in our complete link tracking guide, and UTMs are the part of that journey where teams stumble most, because the failure is invisible until the data is already corrupted.

The fix is smaller than you'd expect. A handful of rules, a short vocabulary, and something that actually enforces both. That's this page.

The rules that prevent 90% of the mess

There are only four rules. That's the whole trick. Conventions with twenty rules die because nobody remembers rule fourteen, so keep the list short enough to hold in your head while you're building a link at 4:55 on a Friday.

Rule one. Lowercase everything. Analytics tools are case-sensitive, which means "Facebook" and "facebook" are two different sources as far as your reports are concerned. Case adds zero information and infinite ways to split your data, so remove the choice entirely. If you never allow a capital letter, you never have to remember which version you used.

Rule two. Dashes inside values, never spaces or underscores. A space in a URL gets encoded as %20, and now your campaign is named spring%20sale in every report. Underscores work technically, but they blend into utm_source and friends when you're scanning a URL, and half the team will use them while the other half uses dashes. Pick dashes. Everywhere, forever. spring-sale, not spring sale, not spring_sale, not SpringSale.

Rule three. A fixed short vocabulary per field. Every field gets a small list of allowed values, and only values on the list are legal. Not "try to be consistent", an actual list. Think of it like a menu at a restaurant instead of an open kitchen — you can't order something that isn't on it, which is exactly the point. Source gets platform names. Medium gets a handful of channel types, and that's it. The next section gives you a starter vocabulary you can copy.

Rule four. Never invent a new value when an existing one fits. This is the rule people break with the best intentions. Someone tagging a partner mailout thinks "well, it's not really email email, it's more of a partner-blast" and mints utm_medium=partner-blast. Congratulations, your email channel just forked. New values should be rare, deliberate, and added to the shared list first, not improvised in the URL builder. If a value is 80% right, use it. Precision you can't compare against anything is just noise.

The same values, before and after the four rules:

CorruptedClean
utm_source=Facebookutm_source=facebook
utm_medium=E-Mailutm_medium=email
utm_campaign=Spring%20Saleutm_campaign=spring-sale
utm_medium=newsletterutm_medium=email
utm_campaign=launch_v2_FINALutm_campaign=launch-v2

Notice the left column isn't wrong in any obvious way. Every value there was typed by someone who understood what they were tagging. UTM decay is sneaky for exactly that reason. It isn't made of mistakes. It's made of reasonable choices that don't match each other, and four rules take those choices off the table so there's only one way to write each value.

Which is exactly how many ways there should be.

A vocabulary you can copy

Here's a starter convention you can paste into your team wiki today. It's deliberately small. A vocabulary with forty medium values is just chaos with extra steps; five values you can hold in your head is a convention people actually follow.

utm_source — where the click physically happened. Use the platform's name, lowercase, one word:

facebook
instagram
linkedin
twitter
youtube
google
newsletter
partner-site

That's it. Not fb, not FB, not facebook.com. One spelling per platform, forever. If you add a new platform, add it to the list first, then use it.

utm_medium — the type of channel. This is the field teams corrupt fastest, because it feels like a free-text box. It isn't. Five values cover almost everything:

email
social
cpc
qr
referral

Notice that paid-social, organic, banner, and e-mail didn't make the list. The medium answers one question, "what kind of pipe did this come through?", and pipes come in few kinds. Paid social is cpc with utm_source=facebook, and the combination tells you everything the mashed-together value would have.

utm_campaign — year, quarter, then a short name:

2026-q3-summer-sale
2026-q3-webinar-onboarding
2026-q4-black-friday

The date prefix does two jobs at once. It makes every campaign name unique without anyone checking a list, and it sorts your reports chronologically for free. Which is honestly one of those tiny decisions that pays you back every single week. The name part follows the same rules as everything else. Lowercase, dashes, short enough to read in a dashboard column.

A few edge cases, settled now so nobody debates them later:

  • Retargeting? Still cpc. Put the distinction in the campaign name, like 2026-q4-retargeting-cart.
  • A QR code in a print ad? utm_source is where it appeared (print-magazine, packaging), utm_medium=qr.
  • One-off partner mentions get utm_source=partner-site and utm_medium=referral — don't create a new source for a partner you'll tag twice a year.

Feel free to swap in your own platforms and drop the ones you never use. The specific words matter less than the shape. A closed list per field, a dated campaign pattern, and a written answer for every "but what about..." before it comes up. Adapt it once, then treat it as law.

A checker beats a document

So you've written the convention down. Great. Now that document is going to lose.

Not because anyone disagrees with it. Because it lives in a wiki nobody opens while building a link. The moment someone's rushing to get a campaign out the door, they type utm_medium=Email from memory, hit publish, and the convention quietly loses a round. Multiply that by every person on the team and every launch-day scramble, and six months later your spreadsheet of allowed values is a historical artifact.

A speed limit sign doesn't slow anyone down. The speed bump does.

That's why we built a checker into our free UTM builder. You type your values, and it flags problems as you type — a capital letter in utm_source, a space hiding in the campaign name, a medium that isn't in your vocabulary. Not after the link ships. Not in next month's report review. Right there, in the field, while the fix is one keystroke.

The vocabulary drift catch is the one that earns its keep. Capitals and spaces are easy to spot once you know to look. But newsletter sneaking in next to email looks completely reasonable in isolation, and it's exactly the kind of split that wrecks your channel reporting three months out. A checker that knows your allowed list catches it instantly, which is honestly the whole point of having an allowed list.

And because the builder is free and lives at a URL, the rollout is one sentence: "build every tracked link here." No training session, no laminated cheat sheet, no hoping people reread the wiki. New hire on day one produces the same clean values as the person who wrote the convention.

The document tells people what to do. The checker makes the wrong thing hard to do. Only one of those survives a busy Tuesday.

UTM builder with naming checker

Builds the tagged link and flags the naming mistakes that corrupt reports — capitals, spaces, vocabulary drift, swapped fields. Runs in your browser; nothing is sent or stored.

What clean naming unlocks downstream

The payoff shows up the first time you sort a report and it just... works. Every email click under email, every QR scan under qr, and when you compare two campaigns you're actually comparing two campaigns, not one campaign plus three misspelled ghosts of it.

Like with like — that's the whole prize. Campaign comparison only means something when the labels are stable. If spring's launch was tagged 2026-q2-spring-launch and fall's is 2026-q4-fall-launch, putting them side by side is a real question with a real answer. If one of them is Spring_Launch_FINAL_v2, you're not comparing performance anymore, you're doing archaeology.

Clean names also kill the manual cleanup pass, the ugliest recurring chore in marketing analytics. You know the one. Export to a spreadsheet, build a mapping table that says Email, e-mail, and newsletter all mean email, re-aggregate, and hope you caught everything. Every hour spent there is an hour spent fixing data that arrived broken, and the mapping table itself rots the moment someone invents a new variant.

With a fixed vocabulary, that spreadsheet never gets created. Reports group correctly on the first render because the grouping key was correct at the moment of the click.

There's a compounding effect here too. Once values are trustworthy, you can build on top of them. Grouping links into a campaign becomes a two-second job instead of a detective exercise, which is exactly what campaign management in Acturity leans on. It assumes your UTM values mean what they say, and clean naming is what makes that assumption safe. Filters, date-range comparisons, channel breakdowns, all of it inherits the quality of the names underneath.

And honestly, this is why the naming rules matter more than any individual parameter. If you want the deeper story on what each field does and where the data actually lands, the complete guide to UTM parameters walks through all five. But the parameters are just containers. The convention is what makes their contents worth reading.