How to Set Up UTM Naming Conventions That Actually Stick
A naming convention doc doesn't work if nobody reads it. Here's how to build UTM conventions that enforce themselves.
The doc nobody reads
Every team writes a naming convention document at some point. It lives in Google Docs or Notion. It says things like "use lowercase" and "utm_source should be the platform name." Someone shares it in Slack. Two people read it. One of them ignores it.
Three months later your Google Analytics has facebook, Facebook, fb, FB-Ads, fb_paid, and facebook.com as separate sources. The convention doc failed. Not because it was wrong, but because documentation doesn't change behavior.
What a naming convention actually needs
Forget the doc for a second. A naming convention needs three things to work:
Allowed values. Not guidelines. A literal list of what's permitted. For utm_source: google, facebook, linkedin, twitter, email, partner. Anything not on the list is wrong. No judgment calls, no "use your best judgment."
A format pattern. For utm_campaign, define the structure: yyyy-qq-channel-descriptor. So it's 2026-q2-facebook-spring-sale, not SpringSale2026 or fb promo q2. The pattern produces the value. The human picks the components.
Enforcement at creation time. This is where most teams fail. The convention exists but nothing prevents someone from ignoring it. A dropdown beats a text field. A tool that rejects invalid values beats a tool that accepts anything.
Building the convention
Start with the three parameters that matter most: source, medium, and campaign.
Source values
List every platform and channel you use. Be specific.
| Value | When to use | |-------|-------------| | google | Google Ads, Google organic | | facebook | Meta ads, Facebook organic posts | | instagram | Instagram ads and organic (separate from facebook) | | linkedin | LinkedIn ads and organic | | twitter | Twitter/X | | email | Any email campaign | | partner | Co-marketing, affiliates |
That's the list. If someone wants to add a new source, they propose it and it gets added. Nobody invents one on the fly.
Medium values
Stick close to GA4's default channel groupings so your reports make sense.
| Value | When to use | |-------|-------------| | cpc | Paid search and paid social | | email | Email campaigns | | social | Organic social posts | | referral | Partner links, affiliate links | | organic | Organic search (usually auto-detected) | | display | Display/banner ads | | video | YouTube, video ads |
Campaign name format
This is where teams diverge the most. Pick a pattern and enforce it.
Our recommendation: yyyy-qq-source-descriptor
Examples:
2026-q2-facebook-spring-sale2026-q1-linkedin-product-launch2026-q3-email-renewal-series
The year-quarter prefix means campaigns sort chronologically in every report. The source in the name makes it scannable. The descriptor tells you what it's about.
Making it stick
The convention is only as good as the enforcement. Three approaches, in order of effectiveness:
Level 1: The doc. Write it down, share it, hope people follow it. Works for very small teams (2-3 people) who talk every day. Breaks at any scale.
Level 2: Templates. Save pre-built parameter combinations. "LinkedIn Paid" pre-fills source=linkedin, medium=cpc. The human picks a template instead of typing values. Reduces errors significantly. Attri and UTM.io both do this.
Level 3: Enforcement + resolution. The tool only allows values from your approved list. If someone types "fb," it auto-corrects to "facebook." If someone uses uppercase, it normalizes to lowercase. Wrong values can't enter the system. This is what Attri's parameter resolver does.
Level 3 is the only one that scales without ongoing policing. You set the rules once. The tool enforces them forever.
The quarterly audit
Even with enforcement, review your UTM data quarterly. Look for:
- New values that slipped through (maybe from an API integration or a partner link)
- Campaigns that don't follow the naming pattern
- Sources with very low volume (might be a typo that bypassed the rules)
Thirty minutes, four times a year. That's the maintenance cost of clean attribution data.
Set up your conventions in Attri or document them and share the free UTM builder with your team.