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.
The parameters and their roles
A naming convention starts by fixing what the parameters mean so everyone uses them the same way. The core set is usually four:
utm_source— where the traffic came from (e.g.newsletter,facebook,google).utm_medium— the channel type (e.g.email,social,cpc,organic).utm_campaign— the specific marketing effort (e.g.spring-sale).utm_content— the specific link within a campaign, used for A/B variants (e.g.header-banner,cta-a).
Deciding each parameter's allowed values and casing in advance is what keeps the convention from fragmenting. A value that is lowercase, single-word, and documented means two people tagging the same campaign produce identical parameters; without the decision, they produce newsletter and Newsletter as two rows.
The structure of a good campaign name
The campaign name is the backbone of the convention, so give it a consistent structure. A common pattern encodes the key dimensions in a readable order — for example, channel-campaign-<variant> or campaign_region_channel — so that reading the name tells you what it represents and so it sorts and filters cleanly in the analytics tool. The structure should be documented and short enough to remain readable. This mirrors the short-code slug and folder naming disciplines: a consistent, readable name is an analytical asset, and a drifting, ad-hoc one is a liability.
How the convention keeps analytics clean
The payoff of a naming convention is clean, decision-ready analytics. When every parameter follows the agreed scheme, the analytics tool groups traffic into consistent rows, so reports are comparable across campaigns and over time. This is what makes campaign attribution and conversion tracking trustworthy — the numbers you compare were produced by the same rules. The convention is the quiet mechanism that keeps the whole reporting stack honest.
Keeping the convention alive
A convention drifts unless it is maintained. Document it in a shared reference, apply it through a link builder that pre-fills the scheme, review the analytics periodically for unexpected variations, and correct new ones before they spread. Like the UTM campaign guide, the discipline is deciding once and enforcing consistently. A maintained convention is what turns tagging from a source of noise into the foundation of trustworthy attribution.
