Q3 report: “Email” revenue tripled overnight. Nobody sent anything. The cause: one campaign tagged Email, another email, a third e-mail — analytics treats all three as different channels, and leadership celebrated a phantom. UTM naming is governance, not typing: lowercase-hyphen conventions, a fixed dictionary, and a builder that enforces both. This guide gives the naming system that keeps reports unified, plus the edge cases (existing queries, 2000-char clips, term/content discipline) that corrupt data silently.
Part of the SEO publishing guide. Build disciplined links in the UTM builder; preview landing pages in SERP preview.
The naming dictionary (lowercase-hyphen, fixed values)
| Parameter | Convention | Example | Never |
|---|---|---|---|
| source | Platform, lowercase | newsletter | Newsletter, news-letter variants |
| medium | Channel class | email | Email, e-mail |
| campaign | Slug + season | spring-sale | SpringSale2026!! |
| term | Paid keyword verbatim | running-shoes | Free-text essays |
| content | Element variant | header-button | final-v2-REAL |
Publish the dictionary where link-creators actually work (the builder presets it); review quarterly for drift. New values require a proposal, not improvisation — every novel string is a future cleanup ticket.
Mechanics: encoding, existing queries, length
- Auto-encoding: spaces become
%20, symbols percent-encoded — the builder handles it; hand-rolled links in docs usually don't (audit them). - Existing query strings: landing pages with
?id=7take UTMs with&, not a second?— the classic broken-link pattern in CMS templates. - 2000-char ceiling: long UTM stacks plus long slugs clip in emails and chats. Keep values terse; total URLs short.
- Internal links: never UTM tag on-site navigation — it rewrites session attribution and pollutes the very reports UTMs serve.
Audit: find splits, freeze dictionary, backfill nothing
Quarterly, pull channel reports grouped by source/medium and eyeball near-duplicates (email/Email/e-mail, social/Social/social-media). Merge forward via dictionary (filters/views can relabel history in most platforms; never rewrite raw collected data). The Email vs email unassigned bucket in GA4 is the tell — its size measures governance debt directly. Backfill sparingly: annotate the fix date and let clean data accumulate rather than fabricating history.
General guidance only. Attribution models differ per platform — consistent naming is the precondition every model needs.