UTM Naming Conventions: A Standard Taxonomy for Teams
Web Analytics

UTM Naming Conventions: A Standard Taxonomy for Teams

Open your GA4 acquisition report and there is a decent chance you will see “Facebook,” “facebook,” and “FB” sitting on three separate rows. Same channel, three identities, one fractured picture. Multiply that across every source, medium, and campaign your team has ever tagged by hand, and your attribution quietly falls apart — not because the tracking failed, but because nobody agreed on how to spell things. A UTM naming convention fixes this at the root. This guide gives you the five rules that matter, a copy-paste controlled-vocabulary template you can drop into a shared spreadsheet today, and a campaign-naming pattern with a worked example.

Why UTM naming conventions matter

A UTM naming convention matters because UTM values are case-sensitive in Google Analytics 4. “Email” and “email” are stored as two distinct values, so inconsistent capitalization splits one channel into duplicate rows that no longer sum correctly. The same fragmentation happens when one person types utm_source=newsletter and another types utm_source=mailchimp for the identical send. Once the data is fragmented, you cannot cleanly merge it after the fact — reporting becomes a manual reconciliation exercise, and any spend decision built on those numbers is built on sand.

The downstream cost is concrete. GA4 maps your utm_medium value to a default channel grouping using rules it expects to see (for example, cpc and ppc route to Paid Search; email routes to Email). Feed it a free-typed medium like e-mail or paidsocial-fb and GA4 cannot match the rule, so the traffic lands in “Unassigned” or the wrong bucket. A consistent vocabulary is the difference between a channel report you trust and one you spend Monday mornings cleaning. The fix is cheap: decide the spelling once, write it down, and enforce it.

The 5 rules of a clean UTM convention

These five rules cover the failures responsible for almost every fragmented report. They are deliberately strict — a naming convention only works if there is no room for personal interpretation. Apply them to every link you use for campaign tracking, without exception.

1. Use lowercase, always

Because values are case-sensitive, mixed casing is the single most common cause of duplicate rows. Lock every parameter to lowercase — sources, mediums, campaign names, all of it. “Google” and “google” should never both exist in your data. Lowercase is the easiest rule to follow and the easiest to break under deadline pressure, which is exactly why it belongs at the top of the list and why automated enforcement (covered below) pays off.

2. Use hyphens, never spaces or underscores

Spaces in a URL get encoded as %20, so spring sale becomes spring%20sale — unreadable in reports and prone to copy-paste breakage. Use hyphens to separate words: spring-sale. Avoid underscores too; they read poorly and some tools treat them inconsistently. One word-separator across all values keeps your campaign names scannable and your URLs clean.

3. Define a controlled vocabulary (don’t free-type)

This is the rule that separates a real convention from a wish. A controlled vocabulary is a pre-approved list of allowed values for each parameter — a small taxonomy that everyone draws from instead of inventing source and medium names on the fly. If “linkedin” is the approved source, then “LinkedIn,” “li,” and “linked-in” are simply not options. The template below is exactly this list. If you also want a refresher on the role of each tag, see web analytics fundamentals for how utm_source, utm_medium, and utm_campaign feed your reports.

4. Keep values short and descriptive

A good value tells you what the link is without a decoder ring, and does it in as few characters as possible. q2-webinar-signup beats both w (too cryptic) and q2-2nd-quarter-product-webinar-registration-page-final (too long to scan in a report column). Aim for human-readable but compact. Consistency in length and structure also makes the data easier to filter and group later.

5. Never UTM-tag internal links

UTM parameters are for traffic arriving from outside your site. Tagging internal links — a button from your homepage to a landing page, say — restarts the session and overwrites the original acquisition source. A visitor who came from google / organic suddenly looks like homepage / banner, and your real source data is destroyed. Use internal-link tracking or events for on-site navigation; reserve UTMs strictly for inbound campaign tracking.

A controlled-vocabulary template you can copy

This is the artifact most “best practices” posts skip. Below is a starter taxonomy: approved utm_source values, approved utm_medium values mapped to their GA4 channel group, and a campaign-naming pattern. Paste it into a shared spreadsheet, trim it to your channels, and treat it as the only place new values get added.

