Why this matters
Every marketer on your team types UTMs differently.Newsletter vs newsletter vs news_letter creates three separate rows in GA4. Six months later, your channel attribution is split across dozens of near-duplicate source/medium combos and no one can tell you what drove pipeline last quarter.
A naming convention costs 30 minutes to set up. The cleanup it prevents costs weeks.
This is an opinionated default. Pick the parts that fit your team, enforce them with UTM Rules, and update the vocab list quarterly. A convention that gets followed beats a perfect one that doesn’t.
The format
- Lowercase only:
googlenotGoogle - Hyphens between words:
q2-launchnotq2_launchnotQ2 Launch - No spaces, no slashes, no special characters
- No dates inside
utm_campaign(the date is in your analytics tool, not your UTM) - No PII: no email addresses, user IDs, or names
Parameter guide
utm_source: where the traffic came from
Use the platform name, lowercase, hyphen-separated. Lock this to a fixed vocab list.
Enforce it: Configure UTM Rules to block values outside your approved list. Anyone using an off-list value gets a rejection on save, not a messy row in GA4 three weeks later.
utm_medium: what kind of traffic
Medium = the marketing mechanism, not the platform.GA4 uses
medium to populate the Default channel grouping report. Stick to these values and your channels will auto-group correctly. Invent your own and they fall into “Unassigned.”utm_campaign: what campaign this link belongs to
Pattern:{quarter}-{theme}
- Always start with the quarter (
q1/q2/q3/q4) orevergreenfor always-on - Theme is 1-3 words, hyphen-separated, describing the campaign’s purpose
- No year in the value; your analytics date filter handles that
- Same campaign name across all channels that belong to one campaign
utm_content: which creative or placement
Useutm_content to tell variants apart within a campaign + channel combo.
Common patterns:
Leave
utm_content blank in templates; fill it per link. If you bake it into a template, every link inherits the same content value and the variant data is useless.
utm_term: paid search keywords only
utm_term = the keyword that triggered the ad. Used almost exclusively for paid search.
utm_term for audience segments or targeting notes; that data belongs in your ad platform, not your UTM.
Channel cheatsheet
Copy-paste starting points per channel. Fillutm_campaign and utm_content per link.
- Google Ads
- Meta Ads
- LinkedIn Ads
- Affiliate / Partner
- QR Codes / Offline
{keyword} as a literal ValueTrack parameter in Google Ads; it auto-populates the triggering keyword.Bad to good examples
Enforce it with UTM Rules
Setting this convention once doesn’t help if someone ignores it two weeks later. Pair this playbook with UTM Rules to make the convention self-enforcing. Minimum ruleset to configure:1
Force lowercase and hyphens
Turn on Force lowercase and set Space character to hyphen (
-). This catches 80% of drift automatically. No more Google vs google or Q2 Launch vs q2-launch.2
Block test and draft values
Under Prohibited values, add: test, draft, tbd, todo. Prevents test links from leaking into production data and polluting your reports.
3
Set your allowed characters (optional)
Under Allowed characters, select lowercase, numbers, and hyphens. Rejects anything with special characters or accidental spaces that slipped through.
Governance
A naming convention rots if no one owns it. Assign these before you ship.
Adding a new source or medium:
- Convention owner approves the new value
- Update UTM Rules with the new approved value
- Create a new template for the channel (see Create a template)
- Update this playbook
utm_source=IG takes one week to create and six months to clean up.
Quick-start checklist
1
Copy the allowed source and medium lists above
Edit them to match your actual channels. Delete any you don’t use.
2
Configure UTM Rules
Minimum: force lowercase on, hyphen as space character, blocked values: test/draft/tbd.
3
Create templates for your top 5 channels
Newsletter, Google Ads, Meta, LinkedIn, and your highest-volume partner. See Create a template.
4
Run your existing links through the audit
Filter GA4 → Source/Medium report → look for rows with caps, spaces, or off-list values. Those are your cleanup targets.
5
Share this page with the team
Bookmark it. Link to it in your team wiki. This is the source of truth, not a Notion doc only you can find.