Skip to main content

UTM Naming Convention: A Template Your Team Will Actually Follow

Most UTM conventions fail because they live in a document nobody opens. Here is a template with the rules, the allowed values per channel, and the workflow that makes the convention the default.

The EndFrame Team7 min read

In short

A UTM naming convention is a short set of rules for what goes in utm_source, utm_medium, utm_campaign, utm_term, and utm_content: lowercase only, hyphens between words, a fixed list of allowed sources and mediums that match GA4's channel definitions, and a campaign name pattern with a date or ID. Enforce it with a shared URL builder and presets rather than a wiki page.

Every marketing team has written a UTM naming convention. Very few teams use one. The document gets drafted, shared once, and forgotten by the next hire, and six months later the source report has google, Google, google-ads, and adwords in four separate rows. This article is the convention we recommend, written so you can copy it, plus the part most guides skip: how to make it stick.

The five rules

  1. 1Lowercase everything. Analytics tools are case-sensitive, so Summer-Sale and summer-sale are different campaigns. The only exception is platform macros the ad network expands for you.
  2. 2Separate words with hyphens. Spaces become %20 in the URL, underscores get hidden by link underlines, and camelCase breaks rule one. Hyphens survive everywhere.
  3. 3utm_source is the platform, utm_medium is the channel type. google / cpc, facebook / paid-social, newsletter / email. Never put the campaign name in the source or the platform name in the medium.
  4. 4Pick values GA4 already recognizes. Its default channel grouping keys off specific medium values (cpc, paid-social, email, social, referral). Using them means reports fill the right channel without custom rules.
  5. 5Campaign names carry a date or an ID. 2026-09-issue-14 or spring-sale-2026 sorts chronologically, survives a rename, and never collides with next year's version.

Allowed values per channel

The single most effective part of a convention is a closed list of sources and mediums. If a value is not on the list, it does not ship. Here is the list we use, with the channel-specific UTM builder pages that open pre-filled with each row.

Channelutm_sourceutm_mediumGA4 channelNotes
Google Ads searchgooglecpcPaid SearchMatches auto-tagging. See the Google Ads UTM builder.
Meta adsfacebookpaid-socialPaid SocialUse {{campaign.name}} and {{ad.name}} macros. See the Facebook ads UTM builder.
LinkedIn adslinkedinpaid-socialPaid SocialNo macros; save a preset. See the LinkedIn ads UTM builder.
TikTok adstiktokpaid-socialPaid SocialMacros are __UPPERCASE__. See the TikTok ads UTM builder.
EmailnewsletteremailEmailName the list, not the ESP. See the email UTM builder.
Organic socialinstagram, linkedin, xsocialOrganic SocialOne source per network. See the Instagram UTM builder.
Partners and affiliatespartner-namereferralReferralPut the partner ID in a custom parameter, not in utm_source.

The campaign name pattern

Source and medium are closed lists; campaign names are where freedom lives, so they need a pattern rather than a list. The pattern we recommend has three parts, joined by hyphens: what the campaign is, who or where it targets, and when. spring-sale-us-2026 and webinar-abm-q4 both fit. The parts can be dropped when they do not apply, but the order never changes, so names sort and filter predictably.

Two things do not belong in utm_campaign: the channel (that is what medium is for) and the creative (that is utm_content). If you find yourself writing facebook-spring-sale-video, you have three parameters' worth of information in one field, and you will not be able to compare the spring sale across channels.

Term, content, and everything else

  • utm_term is for the paid keyword or the audience. On Google Ads use the {keyword} macro; on Meta use {{adset.name}}; on email and organic leave it empty.
  • utm_content is for the creative or the link position: hero-cta, footer-link, video-a. It is the parameter that answers which of several links to the same page was clicked.
  • GA4's extra parameters (utm_id, utm_source_platform, utm_creative_format, utm_marketing_tactic) are optional. utm_source_platform is worth setting on paid channels so the buying platform is reported separately from the source.
  • Anything about the person, the offer, or an experiment goes in a custom parameter: promo=spring25, ref=partner-42, variant=b. Never put it in a UTM, and never put personal data in the URL at all.

Making it the default, not a guideline

A convention that lives in a wiki is a suggestion. A convention that is built into how links get created is a system. Three changes make the difference.

  1. 1One builder, with presets. Everyone tags links from the same UTM builder, and the allowed source and medium values are saved as presets so nobody types them. The builder lints casing, spacing, and special characters before the link leaves the page.
  2. 2Validate before launch. Add a line to the campaign checklist: paste the final URL back into the builder and confirm it splits cleanly into the expected fields. Thirty seconds now saves a quarter's worth of cleanup.
  3. 3Normalize on arrival. Mistakes will still happen. Mapping rules that fold Google, google-ads, and adwords into google at collection time keep the reports clean even when a link slips through. Our guide to fixing UTM parameters that break reports covers that side in detail.

That is the whole convention: five rules, a closed list of sources and mediums, a campaign name pattern, and a workflow that enforces it at the point of creation. It fits on one page, which is the only reason it will be followed. When it is, campaign reports finally group the way they were always supposed to, and the campaign tracking setup around it becomes something the whole team can trust.

Frequently asked questions

What is a UTM naming convention?

It is an agreed set of rules for how your team fills in UTM parameters: which values are allowed for source and medium, how campaigns are named, what casing and separators to use. Its purpose is to make sure the same channel always arrives under the same spelling so reports group correctly.

Should UTM parameters be lowercase?

Yes. Google Analytics 4 and most attribution tools treat parameter values as case-sensitive, so Facebook and facebook become two rows. Lowercase everything except platform macros such as TikTok's __CAMPAIGN_NAME__, which the platform expands itself.

What should utm_medium be for paid social?

paid-social, or one of the other values GA4 recognizes: paid_social, paid social, or paidsocial. Combined with a social source like facebook or linkedin, it lands in the Paid Social channel. Plain social lands in Organic Social.

How do I make my team follow the convention?

Remove the chance to improvise. Give everyone one URL builder with the convention saved as presets, lint values before links ship, and normalize incoming parameters on arrival so occasional mistakes are corrected instead of accumulating.

Try EndFrame

Recover the conversions iOS and ad blockers hide.

EndFrame collects events first-party and forwards conversions server-side to Meta, GA4, TikTok, and webhooks with event-ID deduplication — then shows the result in real time, with the visit-to-conversion path you can audit.

No credit card required

Keep reading