UTM Naming Conventions Every Agency Should Use

A UTM naming convention stops client campaign data splitting across sources. Get the rules, the GA4 channel traps and a copy-ready agency template.

Ready to get started?

Set up in 2 minutes. White-label reports and AI insights.

14-day free trial - 2 min setup - no credit card required

UTM naming conventions every agency should use

A UTM naming convention is a written rule set that fixes exactly how your team writes utm_source, utm_medium, utm_campaign and the rest, so the same campaign always lands in the same row of every client report. Without one, Facebook, facebook and fb become three separate traffic sources, and the monthly report you send your client quietly stops adding up.

This is the least glamorous job in an agency and the one that silently ruins the most reporting. Nobody loses a client over a sloppy utm_medium value. They lose a client over a report that says paid social drove 4 conversions when it actually drove 40, split across five spellings of the same thing.

Below is the convention we recommend, the GA4 rules that decide whether your tags work at all, and real numbers from the GA4 properties connected to ReportsMate's Google Analytics integration showing how often tagging actually breaks.

Last updated: October 2026

Key takeaways

  • A UTM naming convention is a controlled vocabulary, not a style preference. Lock the approved values for utm_source and utm_medium in a shared document, then stop anyone hand-typing links.
  • UTM values are case-sensitive. utm_source=LinkedIn and utm_source=linkedin are two different sources in Google Analytics 4, which is the single biggest cause of split campaign data.
  • utm_medium decides your channel, not utm_source. GA4's Email channel only fires when the source or medium matches email, e-mail, e_mail or e mail. A medium of newsletter or eml never reaches the Email channel.
  • Across 26 cached GA4 report snapshots covering 16 client properties in ReportsMate, 20 snapshots contained at least one session filed under GA4's "Unassigned" channel, and 8 of those 26 had 5% or more of sessions sitting there. Unassigned is GA4's bucket for traffic whose source and medium match no channel rule.
  • Not one of those 26 snapshots recorded a single session in GA4's Email channel. Email is almost certainly running for some of those clients; the tagging just is not reaching the channel that would show it.
  • Pick one delimiter and never mix it. Hyphens or underscores both work. Spaces encode as %20 and break downstream tools.

Table of contents

  1. What is a UTM naming convention?
  2. Why UTM tagging breaks inside agencies
  3. Which UTM parameters should you actually use?
  4. What should your utm_source values be?
  5. What should your utm_medium values be?
  6. How should you name campaigns?
  7. The formatting rules every value must follow
  8. A copy-ready UTM naming convention template
  9. How to make the convention stick
  10. What this looks like in a client report
  11. Common UTM mistakes and their fixes
  12. FAQs

What is a UTM naming convention?

A UTM naming convention is a documented standard that defines the approved values, formatting and structure for every UTM parameter your agency adds to a link. It covers which parameters are mandatory, what each one is allowed to contain, how words are separated, and who is permitted to invent a new value.

The five classic parameters have been stable for years:

ParameterWhat it answersExample value
utm_sourceWhich specific platform or property sent the clickgoogle, facebook, linkedin, mailchimp
utm_mediumWhat type of marketing it wascpc, email, paid-social, referral
utm_campaignWhich campaign or promotion it belongs to2026-q4-spring-sale
utm_contentWhich creative, link or variant was clickedhero-cta, carousel-v2
utm_termThe keyword, for manually tagged searchtruck-tyre-repair

Google Analytics 4 also reads four newer parameters: utm_id (campaign ID), utm_source_platform, utm_creative_format and utm_marketing_tactic. Most agencies can ignore three of those four. utm_id is the one worth knowing about, because GA4's channel grouping rules reference it directly.

Two pieces of vocabulary matter here before we go further.

Channel grouping is GA4's rule-based mapping of raw source and medium values into friendly buckets like Organic Search, Paid Social and Email. You do not control those rules on the default channel group; you only control what you feed them.

Session-scoped dimensions are the source, medium and campaign values GA4 attaches to the whole session rather than a single event. Your UTMs populate these. If they are wrong, every session metric in your report inherits the mistake.

Why UTM tagging breaks inside agencies

UTM tagging breaks in agencies because the number of people allowed to create a link is always larger than the number of people who have read the convention. A client's in-house marketer sends a newsletter. A freelance designer schedules a social post. A junior buyer launches a test campaign on a Friday. Each one invents a value, and each invented value becomes a permanent extra row in the report.

We can put real numbers on how often this ends badly, because reporting runs through our own pipeline. Across 26 cached GA4 report snapshots covering 16 client properties connected to ReportsMate:

