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.
Facebook and facebook are different values in GA4. Pick lowercase and never deviate.paid-social, not paid social or paid_social. (Reserve underscores as the separator between campaign segments — see below.)%20 and breaks grouping.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.
The channel type. This is the field that fragments the most, so keep the list short and fixed. A good default taxonomy:
| Medium | Use for |
|---|---|
cpc | Paid search / paid clicks |
paid-social | Paid social ads |
organic-social | Unpaid social posts |
email | Email campaigns & newsletters |
display | Display / banner ads |
affiliate | Affiliate & partner links |
referral | Sponsorships, 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.
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.
cpc, paid-social) so paid clicks are always attributable.hero-a vs hero-b. Optional, but handy for testing.// 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
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 →