HomeBlog › UTM naming convention

The UTM naming convention that keeps GA4 clean

Published July 3, 2026 · 7 min read
The rules in one line: force everything lowercase, replace spaces with hyphens, use a short fixed list of mediums, and give campaigns a structured pattern like region_quarter_initiative_type. Below is the full convention with copy-paste examples.

A naming convention only works if it's specific enough to be unambiguous and simple enough that people actually follow it. This is a convention that hits both — it's the one we recommend as a starting point for teams adopting UTM governance. Adapt the value lists to your business; keep the rules.

The universal rules (apply to every field)

utm_source

The specific origin — where the click literally comes from. Use the platform's real name, lowercased.

Examples: google, facebook, instagram, linkedin, bing, newsletter, partner-acme.

Rule of thumb: source answers "which specific place?" Don't put channel types like cpc here — that's the medium's job.

utm_medium

The channel type. This is the field that fragments the most, so keep the list short and fixed. A good default taxonomy:

MediumUse for
cpcPaid search / paid clicks
paid-socialPaid social ads
organic-socialUnpaid social posts
emailEmail campaigns & newsletters
displayDisplay / banner ads
affiliateAffiliate & partner links
referralSponsorships, PR, other referrals

Note: GA4 uses your utm_medium to bucket traffic into default channel groups. Values like cpc, email, and organic-social map cleanly; made-up mediums like Social or fb-ad get dumped into "Unassigned" or the wrong group.

utm_campaign

This is where a structured pattern pays off. Instead of free text, give every campaign name the same ordered segments, separated by underscores:

# pattern
region_quarter_initiative_type

# examples
na_q3_summersale_promo
emea_q4_blackfriday_promo
global_q1_webinar_nurture

Because every name has the same shape, you can filter and roll up campaigns by region, quarter, or type later — something free-text names make nearly impossible. Define the allowed values for each segment (e.g. region ∈ {na, emea, apac, latam, global}) so the structure can't drift either.

utm_term and utm_content

Putting it together

// off-spec
?utm_source=FaceBook&utm_medium=Social&utm_campaign=Summer Sale

// on-spec
?utm_source=facebook&utm_medium=paid-social&utm_campaign=na_q3_summersale_promo

Writing it down isn't enough

Here's the uncomfortable truth: a naming convention in a Google Doc has roughly the same shelf life as a New Year's resolution. Within a quarter, someone new joins, someone's in a hurry, and the exceptions begin. The convention only holds if it's enforced at the moment a link is built — with off-spec values blocked, lowercase forced automatically, and the campaign pattern validated before the link can be saved.

That's exactly what Tagsmith does: you encode this convention once as a spec, lock it, and every link your team builds — in the app or the browser extension — has to match. And you can audit the messy links you already have against it.

Turn this convention into an enforced spec in a few minutes.

Try Tagsmith free →
Keep reading → What is UTM governance? (And why free builders aren't enough) → Why "Facebook" and "facebook" are two rows in GA4 — and how to fix it