Docs · UTM · Taxonomy
Controlled vocabularies, separator rules, campaign name structure, abbreviations, and governance that marketers can apply under deadline pressure — and analysts can parse years later.
A naming convention isn’t a style guide. It’s a data schema enforced by people instead of a database — which is why it fails, and why the design has to assume deadline pressure and half-attention.
Prefer the interactive Tracking Standards tool to encode these rules — approved values, aliases, live validation and platform templates — instead of a forgotten spreadsheet.
Success looks like this: two marketers tagging the same campaign independently produce the same string,
and an analyst can SPLIT() it two years later. Channel and parameter habits sit in
how to optimize UTM tags;
catching drift is in
monitoring and fixing UTM issues.
Email ≠ email forever.black-friday, not black_friday or blackfriday.2026-q3_black-friday_apac splits cleanly on _.%20 or + — two variants of one value.& ? = # % + / \ " ' < >.utm_source — closed listOne canonical value per platform:
google bing meta linkedin tiktok reddit pinterest
youtube x mailchimp klaviyo hubspot partner-name newsletter
Never mix facebook / meta / fb. For partners, use the bare domain:
techcrunch.com.
Email decision: ESP name (mailchimp) vs stable identity (newsletter).
The second survives an ESP migration — pick once and document it
(Mailchimp setup).
utm_medium — strictly closedMost consequential for GA4 channel grouping. Keep it short and aligned with GA4’s rules:
| Value | Use for |
|---|---|
cpc | Paid search |
paid-social | Paid social (contains paid) |
display | Display / programmatic |
email | All email |
organic-social | Unpaid social posts |
affiliate | Affiliate programmes |
referral | Partner / PR links |
sms | Text message |
push | Push notifications |
qr | QR codes / print |
video | Paid video placements |
Anything else is a defect. Don’t put campaign names, formats, agencies or dates here.
Traps: social on paid ads → Organic Social; paidsearch ≠ GA4 paid search — use cpc.
utm_campaign — structured free textOne template for the account:
{yyyy-qq}_{initiative}_{audience-or-region}
2026-q3_summer-sale_uk
2026-q3_product-launch-atlas_enterprise
2026-q4_black-friday_global
2026-q3_always-on-brand_dach
Date first = free chronological sort. Use yyyy-mm for monthly cycles;
yyyy-mm-dd only for one-offs. Funnel-first alternative if that matters more than geography:
{yyyy-mm}_{funnel-stage}_{initiative}
2026-08_tofu_industry-report
2026-08_bofu_demo-retargeting
Pick one pattern. Two patterns in one account is the same as none.
Platform IDs ({campaignid}, Meta {{campaign.id}}) are more robust than names —
renames don’t split history — if you can join IDs to labels in BI. No BI layer? Use the structured name
and treat renames as data-breaking. Placement on Google Ads:
Ideal tracking template setup.
utm_content — semi-closedCreative / placement within the campaign:
hero-cta header-banner sidebar-300x250
footer-link inline-text-1 product-card-2
variant-a variant-b static-v3
Paid: ad-level ID ({creative}) is stricter.
Email: human placement names answer “which part of the email worked.”
utm_term — targeting
Keyword or segment. Google Ads: {keyword}. Email/social:
lapsed-90d, lookalike-1pct-purchasers.
Leave empty rather than repurposing — empty is honest; misuse corrupts a dimension.
utm_id — campaign ID
GA4 manual campaign ID and cost-import join key. Short stable code from your registry:
cmp-2026-0412. Optional if you never import cost; mandatory if you do.
Systematically or not at all. Publish the table:
enterprise → ent small-business → smb
remarketing → rmkt prospecting → prosp
awareness → awr consideration → cons
Never let ent, enterprise and enterp coexist. Keep campaign names under ~50 characters — past that, UIs truncate and readability dies.
A convention nobody follows is worse than none — it creates false confidence.
Same Q3 UK product launch across three channels — shared campaign + id, different source/medium/content:
Google Ads Final URL suffix:
utm_source=google&utm_medium=cpc&utm_campaign=2026-q3_product-launch-atlas_uk&utm_content={creative}&utm_term={keyword}&utm_id=cmp-2026-0412
Newsletter:
?utm_source=newsletter&utm_medium=email&utm_campaign=2026-q3_product-launch-atlas_uk&utm_content=hero-cta&utm_id=cmp-2026-0412
Organic LinkedIn:
?utm_source=linkedin&utm_medium=organic-social&utm_campaign=2026-q3_product-launch-atlas_uk&utm_content=launch-post-1&utm_id=cmp-2026-0412
Initiative rolls up. Channels stay clean. Content tells you which asset worked. That’s the whole point.
Hyphens within a field, underscores between fields. Consistency matters more than which you picked historically — but don’t mix both schemes mid-flight without versioning.
Yes — yyyy-qq or yyyy-mm prefix for sort and recency.
utm_campaign be?Under ~50 characters.
utm_campaign?IDs if you can join to labels; names if you can’t. Renaming a named campaign splits history.
utm_medium values?Closed list of about ten: cpc, paid-social, display, email, organic-social, affiliate, referral, sms, push, qr (plus video if you need it). Anything else risks misclassification.
Yes — version it with an effective date so parsers know where the boundary sits.