Guide

UTM Naming Conventions: The Complete Guide (2026)

Everything your marketing team needs to design, document, and — most importantly — enforce UTM naming conventions that keep your GA4 reports, dashboards, and attribution models clean.

UTM parameters are the connective tissue of marketing analytics. Every campaign link you share — in an email, an ad, a social post, a QR code on a conference booth — carries a handful of tags that tell your analytics tools where a visitor came from. When those tags are consistent, attribution just works. When they are not, your data quietly rots.

This guide covers the naming rules that matter, recommended source and medium taxonomies you can adopt today, campaign name patterns, and the governance models teams use to keep conventions alive after the kickoff meeting ends. If you are new to UTMs entirely, start with our beginner's guide to UTM parameters first.

Why UTM naming conventions matter

Analytics tools treat UTM values as opaque, case-sensitive strings. GA4 does not know that fb, FB, Facebook, and facebook.com are the same place. Each spelling becomes its own row in your traffic acquisition report, and your “Facebook performance” is now fragmented across four line items — none of which looks impressive on its own.

The downstream damage compounds:

  • Broken GA4 channel grouping. GA4 assigns sessions to default channels largely from source and medium. A non-standard medium like paidsocial or FB-Ads can land traffic in Unassigned, where it is invisible to every channel report.
  • Useless filters and segments. A report filtered on utm_campaign=spring-sale silently misses the links tagged Spring_Sale and springsale2026.
  • Broken joins everywhere else. Your CRM, data warehouse, and BI dashboards join on these strings too. Dirty UTMs mean broken lead-source reporting and revenue-attribution models that nobody trusts.
  • Wasted analyst time. Someone ends up writing (and forever maintaining) cleanup regexes, CASE statements, and lookup tables to reunite data that should never have been split.

A naming convention is simply an agreement that the same real-world thing always gets the same string. It is cheap to define and enormously expensive to skip.

The core formatting rules

Before you argue about taxonomies, lock in the mechanical rules. They are boring, and they prevent the majority of UTM data damage:

  1. Lowercase everything. UTM values are case-sensitive in GA4. All-lowercase removes an entire class of fragmentation with zero downside.
  2. No spaces, ever. Spaces become %20 (or +) when URL-encoded, and different tools encode them differently. Use a separator instead.
  3. One separator: hyphens. Hyphens are readable and do not collide visually with the underscores in utm_source. Underscores work too — what matters is that you pick exactly one and forbid the other.
  4. No abbreviations without a registry. Either always facebook or always fb — never a mix. Full names are safer because they need no lookup table.
  5. ASCII only, no special characters. Ampersands, question marks, and slashes have meaning in URLs and will corrupt your query string.
  6. Never UTM-tag internal links. Clicking an internal link with UTMs starts a new attributed session in GA4 and erases the visitor's real origin. UTMs are for links that point into your site from outside.

A canonical utm_source taxonomy

utm_source answers “which platform or site sent this click?” Use the platform's common name, lowercase, unabbreviated. A recommended starting list:

Channel familyRecommended utm_source values
Socialfacebook, instagram, linkedin, x, tiktok, youtube, reddit, pinterest
Search & displaygoogle, bing, duckduckgo
Email & messagingmailchimp, hubspot, klaviyo, braze, newsletter (if platform-agnostic), slack, whatsapp
Partners & otherpartner name (e.g. producthunt, g2), podcast name, event name (e.g. saastr-2026)

Decide up front how you handle near-duplicates: is Twitter x or twitter? Is your email source the ESP (mailchimp) or the list (newsletter)? There is no universally right answer — there is only one right answer per organization, written down and enforced.

A canonical utm_medium taxonomy

utm_medium answers “what kind of marketing was this?” It should be a short, closed list — this is the field GA4 leans on hardest when building default channel groups, so oddball values here are how traffic ends up in Unassigned:

utm_mediumUse for
emailAll email sends — newsletters, promos, lifecycle
cpcPaid search (Google Ads, Bing Ads)
paid-socialPaid campaigns on social platforms
organic-socialUnpaid posts from your own social accounts
displayBanner and programmatic display ads
affiliateAffiliate and commission partners
referralSponsored placements on other sites
smsText-message campaigns
qrQR codes on print, packaging, signage
podcastPodcast ads and host reads

Resist the urge to invent new mediums per campaign. If you feel the need for email-vip-blast, what you actually want is utm_medium=email with the detail moved into campaign or content.

Campaign naming patterns

utm_campaign is where teams need the most structure, because it is open-ended. A pattern that works for most teams:

{initiative}-{detail}-{year} → spring-sale-2026, q2-webinar-ai-2026, product-launch-atlas-2026
  • Include the year (and quarter, if you run recurring programs) so campaigns sort and filter cleanly over time.
  • Keep audience, creative, and placement details out of the campaign name — that is what utm_content is for.
  • Agree on a small vocabulary of initiative prefixes (launch, promo, webinar, event) so campaign names stay scannable.

Good vs. bad: real examples