SignalResult
Snapshots with at least one session in GA4's "Unassigned" channel20 of 26
Distinct client properties showing Unassigned sessions12 of 16
Snapshots with 5% or more of sessions in Unassigned8 of 26
Median Unassigned share of sessions1.4%
Snapshots recording any session in GA4's Email channel0 of 26
Median Direct share of sessions50%
Snapshots where Direct was 70% or more of sessions7 of 26

Treat these as directional rather than an industry benchmark. It is our own report cache, not a representative survey, and the sample is small. But the shape of it is hard to argue with: roughly three in four report snapshots carried traffic GA4 could not file anywhere, and the Email channel was empty across every single one.

That last row deserves a second look. GA4 only files a session under Email when the source or medium matches email, e-mail, e_mail or e mail, per Google's default channel group documentation. A newsletter tagged utm_medium=newsletter does not match. Neither does eml, Email with a capital E in some setups, or email-blast. The campaign ran, the clicks arrived, and the channel that should have credited it stayed at zero.

Direct sitting at a 50% median is a softer signal. Direct legitimately absorbs bookmarks, typed URLs, dark social and app-to-browser handoffs, so a high Direct share is not proof of bad tagging on its own. It is still the bucket where untagged email and untagged partner links go to disappear, which is why a convention that covers owned channels matters as much as one that covers paid.

Which UTM parameters should you actually use?

Require utm_source, utm_medium and utm_campaign on every manually tagged link, and treat utm_content and utm_term as optional but encouraged. Three mandatory parameters is the sweet spot: enough to classify the traffic correctly, few enough that people comply.

Here is the rule we hand to teams:

ParameterStatusWhy
utm_sourceMandatoryWithout it GA4 cannot identify the platform
utm_mediumMandatoryThis is what drives channel grouping
utm_campaignMandatoryLets you group spend and results by initiative
utm_contentOptionalNeeded for creative-level or A/B comparison
utm_termOptionalOnly for manually tagged paid search
utm_idOptionalUseful when you import cost data keyed to a campaign ID

One important exception: do not manually tag Google Ads traffic if auto-tagging is enabled. Google Ads appends a gclid and GA4 reads it directly, which gives you campaign, ad group and keyword detail that manual UTMs cannot match. Google Ads Help covers auto-tagging setup. Manual UTMs on auto-tagged links can override the richer data. The same logic applies to Meta: if you are using Meta's own URL parameters at the ad level, document that as the single source for Meta tagging rather than letting both systems write values. Meta Ads Help documents the dynamic URL parameters available.

What should your utm_source values be?

utm_source should name the specific platform or property that sent the click, always lowercase, drawn from a closed list. The test is simple: if you cannot point at the website, app or sending tool, it is not a source.

Approved source list for a typical agency client:

  • google
  • bing
  • facebook
  • instagram
  • linkedin
  • tiktok
  • youtube
  • mailchimp (or whichever email platform the client actually uses)
  • klaviyo
  • newsletter-partner-name for a specific co-marketing placement
  • qr-print for offline collateral

Three source rules save the most pain:

Never abbreviate. fb is not facebook. Beyond the duplicate-row problem, GA4's Paid Social and Organic Social rules match the source against a list of known social sites. An abbreviation that is not on that list cannot be recognised as social, so a perfectly tagged utm_medium=paid-social link with utm_source=fb risks landing somewhere you did not intend.

Use the platform, not the client. utm_source=acme-corp tells you nothing. The client is already implied by the property the data lands in.

Never put the campaign in the source. utm_source=facebook-spring-sale makes a new source every campaign and destroys your ability to compare platforms over time.

What should your utm_medium values be?

utm_medium is the most consequential parameter in your convention, because GA4's default channel group reads it to decide which channel the session appears in. Get the medium wrong and the session either lands in the wrong channel or falls into Unassigned, where no client will ever find it.

These are the rules GA4 actually applies, per Google Analytics Help:

GA4 channelWhat it requires
EmailSource or medium matches email, e-mail, e_mail or e mail
Paid SearchSource is a recognised search site and medium matches ppc, retargeting, anything containing cp, or anything starting with paid
Paid SocialSource is a recognised social site and medium matches the same paid pattern above
Organic SocialSource is a recognised social site, or medium is social, social-network, social-media, sm, social network or social media
ReferralMedium is referral, app or link
Cross-networkCampaign name contains cross-network (Performance Max, Demand Gen and Smart Shopping report this way)
DirectSource is exactly (direct) and medium is (not set) or (none)
UnassignedNo other channel rule matched

