Terminus Hub is here, the next generation of campaign governance.See how it compares to Classic

UTM Naming Conventions: How to Define One and Make It Stick

PC

Puru Choudhary

Last updated · published

UTM Naming Conventions: How to Define One and Make It Stick

A UTM naming convention is the rule for what goes in every UTM field: the allowed values, one case, which character separates what, and the order of the segments packed into utm_campaign. Any segment that doesn’t apply gets a placeholder, so every name still parses. Define it field by field. Then put it inside the form people build links with, because a convention that lives only in a document gets read once.

TL;DR

  • A convention answers six questions: allowed values per field, case, separators, segment order inside utm_campaign, a placeholder for empty segments, and who can add values.
  • Lowercase everything. GA4 treats Email and email as different values.
  • Hyphens between segments, underscores inside a segment, _na_ for an empty position, three to five segments.
  • Keep utm_source and utm_medium as short picklists. Only utm_campaign gets structure, and only its last segment gets free text.
  • Keep shop, shopping and cross-network out of campaign names unless you mean them. GA4’s channel rules read the campaign name too.
  • Enforce the convention where links get built: a validated spreadsheet, an in-house form, or a governance tool.

What a Naming Convention Actually Decides

Most teams think they have a convention because they have a list of sources. That’s one decision out of six.

  1. Allowed values per field. The picklist for utm_source, the picklist for utm_medium, and a list for every segment inside utm_campaign.
  2. Case. One rule, applied to every field.
  3. Separators. Which character splits segments, and which one joins words inside a segment.
  4. Segment order. Where region, product, goal and date sit inside utm_campaign.
  5. Placeholders. What goes in a segment that doesn’t apply, so the positions after it stay put.
  6. Ownership. Who is allowed to add a new value.

Skip any of them and the gap fills itself. Somebody decides the case on the fly. Somebody else decides the order. Six months later the campaign report holds three spellings of one launch and nobody can say which one is right.

The Marketing Taxonomy Guide’s first taxonomy chapter walks through these decisions with a starter vocabulary you can copy. Below is the short version, plus worked examples and the part most conventions skip: enforcement.

Lowercase Everything

Google says it plainly: parameter values are case sensitive, so utm_source=google and utm_source=Google are different values.

GA4’s default channel group is more forgiving, since channel definitions aren’t case sensitive. So Email still lands in the Email channel. That’s exactly why casing drift survives so long. The channel report looks fine while the source, medium and campaign reports split one value into two rows.

Pick lowercase. It’s what most tools produce when they normalize, and it takes one decision off every link.

Ban spaces while you’re at it. A space becomes %20 or + in the URL and a different-looking value in every export.

Hyphens Between Segments, Underscores Inside Them

A structured campaign name needs two separators with two jobs.

Hyphens split segments. Underscores join words inside a segment. So us-denim-sale-2026_10-fall_restock splits cleanly into five parts, and fall_restock comes out as one.

Use one character for both jobs and no parser can tell where a segment ends. us-denim-sale-2026-10-fall-restock could be five segments or seven.

In this arrangement, a hyphen may never appear inside any value, in any field. If paid-social is your medium and the medium ever rides inside a campaign name or a composite parameter, it breaks the split. That’s why the guide’s chapter on taxonomy structures writes the medium as paid_social.

Our free UTM naming convention template flips the roles, with underscores between slugs and hyphens inside the last one. Either arrangement works if you apply it everywhere; what breaks reports is mixing them.

Build utm_campaign From Segments in a Fixed Order

utm_source and utm_medium are single values from a picklist. utm_campaign is where the dimensions your reports need live: region, product line, goal, launch date, and a name.

A five-segment pattern for an illustrative apparel brand:

<region>-<product_line>-<goal>-<yyyy_mm>-<name>

Four rules keep it parseable.

Three to five segments. Past five, names get hard to read and harder to fill in, and people start skipping positions. If you genuinely need more dimensions, a longer string is the wrong answer. Key-value pairs or an ID with a lookup table scale further, and the taxonomy structures chapter compares them.

