UTM Naming Convention: The System That Keeps Analytics Clean
If you've been running campaigns for more than a few weeks, you've seen it: a
dashboard where utm_source contains Newsletter, newsletter, NL, email-news,
and newsletter-july — all meaning the same thing. Every person on the team
invented their own shorthand, and now the "source" report is unusable without a
spreadsheet decoder.
The fix is not a better tool. It's a naming convention — a single, written, enforced system that everyone copies. This guide gives you that system: the exact value tables, the rules that keep it consistent, and how to enforce it with automation so it survives team handoffs and turnover.
Why a convention actually matters
UTM parameters are just labels, but they power the decisions that spend money. When your labels are inconsistent, you get four concrete problems:
- Split attribution. The same email program shows up as three "sources," so it looks like none of them is performing — and you cut a channel that was actually your best.
- Noise in every report. Every slice by source/medium/campaign gets inflated with near-duplicate rows.
- Broken filtering. You can't write a reliable segment or exclude a bot pattern when the same value has five spellings.
- Rework. Someone eventually has to clean it up in the BI layer, which is a tax on every future report.
A convention is cheap to write and it pays back on the very first real report.
The core rule: lowercase, no spaces, use hyphens
The single most important rule — the one that prevents 80% of the mess — is:
All values are lowercase, use hyphens between words, and never contain spaces, underscores, or punctuation.
- ✅
utm_source=newsletter - ✅
utm_source=facebook - ❌
utm_source=Newsletter - ❌
utm_source=email_news - ❌
utm_source=newsletter-july-2026(put the date in the campaign, not the source)
Lowercase matters because Google Analytics (and most platforms) treat values as
case-sensitive. Newsletter and newsletter are two different rows. Standardizing
on lowercase means one row per real source.
The standard value tables
Here is the exact vocabulary to standardize on. These are the values your team should treat as the only allowed inputs.
utm_source — the platform or publisher
newsletter (your own email list)
facebook (any Meta placement)
instagram
linkedin
twitter (X)
google
bing
youtube
tiktok
podcast
sms (text campaigns)
whatsapp
qr (printed or displayed QR codes)
print (offline, non-QR print)
event (in-person events)
partner (affiliate or partner sites)
direct (typed or bookmarked, rarely used with UTM)
utm_medium — the channel type
email (owned email, incl. newsletters + lifecycle)
social (any social platform)
cpc (paid search / paid clicks)
organic (unpaid search)
referral (links from other sites)
qr (scanned codes)
sms (text)
display (paid display / banner)
push (browser or app push)
offline (print, event, physical)
The clean separation is: source = where it is, medium = what kind of channel it
is. utm_source=facebook&utm_medium=social reads naturally, and it lets you
report by medium (all social) or by source (Facebook specifically) without
guessing.
utm_campaign — the campaign name
Campaigns should be snake-kebab, lowercase, and specific but short. A strong pattern that survives handoffs:
{product-or-initiative}-{goal}-{period}
Examples:
august-digest (the recurring monthly newsletter)
spring-sale-2026 (a seasonal promo)
ebook-link-rotting (a content-gating campaign)
feature-launch-2fa (product launch)
Do not put the date, the source, or the medium in the campaign name — that data lives in the other parameters. The campaign is the what, not the where or the when.
utm_content and utm_term
Use these sparingly — they're the most commonly abused fields.
utm_contentdifferentiates versions within a campaign:header-banner,sidebar,cta-blue,hero. Use it for A/B tests or multiple placements.utm_termis for the keyword or search term in paid campaigns. For most organic and owned channels, leave it empty. An empty value is cleaner than a made-up one.
Building a URL correctly
If you're assembling UTM URLs by hand, you'll make typos. Use a builder — either yas.sh's UTM Builder, or build them into your short links so the parameters are applied once and reused.
When you create a short link for a campaign, apply the UTM parameters once at the destination, then share the short URL everywhere. That way:
- Every click on the short link carries the same clean parameters (no drift).
- You can change the destination without changing the tracking.
- Reports stay tidy because there's exactly one row per source/medium/campaign.
Example of a correct, complete campaign URL:
https://example.com/blog?utm_source=newsletter&utm_medium=email&utm_campaign=august-digest&utm_content=feature-link
Enforcing the convention (so it survives)
A convention that lives only in a Google Doc is a convention that gets ignored after two weeks. Enforce it in the tooling:
- Use a builder with fixed dropdowns. If people type free-form, they'll invent
values. A builder that only offers
newsletter,facebook, etc. removes the choice and the error. - Validate on ingest. If you import campaign URLs from spreadsheets or a CRM,
run a check that flags any
utm_source/utm_mediumvalue not on the allowlist. Reject or quarantine rows that don't match. - Review once a quarter. Report on the number of distinct
utm_sourcevalues. If it keeps growing, your enforcement is leaking — tighten the dropdowns. - Name one owner. Attribution is nobody's job when it's everyone's. Assign a single person (usually the analytics or marketing-ops owner) who owns the vocabulary table and can approve new values.
Common mistakes (and how to avoid them)
| Mistake | Example | Fix |
|---|---|---|
| Mixed case | utm_source=Newsletter |
lowercase rule |
| Spaces / underscores | email_news |
hyphens only |
| Date in source | newsletter-july |
date goes in campaign |
| Redundant campaign | campaign=newsletter-july-email-sale |
campaign = what, not where/when |
Overusing utm_term |
inventing keywords for organic | leave empty |
| Hand-typing URLs | typos and drift | use a builder + short links |
The takeaway
UTM tracking is free and powerful, but it only stays powerful if the labels stay consistent. Adopt the three rules — lowercase, hyphens, source/medium separation — put the values in a builder, and enforce them in your tooling. Do that and your attribution reports will be readable for years, even as your team changes.
If you build your campaigns through short links, apply the parameters once and reuse the link everywhere. That single habit is the difference between a clean dashboard and a spreadsheet-decoder situation.