Read that Paid Social row again, because it catches people out. It needs both halves. A recognised social source and a paid-pattern medium. In our 26 snapshots, Paid Social appeared in only 2 of 16 client properties, while Cross-network appeared in 7 of 16. Cross-network showing up more often than Paid Social is what you would expect from accounts running Performance Max and Demand Gen, but it is also what a half-tagged paid social programme looks like.

So the approved medium list becomes short and deliberate:

Use caseApproved utm_mediumResulting GA4 channel
Paid search, manually taggedcpcPaid Search
Paid socialpaid-socialPaid Social
Paid display or programmaticdisplayDisplay
Organic social postssocialOrganic Social
Email campaigns and newslettersemailEmail
Affiliate and partner linksaffiliateAffiliate
Earned placements and partner sitesreferralReferral
Offline and QR codesqr or printUnassigned by design, isolate with a manual channel group

Note the last row. Some mediums genuinely have no GA4 default channel, and that is fine as long as it is deliberate and documented. The crime is unintentional Unassigned traffic, not intentional. If offline matters to a client, build a manual channel group for it and explain the bucket in the report.

If the channel groups themselves are the part your clients keep asking about, we have a plain-English walkthrough in GA4 default channel groups explained.

How should you name campaigns?

utm_campaign should follow a fixed slot order so that every campaign name sorts, filters and reads the same way. Campaign tagging standards fall apart when the name is free text, because free text is where dates, offers, audiences and internal job numbers all fight for the same field.

The pattern we recommend has four slots:

[year-quarter]-[offer-or-theme]-[audience-or-geo]-[variant]

Worked examples:

  • 2026-q4-spring-sale-vic-retargeting
  • 2026-q4-always-on-brand-national
  • 2026-q3-free-audit-smb-cold

Why this order works:

Date first makes everything sort chronologically. In any report that lists campaigns alphabetically, a leading 2026-q4 puts the current quarter together automatically.

Theme second is how clients talk. When a client asks "how did the spring sale go", you want one filter on spring-sale to return every platform.

Audience and variant last keeps them optional. A campaign that does not need a geo slot just omits it, and the name is still parseable.

Keep campaign names under about 40 characters. Longer than that and they get truncated in platform UIs and report tables, which defeats the purpose of a readable name.

One more standard worth writing down: the campaign name should match across platforms. If the same spring sale is running on Google Ads, Meta and email, all three should carry utm_campaign=2026-q4-spring-sale. That is the only way a cross-platform view of one initiative is possible. We go deeper on that in cross-platform campaign tracking.

The formatting rules every value must follow

Six formatting rules cover almost every UTM parameters best practices list worth reading, and they take about ten minutes to agree on.

1. Everything lowercase, always. UTM values are case-sensitive. Email, email and EMAIL are three different mediums. This one rule prevents the majority of duplicate rows.

2. One delimiter, chosen once. Hyphens or underscores. Both work fine. Mixing them is the problem, because spring-sale and spring_sale do not match. We prefer hyphens because they read better in URLs.

3. No spaces, ever. A space becomes %20 in the URL and shows up that way in some tools. Use your delimiter instead.

4. No special characters. No &, ?, #, %, +, brackets or accented characters. They either break the query string or get encoded into noise.

5. No personal or sensitive data. UTM values end up in analytics reports, server logs and referrer headers. Email addresses, names and customer IDs do not belong there.

6. No campaign detail in source or medium. Source is the platform. Medium is the type. Campaign is the campaign. Keeping the slots clean is what makes year-on-year comparison possible.

A seventh rule is more cultural than technical: one person owns the approved value list. Anyone can request a new value. Only the owner adds one. That is the difference between a convention and a suggestion.

A copy-ready UTM naming convention template

Paste this table into the client's shared drive, name the owner, and treat it as the only approved vocabulary.

Channelutm_sourceutm_mediumutm_campaignutm_content
Google Ads (auto-tagged)leave to auto-taggingleave to auto-taggingleave to auto-taggingleave to auto-tagging
Microsoft Adsbingcpcslot patternad variant
Meta paidfacebook or instagrampaid-socialslot patterncreative name
LinkedIn paidlinkedinpaid-socialslot patterncreative name
TikTok paidtiktokpaid-socialslot patterncreative name
Organic socialplatform namesocialslot pattern or always-on-organicpost type
Email campaignemail platform nameemailslot patternlink position
Email newsletteremail platform nameemail2026-newsletter-[month]link position
Affiliatepartner nameaffiliateslot patternplacement
Partner or PR placementpublisher domainreferralslot patternarticle slug
QR code and printqr-printqrslot patternasset name
SMSsms platform namesmsslot patternlink position

