A UTM naming convention that survives contact with reality
Campaign reports rarely break because of the analytics tool. They break because Newsletter,
newsletter and news-letter are three different rows, and nobody agreed which one to use.
The rules
- Lowercase everything. UTM values are case-sensitive. This single rule prevents most duplicate rows.
- Underscores, never spaces. Spaces become
%20and make links ugly and easy to truncate. - Source is the platform, medium is the channel type.
linkedin/social, notlinkedin/linkedin. - Campaign names carry a date or quarter.
spring_launch_2026q2still means something in nine months;launchdoes not. - Use
utm_contentfor the placement, so you can tell a hero CTA from a footer link inside the same campaign.
Why the tool normalises by default
The UTM Builder lowercases values and converts whitespace to underscores
unless you turn that off. It is not being precious: it is enforcing rules 1 and 2 so your future
self can group the report without a spreadsheet full of IFERROR(LOWER(...)).
A convention only works if the easiest path follows it.
A worked example
A quarterly launch email, linking to the pricing page:
utm_source=newsletterutm_medium=emailutm_campaign=spring_launch_2026q2utm_content=hero_cta
Six months from now, that row still explains itself — which is the whole point.