Guide
UTM naming conventions that survive a new hire
A naming convention is a peace treaty. It is shorter than a brand book and more useful than a Slack thread titled “quick question on UTMs” that is 140 messages long. This page is the pattern. The hygiene rules around it are best practices. The living list is the spreadsheet.
Recommended pattern
| Field | Pattern | Examples |
|---|---|---|
| Source | {platform} or partner-{name} | google, meta, newsletter, partner-acme |
| Medium | From the approved list only | cpc, paid_social, social, email, display, affiliate, sms, audio, qr |
| Campaign | {initiative}-{yyyy} or {qtr}-{product}-{goal} | spring-sale-2026, q3-webinar-pipeline |
| Content | {placement}-{variant} | hero-cta, footer-text, reel-hook-v2 |
| Term | Keyword, audience, or list | running-shoes, lookalike-1, vip-list |
| ID | Stable join key | camp_2026_ss_001 |
Rules that prevent creative spelling
- Lowercase only.
- Hyphens for word breaks. No spaces, no camelCase.
- No file extensions or domains in source.
- No emojis. They photograph well in Slack. They photograph poorly in BigQuery.
- Campaign names are nouns for programs, not sentences.
A tiny approved list beats a huge one
Start with ten sources and eight mediums. Add a value when a real channel appears, not when someone wants to be clever. Governance platforms exist for enterprises that need dropdowns with locks. Most teams need a wiki page and a builder that lowercases things. You already have the second part.
Worked names you can copy
| Situation | Campaign | Content |
|---|---|---|
| Spring sale, email + Meta + search | spring-sale-2026 | hero-cta / carousel-a / {creative} |
| Always-on brand search | brand-search | {creative} |
| Onboarding flow, email 3 of 5 | onboarding-welcome | email3-hero |
| Partner homepage module | always-on-catalog | homepage-mod |
| Booth QR, aisle 3 | summer-popup-2026 | aisle-3 |
Generate a candidate in the campaign name generator if people freeze on the initiative token. Then lock it in the sheet so the next person does not invent SpringSale26.
Steal starter values from channel templates. Enforce them with the validator on a sample of links each week — five minutes of QA, fewer hours of “why is Paid Social down.”