Alongside the table, the document needs four lines of governance:

  • Owner: the single named person who approves new values.
  • Last reviewed: a date, refreshed quarterly.
  • Where links are built: the one tool everyone uses.
  • What to do with an unlisted channel: request a value, do not invent one.

How to make the convention stick

A UTM naming convention only works when hand-typing is removed from the process, because typing is where the variants come from. Documentation alone has a poor track record. The document is read once at onboarding and then recalled from memory at 5pm on a Friday.

Three mechanisms, in increasing order of how well they hold:

Shared link builder. Point every team member at one UTM builder for agencies with the approved values already loaded, so the tagged URL is generated rather than composed. This is the highest-return change most agencies can make in an afternoon.

A monthly audit on the source/medium report. Open the traffic acquisition report, sort by sessions, and look for near-duplicates and anything in Unassigned. Five minutes a month catches a drift before it becomes a quarter of bad data. Our walkthrough of the GA4 traffic acquisition report covers what to look for.

A written clause in the client onboarding pack. If the client's in-house team sends email or posts socially, they are tagging links whether you asked them to or not. Give them the table on day one.

Here is the operator view, for what it is worth. We built ReportsMate email-first because after years around agency reporting, the dashboards clients were handed almost never got logged into, and the reports that did get read were the ones sitting in the inbox. That changed how we think about tagging too: a messy utm_medium in a dashboard is a problem someone might eventually notice. A messy utm_medium in a report that lands in the client's inbox every Monday is a problem the client notices first, and asks you about.

What this looks like in a client report

Clean UTMs are the difference between a report that answers "which channel worked" and a report that raises a question you then have to spend an hour explaining. The convention is upstream of everything in the deliverable.

Three practical consequences:

Channel tables add up. When every paid social link carries paid-social and a recognised source, Paid Social is one row with one number. When it does not, the client sees four rows and asks which one is real.

Campaign roll-ups become possible. A consistent utm_campaign across Google Ads, Meta and email is what lets a single initiative appear as a single line, rather than three disconnected platform sections. Attribution modelling sits on top of this; it cannot fix the inputs. Attribution modelling is a layer on top of clean campaign naming, never a substitute for it.

AI-written commentary gets better. Automated insight generation reads the same dimensions you do. If the data says the Email channel had zero sessions, no amount of narrative will say otherwise. Tagging quality sets the ceiling on how useful an automated summary can be.

A note on reporting cadence, since it interacts with tagging more than people expect: the shorter the cadence, the faster a tagging mistake surfaces. On a monthly cycle, a mistagged campaign launched on the 2nd is discovered on the 1st of the following month, after the spend is gone. On a weekly cycle it surfaces in days. That is an argument for frequent, automated delivery that has nothing to do with client-pleasing and everything to do with data quality. See how the scheduling works.

Common UTM mistakes and their fixes

MistakeWhat it doesFix
Mixed case (LinkedIn vs linkedin)Splits one source into several rowsLowercase everything, enforce in the builder
Mixed delimiters (spring-sale, spring_sale)Splits one campaign into severalPick one delimiter in the convention
utm_medium=newsletterNever reaches GA4's Email channelUse email as the medium, put "newsletter" in the campaign name
Abbreviated sources (fb, li, ig)Breaks social channel recognitionSpell out the platform
Manual UTMs on auto-tagged Google Ads linksOverrides richer gclid dataLet auto-tagging handle Google Ads
Campaign name inside utm_sourceNew source every campaignKeep the slots separate
UTMs on internal linksOverwrites the real acquisition source mid-sessionNever tag internal navigation
No utm_medium at allLands in Unassigned or ReferralMake medium mandatory
Tracking parameters in canonical URLsCreates duplicate-content signalsTag the link, not the page's canonical

The internal-links mistake is worth underlining. Putting UTMs on a link from one page of a client's site to another starts a new session attributed to whatever you tagged, which means a navigation click can get credited as a campaign. It is a quiet way to inflate a channel and deflate the one that actually earned the visit.

FAQs

Q: Should UTM parameters be lowercase?

A: Yes, always. UTM values are case-sensitive in Google Analytics 4, so utm_source=Facebook and utm_source=facebook create two separate rows in every source report. Agencies that skip this rule end up with the same platform appearing three or four times in a client's channel table, each with a fraction of the real sessions. Lowercase is also easier to enforce than any other formatting rule, because it needs no judgement: there are no exceptions, no proper nouns, no acronyms. Write it as the first line of your convention, and build it into whatever link builder your team uses so compliance is automatic rather than remembered.

Q: Should I use hyphens or underscores in UTM values?