Approved utm_mediumUse forGA4 channel group
cpcPaid search (Google Ads, Microsoft Ads)Paid Search
displayBanner / programmatic display adsDisplay
paid-socialPaid placements on social platformsPaid Social
socialOrganic social postsOrganic Social
emailNewsletters and email campaignsEmail
affiliateAffiliate and partner linksAffiliates
referralSponsorships, listings, partner sitesReferral
Mediums map to GA4 channel grouping rules — stick to these spellings so traffic lands in the right bucket.
Approved utm_sourcePlatform
googleGoogle (ads or organic posts)
facebookFacebook / Meta
instagramInstagram
linkedinLinkedIn
xX (formerly Twitter)
newsletterYour email newsletter
partner-siteNamed partner or sponsor domain
One approved spelling per source. Add a new row only through your governance owner — never invent values inline.

A campaign-naming pattern with a worked example

For utm_campaign, a fixed pattern beats free text. A simple, durable structure is {period}-{product}-{offer}: a time marker, what you are promoting, and the hook. Worked example — a Q2 promotion for an analytics suite running 20% off would be:

utm_source=newsletter
utm_medium=email
utm_campaign=q2-analytics-20off

Every link in that campaign — email, paid social, display — shares the identical utm_campaign value and varies only source and medium. That is how you roll one campaign report up across channels instead of chasing fragments. Note the use of q2 as a relative period marker rather than a hard date; more on dates in the FAQ.

Governance: keep it a single source of truth

Rules written once and forgotten drift within a quarter. The convention needs a home and an owner. Keep the controlled vocabulary in one shared spreadsheet that is the single source of truth — not a screenshot in an old deck, not tribal knowledge. Assign one person (usually analytics or marketing ops) to own it: they approve new source and medium values, retire dead ones, and answer “what do I use for X?” so nobody free-types under pressure.

  • One sheet, one owner. New values are requested, not invented. The owner adds the approved spelling.
  • Periodic validation. Once a month, pull a list of distinct UTM values from GA4 and compare against the approved list. Anything off-list is a leak to fix — and a coaching moment.
  • Onboard new people to it. The convention is part of campaign setup, not an afterthought. Link the sheet in your campaign brief template.

Validation is where consistency is actually maintained. Without a recurring audit, even a good convention erodes as new hires and rushed launches introduce off-list values that quietly recreate the duplicate, fragmented data problem you set out to solve.

Common UTM naming mistakes (and the fix)

MistakeWhy it breaks your dataCorrect form
Facebook vs facebookCase-sensitive values split one source into duplicate rowsfacebook
utm_campaign=spring saleSpace becomes %20, breaking readability and groupingspring-sale
Free-typed source (fb, FB, meta)No controlled vocabulary means endless variants of one channelOne approved value: facebook
Tagging an internal homepage buttonOverwrites the real acquisition source and inflates self-referralsNo UTM on internal links
Medium e-mail or paidsocialDoesn’t match GA4 channel grouping rules → Unassignedemail / paid-social

Enforce your convention automatically

A convention is only as good as compliance, and humans typing parameters by hand will always drift. The reliable fix is to remove hand-typing entirely: encode the approved vocabulary into a tagging tool so every link is generated to spec — lowercase, hyphenated, on-taxonomy. Build your links with the UTM Builder instead of editing query strings manually.

Frequently asked questions

Should utm_campaign include dates?

Use relative period markers (q2, fy26-h1) rather than hard dates inside the value when the campaign is recurring or spans a window. Hard dates make rolling reports awkward and clutter the value. If a precise launch date genuinely matters for one-off sends, keep it short and ISO-style (2026-04) at the end, after product and offer.

Are UTM values case-sensitive?

Yes. In GA4, Email and email are stored as separate values and report on separate rows. This case sensitivity is the most common cause of fragmented campaign data, which is why the first rule of any convention is to force everything to lowercase.

Underscores or hyphens in UTM values?

Hyphens. They read cleanly in URLs and reports, and you avoid the inconsistent handling some tools apply to underscores. Whichever you choose, pick one separator and apply it everywhere — mixing spring-sale and spring_sale fragments the same campaign. Spaces are never acceptable because they encode to %20.

How do I roll a convention out across a team?

Publish the controlled vocabulary in one shared spreadsheet, name an owner, and make it part of campaign setup rather than an optional reference. Then remove the temptation to free-type: have everyone build standardized campaign links from the approved lists. Audit distinct UTM values monthly and correct any off-list entries early, before they spread.

The next step

Clean campaign data is not a tooling problem — it is an agreement problem. A UTM naming convention is that agreement, written down. Decide your controlled vocabulary, write it into one spreadsheet, give it an owner, and audit it monthly. Then make compliance the default by generating every link to spec. Copy the template above, adapt it to your channels, and start tagging with the UTM Builder so the convention enforces itself.

Alex Savich

Digital marketing journalist covering MarTech, AI, SEO, and analytics for Elsop Insights.