We’ll own a mistake here. The first version of this post built its example from six segments, men-shirts-sale-us-2018_10_28-promotion, with audience in a slot of its own. We’d cut it to five today, and audience is the slot we’d drop.

Match the structure to the team. The guide’s comparison fits positional names like this one to small teams with a disciplined process, and recommends key-value names for most growing teams. Past a handful of link builders, a positional name holds up only when a builder assembles it and nobody types it. That’s the enforcement section below.

The segment you filter by most goes first. If regional teams pull their own reports, region leads. If product marketing owns the budget, product line leads.

Fill empty positions with _na_. A campaign that runs everywhere still needs something in the region slot. Drop it from _na_-knitwear-sale-2026_12-holiday_gifts and knitwear gets read as the region, sale as the product line, and the date as the goal. Nothing in GA4 flags it.

Never leave a position empty.

Why _na_ and not na? Because na is a perfectly reasonable region code for North America. The underscores make the placeholder impossible to confuse with a real value.

Free text goes last, and only there. When teams walk us through their setup, the campaign name is usually the field they argue about most, because it’s the one people still type by hand. The workable compromise is a structured prefix and one free-text segment at the end. That segment gets a pattern (lowercase letters, digits and underscores), never a hyphen, and it never moves.

Goal (lead, sale, education) is the segment people disagree about. When we asked four analytics practitioners about it in 2019, three said leave it out. We keep it for one reason: it tells an analyst which metric to judge the campaign on, and that matters when the people building links aren’t the people reading reports. If the same person tags and reports, and every campaign has one obvious conversion, drop it and run four segments.

All three are illustrative, using the pattern above.

FieldEmailPaid socialPaid search
utm_sourcenewsletterfacebookbing
utm_mediumemailpaid_socialcpc
utm_campaignus-denim-sale-2026_10-fall_restockca-outerwear-lead-2026_11-size_guide_na_-knitwear-sale-2026_12-holiday_gifts
utm_contenthero_buttoncarousel_1080x1080text_ad_b
utm_term(unused)(unused)wool_sweaters

Read the campaign row across. Every name has five segments. The paid search campaign runs in every region, so position one holds _na_, and product line is still second.

Each row also lands in the channel you’d expect. Medium email matches GA4’s Email rule. A social source with a medium starting paid matches Paid Social. A search source with cpc matches Paid Search.

Google Ads works differently. With auto-tagging on, GA4 fills source, medium and campaign from the click identifier rather than your UTMs, so the convention also has to govern the campaign names inside Google Ads. The Google Ads auto-tagging post covers how the two fit together.

One trap to check before you publish a vocabulary. GA4’s shopping channels match the campaign name against ^(.*(([^a-df-z]|^)shop|shopping).*)$, and its Cross-network channel matches any campaign name containing cross-network. A product line called shop_accessories or a promo named holiday_shopping moves the session into a shopping channel whether you meant it or not. Check the three places a match can form: keep any word starting with shop off your picklists, block shop and shopping in the free-text segment’s pattern, and test the assembled name, since neighboring segments like cross and network join into cross-network.

Put Creative in utm_content, Keywords in utm_term

utm_content holds what the visitor saw before clicking: the display size, the image or video variant, which of two buttons in the same email. utm_term holds the paid keyword.

Both get their own picklists or patterns. carousel_1080x1080 and Carousel 1080 in the same month is the same drift problem, one field over.

The test for any new piece of information: picture the report you’d run with it. If you can’t name the report, leave the information out. Every extra value is one more thing somebody has to pick correctly.

Read Structured Names in GA4

The payoff for all this structure is filtering. In GA4, open Reports > Acquisition > Traffic acquisition and switch the primary dimension to Session campaign. Then click Add filter, choose Session campaign, and set the condition. If a report’s filter panel doesn’t offer the match type you need, build the same filter in an exploration.

  • Every US denim campaign: begins with us-denim-.
  • Every lead campaign, in any region: matches regex [a-z_]+-[a-z_]+-lead-.*. GA4 regex is a full match by default, so the pattern has to describe the whole name; the trailing .* covers the date and name.