A: Either works, and consistency matters far more than the choice. Google Analytics treats both as ordinary characters, so spring-sale and spring_sale are equally valid, just not equal to each other. We prefer hyphens because they read more naturally in a URL and match the way most website slugs are already written, which keeps the whole link visually consistent. The important part is that your convention names one delimiter and the whole team including the client's in-house marketers uses it. Mixing the two is one of the most common causes of a single campaign appearing as two separate lines in a monthly report.

Q: Why is my traffic showing as Unassigned in GA4?

A: Unassigned is the value GA4 uses when the session's source and medium match none of its default channel group rules. In practice that usually means a non-standard utm_medium such as newsletter, partner or qr, a missing medium entirely, or a source that GA4 does not recognise as a search or social site. Across 26 cached GA4 report snapshots covering 16 client properties in our own data, 20 contained at least one Unassigned session and 8 had 5% or more of sessions there, so it is common rather than exotic. The fix is to map every channel you run to an approved medium from GA4's rule list, and build a manual channel group for the ones that genuinely have no home. Google Analytics Help lists the full rule set for every default channel.

Q: Do I need UTM parameters on Google Ads if auto-tagging is on?

A: No, and adding them can make your data worse. With auto-tagging enabled, Google Ads appends a gclid that GA4 reads to pull in campaign, ad group, keyword and match-type detail automatically, which is richer than anything manual UTMs can carry. Manual parameters on the same link can override that. The exception is when you need the same campaign name to appear identically across platforms for a cross-channel roll-up, in which case use utm_campaign consistently and let auto-tagging handle the rest. Check Google Ads Help for the current auto-tagging behaviour before changing anything on a live account.

Q: What is the difference between utm_source and utm_medium?

A: utm_source names the specific platform that sent the click, such as facebook, google or mailchimp. utm_medium names the type of marketing it was, such as cpc, email or paid-social. The practical difference is that medium drives GA4's channel grouping and source usually does not, so medium is the parameter that determines whether a session appears under Paid Social, Email or Unassigned. A useful mental test: source answers "where was the link", medium answers "what kind of marketing was it". Keeping those two questions separate is what stops your source list exploding every time a new campaign launches.

Q: How many UTM parameters should an agency require?

A: Three mandatory and two optional is the practical standard. Require utm_source, utm_medium and utm_campaign on every manually tagged link, and encourage utm_content for creative-level comparison and utm_term for manually tagged paid search. Requiring more than three reduces compliance without improving the report, because the fields people do not understand get filled with guesses. If you need campaign-level cost data keyed to an ID, add utm_id for that client specifically rather than making it a global rule. Fewer required fields, strictly enforced, beats a longer list that half the team ignores.

Q: Who should own the UTM naming convention in an agency?

A: One named person, usually whoever owns reporting rather than whoever owns campaigns. The reason is incentive: the person building the report feels the cost of a mistagged link immediately, while the person launching the campaign feels nothing. That owner approves new values, keeps the approved-value table current, and reviews the source and medium report monthly. Anyone can request a new value, nobody adds one unilaterally. Write the owner's name and a last-reviewed date directly into the convention document, because an unowned standard drifts back to free text within about a quarter.

Q: Can UTM parameters hurt SEO?

A: Not if you tag links rather than pages. UTM parameters create distinct URLs, so a page reachable at several tagged URLs can generate duplicate-content signals if those URLs end up indexed. The standard protections are a self-referencing canonical tag pointing at the clean URL, and never putting UTM parameters in internal navigation, sitemaps or canonical tags. Google Search Central documents the canonical approach. Tagged links in emails, ads and partner placements are completely normal and safe; the risk only appears when tagged URLs become the version search engines crawl and index.

Final tips

A UTM naming convention is worth about an hour of setup and saves that hour back every single month. Three things to do this week:

  1. Write the approved value table for utm_source and utm_medium, using GA4's channel rules as the constraint rather than your own preference.
  2. Name an owner and a review date. An unowned convention has a shelf life of roughly one quarter.
  3. Open the source and medium report for your three biggest clients and look for near-duplicates and Unassigned traffic. That list is your backlog.

Then make the tagging automatic, because the convention that survives is the one nobody has to remember. If the reporting side is where the pain actually shows up, compare plans and see what automated delivery looks like against the manual version you are running now.

Stop losing your Sundays to client reports. Start your free 14-day trial - no credit card, no setup, cancel anytime. Your clients get branded, white-labelled reports in their inbox automatically, with the channel data your UTM naming convention worked so hard to keep clean.

Automate Your Marketing Reporting

Join agencies automating client reporting with ReportsMate.

14-day free trial - 2 min setup - no credit card required