Bad GoodWhy
utm_source=Facebookutm_source=facebookGA4 is case-sensitive; mixed casing splits one source into several rows.
utm_source=fbutm_source=facebookAbbreviations fragment attribution when other teammates spell it out.
utm_medium=Paid Socialutm_medium=paid-socialSpaces become %20 in URLs and create inconsistent, ugly report values.
utm_campaign=SpringSaleutm_campaign=spring-sale-2026No separator or date makes campaigns hard to read, sort, and filter.
utm_campaign=final_v2_NEWutm_campaign=q2-webinar-2026Version-suffix chaos tells you nothing about the campaign a year later.
utm_medium=email-newsletter-promoutm_medium=emailMedium should stay broad; put the detail in campaign or content instead.

Conventions that enforce themselves

UTM Copilot turns these rules into live governance: allowed values, alias mappings (fb → facebook), regex patterns, and required fields — validated automatically every time anyone on your team creates a UTM. Non-compliant links simply never get made.

Three ways to govern conventions (and how they fail)

Writing the convention is the easy part. Keeping it alive across a team, an agency, and three new hires is the hard part. Teams typically progress through three models:

1. The documentation model

A Notion page or PDF describes the rules. It works only as long as everyone reads it, remembers it, and applies it correctly while rushing a launch. In practice, compliance decays within weeks — documentation informs, but it does not enforce.

2. The spreadsheet model

A shared spreadsheet with dropdown validation and a CONCATENATE formula. Better — dropdowns constrain some fields — but spreadsheets cannot stop free-text typos in campaign names, formulas break, copies get forked per team, and nothing stops someone from building a link outside the sheet entirely. We cover the failure modes in depth in our free UTM tracking spreadsheet template (which you can download and use today).

3. Enforcement at creation

A dedicated tool validates every UTM against your conventions before the link exists: allowed value lists, alias mappings that auto-correct fb to facebook, regex patterns for campaign formats, and required fields. This is the only model where compliance does not depend on human memory. For how dedicated tools compare, see UTM Copilot vs UTM.io and UTM Copilot vs Terminus.

Team workflows that keep taxonomies healthy

A convention is not a museum piece — new platforms and campaign types appear constantly, and your taxonomy has to grow without fragmenting. The workflow that works:

  • One owner, many contributors. A marketing-ops owner (or small group) controls the canonical value lists. Everyone else can propose, nobody else can silently add.
  • A request-and-approve loop. When someone needs a new source or medium, they request it, the owner checks for near-duplicates (“is x-ads really different from x + paid-social?”), and approves or redirects. In UTM Copilot this loop is built in — AI pre-screens requested values for duplicates before an admin ever sees them.
  • Audit regularly. Once a quarter, scan reports for values outside the taxonomy and trace how they got in. Every escape is a hole in your process.
  • Onboard agencies explicitly. External partners are the most common source of rogue UTMs. Give them access to your builder tool rather than a PDF of rules.

A note on GA4's source consolidation — and why clean-at-source still wins

In 2026, GA4 introduced source consolidation, which groups common variants of known traffic sources together in reporting so that, for example, assorted spellings and subdomains of a major platform roll up to one row. It is a genuinely helpful quality-of-life improvement — and a tempting excuse to stop caring about naming discipline.

Do not take the bait, for three reasons:

  • Consolidation only touches recognized source variants. Your custom utm_campaign, utm_content, and utm_term values — where most convention drift actually happens — are untouched.
  • It is presentation-layer cleanup inside GA4 only. Your data warehouse exports, CRM lead-source fields, BI dashboards, and ad platforms all still receive the raw, dirty strings.
  • It papers over the symptom while the underlying data keeps rotting. The moment you need to join UTM data across systems — which every attribution project eventually does — you are back to writing cleanup logic.

The durable fix is the unglamorous one: emit clean, consistent values at the moment of creation, so every downstream system gets good data for free.

Frequently asked questions

Should UTM parameters be lowercase?

Yes, always. UTM values are case-sensitive in Google Analytics 4, so "Facebook", "facebook", and "FACEBOOK" show up as three separate sources and split your attribution data. Standardizing on all-lowercase is the single highest-impact naming rule a team can adopt.

Should I use hyphens or underscores in UTM values?

Pick one separator and use it everywhere. Hyphens are the most common choice because they are readable in URLs and avoid confusion with the underscores in parameter names like utm_source. Never use spaces — they get encoded as %20 and create messy, inconsistent values in reports.

What are the standard utm_medium values?

A solid core taxonomy is: email, cpc (paid search), paid-social, organic-social, display, affiliate, referral, sms, qr, and podcast. Keeping medium to a short, fixed list matters more than the exact words you choose, because GA4 uses medium heavily when assigning sessions to default channel groups.

How do I get my team to actually follow UTM conventions?

Documentation alone rarely works because it depends on everyone reading, remembering, and applying the rules under deadline pressure. The most reliable approach is enforcement at the point of creation — a tool that validates every UTM against your conventions before the link can be used, so a non-compliant link simply never exists.

Do UTM naming conventions still matter now that GA4 consolidates sources?

Yes. Source consolidation in GA4 only tidies the presentation of some known source variants inside GA4 reports. It does nothing for your custom campaign, content, and term values, and nothing for every other place your UTM data flows — your CRM, data warehouse, BI dashboards, and ad platforms all still see the raw values. Clean data at the source is the only fix that works everywhere.

Put this guide on autopilot

UTM Copilot enforces these conventions automatically at creation: describe a campaign in plain language and the AI generates a fully compliant UTM, validated against your taxonomy, saved to a shared library with version history. Free plan includes 50 UTMs a month.