Skip to main content

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

Rules that apply everywhere:
  • Lowercase only: google not Google
  • Hyphens between words: q2-launch not q2_launch not Q2 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.
Don’t use email as a source. It’s ambiguous. Is it your newsletter, a cold outreach sequence, or a transactional send? Use newsletter, outbound, or transactional instead.
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.”

Pattern: {quarter}-{theme}
Rules:
  • Always start with the quarter (q1 / q2 / q3 / q4) or evergreen for 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
If your Google Ads and your newsletter and your LinkedIn post are all promoting the same Q2 pricing page, they should all share utm_campaign=q2-pricing-relaunch. That’s how you see cross-channel campaign performance in one row.

utm_content: which creative or placement

Use utm_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.
If you’re not running paid search: leave it empty. Don’t repurpose 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. Fill utm_campaign and utm_content per link.

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:
  1. Convention owner approves the new value
  2. Update UTM Rules with the new approved value
  3. Create a new template for the channel (see Create a template)
  4. Update this playbook
Don’t let individuals add new values ad hoc. One rogue 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.