UTM naming conventions: a marketer's playbook for clean GA4 reports

The naming rules that keep your campaign attribution legible months after launch. Casing, separators, taxonomy, and the templates we use.

Trakl Team5 min read
On this page+

A team that has clean GA4 reports has a written UTM naming convention. A team that has messy GA4 reports does not. The convention does not have to be elaborate. Three rules, a taxonomy table, and a shared link builder cover roughly 95 percent of the leakage.

This is the playbook we hand to teams that want to fix their attribution data without blowing up six months of campaign history.

The three rules

1. Lowercase everything.

GA4 is case-sensitive. Every value in every UTM parameter is treated as a literal string. utm_medium=Email and utm_medium=email are two different rows in your Default Channel Grouping report. Once a team has typed Email even once, the data is split between two values and you have to choose between merging them retroactively (impossible without re-tagging) or accepting the split (annoying).

The fix is mechanical: every link your team builds gets lowercased on the way out. Either by your link builder (Trakl does this), by a Zapier rule, or by a team norm enforced in code review of campaign briefs.

2. Pick one separator and stay consistent.

Both hyphens and underscores survive URL encoding. Spaces do not (they become %20 and look terrible). The choice between hyphen and underscore is mostly aesthetic, with one important caveat: GA4's channel grouping match list uses both styles inconsistently. paid_social and paid-social both appear; cpc and ppc are alternatives.

Our default:

  • Hyphens for utm_source (partner-name, q2-newsletter)
  • Hyphens for utm_campaign (q2-launch, black-friday-2026)
  • Underscores for utm_medium when the value is a GA4-recognized compound (paid_social, organic_shopping)
  • Hyphens for utm_term and utm_content (audience-saas, hero-cta)

This pattern has the side benefit of making the medium visually distinct from the campaign in your report, since it is the only field with underscores.

3. One stable taxonomy for source and medium.

Write down which sources map to which mediums. Put the table in a shared doc, link it from every campaign brief. The piece on utm_source vs utm_medium has the full table; the short version:

  • linkedin maps to social. Or paid_social if it was a paid post.
  • mailchimp maps to email.
  • google maps to organic or cpc. Never anything else.
  • partner-name maps to referral. Or affiliate if there is a commission.

Without this table, two team members building campaigns in different weeks will produce conflicting tags. The cost is a GA4 report you cannot read.

The campaign value rule

utm_campaign is the parameter most teams under-use. The campaign value should be a stable string for the entire initiative, including across channels.

If your Q2 product launch has email, paid social, and a partner blast, all three should share the same utm_campaign value. We use:

utm_campaign=q2-launch

Across all three channels. The source-medium pair changes by channel, but the campaign is one row.

The common mistake: encoding the channel into the campaign value, like q2-launch-email and q2-launch-social-paid. This breaks the campaigns workspace inside any analytics tool: now the campaign is three rows and you cannot see the initiative as a whole.

The four template patterns we use

Almost every campaign falls into one of four shapes. Pick a template, fill it in, ship.

  1. 01

    Email send template

    utm_source=mailchimp · utm_medium=email · utm_campaign=q2-launch · utm_content=hero-cta. The utm_content slot identifies the link position inside the email (header, hero, footer).
  2. 02

    Paid social template

    utm_source=facebook · utm_medium=paid_social · utm_campaign=q2-launch · utm_content=carousel-v1 · utm_term=audience-saas. utm_content for creative variant, utm_term for audience segment.
  3. 03

    Organic social template

    utm_source=linkedin · utm_medium=social · utm_campaign=q2-launch · utm_content=founder-post. utm_content identifies the post variant; useful for A/B between founder voice and brand voice.
  4. 04

    Partner referral template

    utm_source=partner-domain (lowercased) · utm_medium=referral · utm_campaign=q2-launch · utm_content=hero-banner. utm_content identifies the placement on the partner site.

For high-volume programs (paid search ads, weekly newsletters), automate the template. The slot values come from the platform itself (Google Ads auto-tagging is the canonical example) rather than from typed input.

The reason most UTM data is messy is mechanical. Links get retyped, copied across drafts, built ad-hoc when the campaign launches at 11pm on a Sunday before the Monday push. Three people typing utm_medium=Email, utm_medium=email, and utm_medium=newsletter for the same email send is what you get.

The fix is a single shared link builder used by every person on the team. The output is the only place tagged URLs come from. That guarantees the casing, the separator, and the source-medium mapping stay aligned.

That is what Trakl is. The link form is opinionated. The dropdowns are powered by your taxonomy. The casing is enforced. The output is a short branded link with the UTMs preserved on redirect.

If you are not on Trakl yet, the free UTM builder provides the same builder workflow without the shortening or analytics layers. It is enough on its own to keep a small team's reports clean.

How to roll a convention out to a team that does not have one

Three steps, in order:

  1. Document the convention. One page. The three rules above, the taxonomy table for source-medium, and four template campaigns showing the full pattern. Link it from your team wiki, your campaign brief template, and your onboarding doc.
  2. Run a one-time audit. Open GA4 → Reports → Acquisition → Traffic Acquisition. Group by Source / Medium. Find every row where the medium is not in GA4's channel-match list. These are the problem campaigns. Going forward, the convention prevents new ones; the old ones stay wrong but they decay over months.
  3. Tie the convention to a tool. Trakl, the free UTM builder, a Google Sheets template, whatever. Make it harder to bypass than to follow. Conventions die when they require typing instead of selecting.

What not to do

  • Do not retroactively update old links. A short link with a wrong UTM is fixed. Republishing it changes nothing about the historical click data, and rewriting the URL on a printed asset is impossible. Live with the past mistake; stop making new ones.
  • Do not invent custom parameters like utm_audience or utm_subchannel. GA4 ignores them. Stick to the five canonical UTMs. If you need extra dimensions, push them to GA4 custom dimensions and keep them out of the URL.
  • Do not use the campaign value to encode date. utm_campaign=2026q2-launch is fine. utm_campaign=q2-launch-2026-april-week-3 is over-engineered. The launch date lives in the platform; do not duplicate it.

Where to go from here

For the working table that maps every source to its medium, see utm_source vs utm_medium. For the deeper read on the parameters themselves, see the UTM parameters pillar guide.

For the practical link-building work, the free UTM builder generates clean URLs with the convention enforced.

Frequently filed

Common questions.

Q.01What is a UTM naming convention?+

A UTM naming convention is a written set of rules a team follows when building tagged URLs. It covers the casing (lowercase), the separator (hyphens or underscores), the values allowed in each parameter, and the templates used for common campaigns. Teams without a convention end up with the same campaign in three different rows in GA4.

Q.02Should UTM values be lowercase or mixed case?+

Lowercase. Always. Google Analytics is case-sensitive; utm_medium=Email and utm_medium=email are two separate rows in your reports. Lowercase is the only convention that survives contact with multiple team members building links manually.

Q.03Should I use hyphens or underscores in UTM values?+

Either works, but pick one and stay consistent. Hyphens read better in URLs. Underscores are more common in GA4's documentation. We use hyphens for source and campaign values, underscores for compound mediums (paid_social, organic_shopping) to match GA4's matching strings.

TT

By the byline

Trakl Team

Editorial team

We build Trakl, a link shortener and UTM tracker for marketing teams. We write here from the cleanup work, support tickets, and campaign reviews that fill the rest of our week. Specifics over slogans, and we cite the source.

Photo: Martin Martz on Unsplash