Because hyphens only ever mean “next segment,” a spreadsheet can split an exported name back into columns with one formula. For more on reading the three core parameters, see mastering utm_campaign, utm_medium and utm_source in Google Analytics.

The same values travel beyond analytics. Capture them on your lead forms and your CRM can report on goal and product line too; adding UTM and referrer information to lead forms shows the setup.

A Document Gets Read Once. A Form Gets Used Every Time.

A lot of teams keep their convention in a document that new hires read during onboarding. Then the new hire opens a URL builder with five empty text boxes, and the document is in another tab.

Writing it down is step one. Enforcement means the wrong value can’t be entered, and there are three ways to get there.

A spreadsheet with data validation. Lock each UTM cell to a picklist, add a lowercase check, add a regex for the campaign name. The free template post builds exactly that, and it holds up for a small team. It starts to strain when several people edit the same rows or build links outside the sheet.

A form you build in house. Workable if you have the engineering time, and you’ll maintain the picklists forever.

A governance tool. In Terminus, the marketing taxonomy governance platform, the convention becomes a governance model. Fields draw from picklists you author, and a hierarchical list lets a parent selection narrow the child options, so choosing email as the medium narrows the sources to email sources. A taxonomy assembles utm_campaign from its segment fields, so nobody types the hyphens. Validation handles case, spaces, uniqueness and patterns, which is where the free-text segment gets its rule. And the same rules apply whether a link comes from the Quick, Form or Grid builder, a CSV round trip, or the API.

Changes go through draft and publish: edit the model privately, publish when it’s ready, and the team keeps building against the published version in the meantime.

If you’d rather not start from a blank model, the template library has ready-made conventions, and the playground lets you try one without signing up. Trials run 21 days with no credit card.

Roll It Out Without Breaking Your Reports

Pick a start date and write it at the top of the convention. Everything built from that date follows the rules.

Don’t rename historical campaigns. GA4 keeps the values it already collected, so a renamed campaign becomes two rows and your trend line breaks at the rename.

Give every picklist an owner who decides whether jackets is a new product line or already covered by outerwear.

Then review the campaign report after the first month. Any value that doesn’t split into the right number of segments tells you exactly which link was built outside the rules.

FAQ

What is a UTM naming convention?

It’s a documented rule set for UTM values: which values each field allows, one case, which characters separate segments and join words, the order of segments inside utm_campaign, a placeholder for empty segments, and who can add new values.

Should UTM values be lowercase?

Yes. GA4 treats parameter values as case sensitive, so Facebook and facebook show up as separate rows in source reports. Channel grouping isn’t case sensitive, which hides the problem in channel reports without fixing it.

Should I use hyphens or underscores in UTM values?

Both, with separate jobs. We use hyphens between segments and underscores inside a segment, as in us-denim-sale-2026_10-fall_restock. The reverse arrangement also works. Mixing the two is what breaks parsing and splits reports.

How many segments should utm_campaign have?

Three to five. More than five gets hard to fill in correctly. If you need more dimensions, move to key-value pairs or an ID with a lookup table rather than a longer string.

What goes in a segment that doesn’t apply?

A placeholder such as _na_. Leaving the segment out shifts every later segment one position, and every report that reads by position gets it wrong. Avoid plain na, which reads as North America in a region slot.

Where should campaign goal go?

Inside utm_campaign, as its own segment with a short picklist such as lead, sale and education. It tells whoever reads the report which metric to judge the campaign on, which matters most when link builders and report readers are different people. If one person does both and every campaign has one obvious conversion, you can leave it out.

Should I rename old campaigns to match a new convention?

No. Renaming splits one campaign into two rows and breaks trend reports. Apply the convention from a start date and let old values age out.

Can GA4 enforce a naming convention?

No. GA4 records whatever arrives in the URL. Enforcement has to happen where links are built: a validated spreadsheet, a custom form, or a governance tool with picklists and validation.

Terminus helps you and your team be consistent in UTM tracking

Try Terminus risk-free for 21 days. Cancel anytime with 1 click.