Skip to main content
UTM guide

UTM Naming Conventions: Rules and a Copyable Template

A convention you can adopt as it stands: the rules that keep reporting consistent, a controlled vocabulary, a campaign name structure, and a template you can copy into a shared doc today.

Why a convention beats a tool

Building a tagged link is easy. Building the ten thousandth one the same way as the first is the hard part, and it is the part that decides whether your reports are readable. Nothing enforces UTM values: the analytics tool records exactly what is in the link, so Email, email and e-mail become three separate channels, and a campaign spelled two ways becomes two campaigns that never add up.

A convention is just a small set of decisions made once, so nobody has to make them again per link. It costs a few minutes to agree and seconds to follow. This page gives you one you can adopt as it stands, or adjust to fit how your team already thinks. None of it requires buying anything.

The rules that keep reporting consistent

Five decisions. Make them once, write them down, and every link after that is mechanical.

1. Lowercase everything, always

Analytics tools are case-sensitive, so one capital letter creates a second version of the same value. Lowercase every source, medium and campaign without exception. It is the single rule that prevents the most common split.

2. One separator, and it is a hyphen

Spaces are not legal in URLs and turn into %20; underscores are easy to miss and get confused with the parameter names. Pick the hyphen for spaces inside a value (spring-sale-2026) and never mix separators.

3. A fixed vocabulary for medium and source

Medium should be a short, closed list everyone knows by heart. Source is more open, but the ones you use often should also be agreed, so google is never also written adwords or google-ads.

4. No duplicate spellings, ever

paid-social, paidsocial and paid_social are three mediums to your analytics and one channel in your head. Agree the exact string and keep to it. This is what a naming template enforces automatically.

5. A campaign name with a fixed shape

Decide the pieces a campaign name contains and the order they go in, so two people naming the same campaign independently arrive at the same string. The structure below is a starting point.

A starting vocabulary for medium

Keep medium to a short closed list. These map cleanly onto the GA4 default channels, so your channel grouping works without custom rules. Add to it deliberately, not per campaign.

utm_mediumUse it forGA4 channel it feeds
emailAny email you send: newsletter, lifecycle, transactionalEmail
cpcPaid search clicks you tag by handPaid Search (with a search source)
socialUnpaid social posts and biosOrganic Social
paid-socialPaid social adsPaid Social (with a social source)
referralLinks from partner sites and directoriesReferral
affiliateAffiliate and partner-commission linksAffiliates
displayBanner and display buysDisplay

Source is the specific place inside the medium: google and bing for cpc; linkedin, x and instagram for social; the partner's own name for referral and affiliate. The point is not this exact list, it is that your team has one list and uses it.

A campaign naming structure

A campaign name reads best when its pieces are in a fixed order, separated by hyphens, going from broad to specific. Include only the pieces you will actually filter or group by. A common, reliable shape:

[theme]-[product-or-audience]-[region?]-[yyyymm?]

The last two pieces carry a question mark because they are optional: add region only if you run the same campaign in more than one, and add a date only if you run the same campaign more than once and need to tell the runs apart. A date on a one-off campaign is noise. Worked examples:

spring-sale-2026
webinar-security-emea
black-friday-us-202611
launch-relay

Everything in one campaign shares this exact string, on every link, in every channel. That is what lets a report add an email, an ad and a social post back into one campaign total.

The copyable convention

Here is the whole thing in one block you can paste into a shared doc, a wiki page or a team channel and start using today.

UTM naming convention Rules - Lowercase everything. No capitals, anywhere. - Hyphens for spaces inside a value. Never underscores or spaces. - Medium comes from the agreed list only (below). No new mediums per campaign. - One agreed spelling per source (google, not adwords/google-ads). - Campaign name shape: [theme]-[product-or-audience]-[region?]-[yyyymm?] - Never tag internal links (links between pages of our own site). utm_medium (closed list) email | cpc | social | paid-social | referral | affiliate | display utm_source (agreed spellings for the common ones) search:   google | bing social:   linkedin | x | instagram | facebook | youtube email:    newsletter | lifecycle partners: [use the partner's short name] utm_campaign [theme]-[product-or-audience]-[region?]-[yyyymm?] e.g. spring-sale-2026, webinar-security-emea, black-friday-us-202611 utm_content (optional) Only when one campaign has several links to tell apart. e.g. header-cta | footer-cta | variant-a | variant-b utm_term (optional) Paid search keywords. Usually set automatically by the ad platform.

Adjust the vocabulary to match how your team already talks. The rules above the vocabulary are the part that should not change.

Good vs bad, and why

The bad column is not wrong syntax. Every one of these works technically and still breaks the report.

BadWhy it breaksGood
utm_medium=EmailA capital creates a second medium. Email and email never add up.utm_medium=email
utm_campaign=Spring Sale 2026Spaces encode to %20 and the capitals split it from the hyphenated version.utm_campaign=spring-sale-2026
utm_source=email&utm_medium=newsletterSource and medium are reversed, so the traffic lands in the wrong channel.utm_source=newsletter&utm_medium=email
utm_medium=paidsocialA one-off spelling of an existing medium fragments the channel.utm_medium=paid-social
utm_source=google-adsA second spelling of a source you already use elsewhere as google.utm_source=google

When a document is not enough

A convention in a shared doc works right up until the team grows. Then someone new has not read it, someone in a hurry guesses, and the report drifts one misspelled campaign at a time. A document cannot stop that, because it is not present at the moment the link is made.

The version that holds is one where the rule runs when the link is created: the fields are required, an unknown medium is refused, and a duplicate is caught before it is saved. That is what Relay's UTM governance does inside TagPipes. This guide is how you design the convention; Relay is how you enforce it once designing it by hand stops scaling. You do not need it to start: adopt the template above first.

Frequently asked questions

Build one link by the convention, free.

The free builder lowercases and hyphenates for you and keeps any parameters already on the destination. When one convention has to hold across a team, Relay applies it at the moment a link is created.