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.

Updated June 2, 2026 · by slsh.me

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)
Emailnewsletteremailspring-sale-2026
Organic socialtwitter, linkedinsocialproduct-launch
Paid socialfacebook, instagramcpc or paid-socialretargeting-q2
Newsletter sponsortldr, morning-brewsponsorshipmay-takeover
QR / printflyer, posterqrtrade-show-2026
Partneracme (partner name)partner or referralco-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.

[x]Every value is lowercase.
[x]Words are joined with hyphens (or your one chosen separator) — no spaces.
[x]utm_source and utm_medium come from your agreed taxonomy.
[x]No PII anywhere in the parameters.
[x]No trailing spaces — paste the link into a plain field and re-check the tail.

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.

Build a tagged URL with the free UTM builder

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.me

Free forever · see pricing