Home/ Guides/ UTM naming convention
Guide · UTM tracking
A UTM naming convention that keeps reports clean.
One inconsistent capital letter splits a campaign into three rows in GA4. Here's the simple, shareable convention — lowercase, hyphens, one finite taxonomy — that keeps every report tidy, plus a per-channel reference table you can copy.
Why this matters
To analytics, Twitter, twitter and twitter are three different sources.
UTM values are matched as exact, case-sensitive strings. Mix casing, slip in a trailing space, or swap a space for an underscore and GA4 splits what should be one line into several — so your real campaign total is scattered and always looks smaller than it is. A naming convention is just the agreement that stops that from happening.
Without a convention
- utm_source=Twitter
- utm_source=twitter
- utm_source=twitter
- utm_source=Twitter_Ads
Four rows in the report. One real channel, four totals to add up by hand.
With a convention
- utm_source=twitter
- utm_source=twitter
- utm_source=twitter
- utm_source=twitter
One row. One total. Every teammate types it the same way, every time.
Want the convention enforced for you? The free slsh.me UTM builder lowercases and encodes every value as you type — and shortening the result on slsh.me keeps the tagged URL clean while you watch the clicks.
The five UTM parameters.
Five query parameters that ride along on a link. Source, medium and campaign do the heavy lifting; term and content are optional detail.
utm_source
Where the traffic comes from — the specific site or product. e.g.newsletter, twitter, google.
Required
utm_medium
The channel type — how it reached them. e.g.email, cpc, social, qr.
Required
utm_campaign
The campaign or promotion this link belongs to. e.g.spring-sale, launch-2026.
Required
utm_term
The paid keyword or audience, mostly for search ads. e.g.link-shortener.
Optional
utm_content
Which creative or placement — to A/B test variants. e.g.hero-cta, footer-link.
Optional
The naming rules.
Six rules. Write them down once, share them with everyone who builds a link, and the splitting problem disappears.
Lowercase everything
Values are case-sensitive, so lowercase is the one casing nobody fat-fingers. Facebook and facebook are different rows — pick lowercase and never deviate.
Pick hyphens or underscores — never both
Multi-word values need a separator. Choose one and apply it everywhere. We recommend hyphens (spring-sale) — they read cleanly in a URL and Google treats them as word breaks.
Never use spaces
A space becomes %20 or a literal trailing space, and spring sale silently becomes a separate value from spring-sale. Replace every space with your chosen separator.
Never put PII in a UTM
UTMs are visible in the URL, server logs and analytics for anyone to read. No emails, names, user IDs or anything personal — ever.
Keep a shared, finite taxonomy
Source and medium should come from a fixed, agreed list — a short menu, not free text. If email is the medium, nobody also types e-mail or Email. Campaign names can be freer, but still follow the casing and separator rules.
Be consistent over clever
A plain convention everyone follows beats a perfect one half the team ignores. Document it where links get built and make it the path of least resistance.
A reference taxonomy by channel.
Copy this as your starting taxonomy. The point isn't these exact words — it's that everyone uses the same words.
| Channel | utm_source | utm_medium | utm_campaign (example) |
|---|---|---|---|
| newsletter | spring-sale-2026 | ||
| Organic social | twitter, linkedin | social | product-launch |
| Paid social | facebook, instagram | cpc or paid-social | retargeting-q2 |
| Newsletter sponsor | tldr, morning-brew | sponsorship | may-takeover |
| QR / print | flyer, poster | qr | trade-show-2026 |
| Partner | acme (partner name) | partner or referral | co-launch |
Common mistakes.
Mixing casing across links. Google on one campaign, google on the next. Lock it to lowercase and the rows merge.
Swapping separators. spring-sale here, spring_sale there, springsale somewhere else — three campaigns in the report, one in reality.
Trailing spaces from copy-paste. twitter versus twitter looks identical to a human and is invisible in a spreadsheet, but it's a separate source to GA4.
Putting medium values in source (or vice versa). utm_source=email belongs in utm_medium; the source should name the specific sender. Keep the roles straight.
Free-texting source and medium. Without a fixed menu, every person invents their own spelling. A finite taxonomy is the cure.
The "do this" checklist.
Before any tagged link goes out, run it past these five.
no spaces.utm_source and utm_medium come from your agreed taxonomy.Enforce it automatically.
The fastest way to keep a convention is to stop typing it by hand. Build tagged URLs from a form that lowercases and encodes for you — then shorten the result so the link you actually share stays clean.
The free slsh.me UTM builder generates clean, properly-encoded campaign URLs from utm_source through utm_content — no signup needed.
Then shorten it on slsh.me — short links keep the long tagged URL out of sight, and you see the clicks on every channel for free.
Tag it once, track it clean.
Shorten any tagged URL with slsh.me. The clutter of UTM parameters hides behind a tidy short link, and you get live click analytics per channel — free.
Create a link with slsh.meFree forever · see pricing