SEO/Marketing

UTM Naming Conventions: How to Build a Consistent Tracking System

UTM Naming Conventions: How to Build a Consistent Tracking System

A UTM naming convention is a documented set of rules deciding exactly what values your team writes into utm_source, utm_medium, and utm_campaign so that the same thing is always tagged the same way.

Without one, Google Analytics 4 does what it's designed to do: it records precisely what you sent it. Facebook, facebook, fb, and meta become four separate sources. Your Facebook traffic is now four rows, each showing a quarter of the truth, and no report will ever tell you they belong together.

The convention itself is not complicated. Most of what follows is one rule one value, one meaning, forever plus the decisions you need to make once so nobody has to make them again.

Why UTM Naming Conventions Matter

Here's what fragmentation actually looks like. Four campaigns, all driving traffic from the same platform, tagged by four people over three months:

Session sourceSessionsWhat it really is
facebook1,240Facebook
Facebook890Facebook
fb610Facebook
meta340Facebook

Facebook drove 3,080 sessions. Every report shows a number that isn't that. If you're comparing channels, allocating budget, or reporting to anyone, you're working from four wrong answers instead of one right one.

There is no report that fixes this after the fact. GA4 will not merge those rows, because it has no way to know they're the same thing. The only fix is not creating them.

The part that hides the problem

This is where most teams get caught, and it's rarely explained.

Google states that campaign parameter values are case sensitive  utm_source=google is a different value from utm_source=Google. But Google also states that its channel definitions are not case sensitive.

Those two facts together produce a specific, misleading failure:

  • Your Session source / medium reports fragment into duplicate rows.
  • Your channel report looks completely fine, because Email and email both classify into the Email channel regardless of case.

So the person reviewing the channel report sees healthy, sensible data and concludes tagging is under control. The person trying to analyse a specific source finds four rows for one platform. Both are looking at the same broken data. Only one of them can see it.

If your channel report looks clean, that is not evidence your tagging is clean.

What Google Defines vs What Your Team Decides

Almost every naming guide blends these together, which is how arbitrary preferences end up presented as platform requirements. They are different things and they carry different weight.

Fixed by Google  you cannot change itDecided by your organisation  reasonable teams differ
Parameter values are case sensitive in reportingWhether you use underscores or hyphens
Channel definitions are not case sensitiveYour campaign name structure
Which medium values map to which default channelYour abbreviation rules
Which source values are recognised as social, search, video, shopping sitesHow granular your source values get
That utm_source, utm_medium, utm_campaign should always be setWhether you use utm_content on every campaign
That missing parameters can report as (not set)Who signs off on a new value

Everything in the left column has a consequence you cannot negotiate with. Everything in the right column only matters because you picked one and stuck to it.

Treat the right column as settled once, by one person, and written down. The specific choice matters far less than the fact that a choice exists.

Values That Silently Change Your Channel

This is the failure mode worth understanding before you write your convention, because it produces no error and no obvious symptom.

GA4 assigns each session to a default channel by testing your source and medium  and in some cases your campaign name  against published conditions. Some perfectly sensible-looking values fail those tests and land your traffic somewhere you didn't intend.

What you tagWhat you meantWhat GA4 recordsWhy
utm_medium=social_paid from a social sourcePaid SocialOrganic SocialGoogle's paid-medium condition matches values containing cp, or ppc, or retargeting, or values beginning with paid. social_paid matches none — so the paid test fails and the organic-social test catches it instead.
utm_medium=fb_ads from a social sourcePaid SocialOrganic SocialSame reason. fb_ads matches no paid condition.
utm_medium=video_adPaid video placementOrganic VideoThe organic-video condition matches any medium containing video.
utm_campaign=summer_shop_sale with a paid mediumPaid Social or Paid SearchPaid ShoppingGoogle's Paid Shopping condition tests the campaign name for "shop" or "shopping" alongside a paid medium.
utm_campaign=cross-network_q3Your multi-channel campaignCross-networkThe Cross-network condition matches campaign names containing "cross-network".

The first two are the expensive ones. Paid spend reported as organic social makes your paid programme look like it's underperforming and your organic social look like it's overperforming, simultaneously, forever.

The rule this produces: your medium value must actively pass GA4's test, not merely look descriptive to a human. And your campaign names must avoid the small set of words Google reads as channel signals  shop, shopping, cross-network, and video are the ones to watch.

Safe paid mediums: cpc, paid_social, paid_search, ppc, retargeting, or anything beginning with paid. Safe organic social mediums: social, social-network, social-media, sm, or any recognised social source paired with a non-paid medium.

Which value belongs in medium versus source is a separate question, and a common one  our source vs medium vs campaign breakdown resolves it directly.

Principles of a Naming System That Survives Contact With a Team

Six rules. If your convention is longer than this, people will stop following it.

1. Lowercase everything, without exception. This is the only rule with a Google-defined consequence attached. Capitals fragment your reports while hiding inside a clean-looking channel report.

2. One separator, chosen once. Never mix. paid_social and paid-social are two mediums.

3. One value, one meaning, permanently. If newsletter means your weekly email, it means that in three years. Retiring or repurposing a value splits its history.

4. Names that survive six months. q3_pricing_launch is legible later. test2 is not. You are writing for the version of your team that has forgotten this campaign entirely.

5. Never any personal or sensitive data. No names, email addresses, customer IDs, order numbers, or internal identifiers. URLs get logged by systems you don't control, shared in Slack, screenshotted, and cached. This isn't a style rule.

6. Only as complex as your team can sustain. A five-attribute taxonomy that nobody follows produces worse data than three fields everyone gets right.

Choosing Your Separator

Settle this in one meeting and never discuss it again.

Neither hyphens nor underscores are a Google requirement. Both are accepted, both are safe in URLs, and Google's own documentation example uses an underscore (spring_sale). Any guide telling you one of them is wrong is presenting a preference as a rule.

One clarification worth making, because it causes real confusion: the well-known SEO advice to prefer hyphens over underscores applies to URL paths  the words in /blog/utm-naming-conventions  where search engines parse the slug for words. UTM values live in the query string and are not parsed that way. There is no SEO consequence to either choice.

Our recommendation: underscores, used consistently  paid_social, summer_webinar_2026, hero_cta.

The reasoning is unglamorous: underscores read cleanly when a value already contains a hyphenated word, and they visually separate UTM values from URL slugs at a glance. But if your organisation already uses hyphens everywhere, keep hyphens. Switching an established convention costs more than it gains, because you fragment every historical value at the moment you change.

The only genuine mistake is using both.

Source Naming Convention

utm_source names the specific platform, publication, or property the visit came from.

Pattern: the platform's own name, lowercase, no spaces, no company suffixes.

UseNot
linkedinLinkedIn, linked_in, li
facebookFacebook, fb, meta, facebook_com
googleGoogle, google_ads, adwords
newsletterNewsletter, weekly_email, email
partner_acmeacme, Acme Corp, partner1

Two decisions your organisation needs to make explicitly:

How granular are partner and publisher sources? partner_acme scales well when you have many partners and want each measurable. A single partner value is simpler but loses the ability to compare them. Pick based on whether anyone will ever ask "how did Acme perform?"

Do you distinguish sub-properties? newsletter versus newsletter_weekly and newsletter_product. Only split if the split answers a question you actually ask. Every extra value is a value someone can get wrong.

Whatever you decide, the output is an approved source list  a finite, written set of values. New sources get added deliberately, not invented at tagging time. That list is the single highest-value artefact of this entire exercise.

Medium Naming Convention

utm_medium names the type of traffic. It has the strictest constraints of any field, because GA4 reads it to assign channels.

Start from what GA4 recognises, then standardise within it. This is the opposite of how most teams approach it, and it's why most teams get it wrong.

Recommended medium list:

MediumUse forGA4 channel it supports
emailAll email sendsEmail
cpcPaid searchPaid Search
paid_socialPaid placements on social platformsPaid Social
organic_socialUnpaid posts and profile linksOrganic Social
referralPartner and non-paid third-party placementsReferral
affiliateAffiliate programme trafficAffiliates
displayDisplay and banner buysDisplay
smsText message campaignsSMS
qrPrinted and offline QR codesReferral or Unassigned — verify before relying on it

Two of these need a note. organic_social doesn't itself appear in Google's organic-social medium list, but traffic from a recognised social source classifies as Organic Social regardless of medium, so it works  and it's clearer to a human reading the report than the bare value social. And qr has no defined channel; if offline attribution matters to you, verify where it lands in your own property before standardising on it.

Keep this list short. The medium field has perhaps ten legitimate values for most businesses. If yours has thirty, they're mostly sources or campaign names in the wrong field.

Campaign Naming Convention

This is where teams over-engineer, so pick the tier that matches your size rather than the most impressive-looking option.

Tier 1  Descriptive (most businesses)

A readable name describing the initiative, lowercase, separated consistently.

utm_campaign=summer_webinar_2026

utm_campaign=q3_pricing_launch

utm_campaign=blackfriday_2026

Use when: you run fewer than roughly 20 campaigns a year, one or two people do the tagging, and you analyse campaigns individually rather than slicing across them.

Tradeoff: you can't filter or group programmatically  you can't ask "show me all APAC campaigns" unless someone happened to write apac in every relevant name.

Tier 2  Positional (scaling teams)

A fixed sequence of attributes in a defined order, as your brief proposes:

product_objective_market_period

 utm_campaign=analytics_demo_uk_2026q3

utm_campaign=builder_signup_us_2026q3

Use when: multiple people tag, and you need to group campaigns by attributes  market, quarter, objective  in reporting.

The tradeoff is real and worth stating plainly. Positional naming is fragile. Its entire meaning depends on order, so if someone omits one attribute, every value after it shifts position and is read as the wrong thing. Adding a seventh attribute later means either lengthening every name or maintaining two incompatible schemes. Practitioners who work with this at scale  Lukas Oldenburg's analysis of naming notations is the clearest published treatment  consistently identify order-dependence as its main weakness.

If you use positional naming, three rules make it survivable:

  • Cap it at four attributes. Beyond that, error rates climb faster than the value.
  • Require a placeholder (na) rather than allowing an omission, so positions never shift.
  • Never reorder the scheme. Adding a position at the end is survivable; inserting one in the middle invalidates your entire history.

Tier 3  Stable ID plus readable name (the approach we'd actually recommend at scale)

Stop trying to encode everything into the campaign name. Use a readable name for humans, and carry a stable identifier alongside it.

?utm_campaign=summer_webinar_2026&utm_id=sw2026_q3

utm_id is a key that doesn't change when the campaign name does, and it's the field GA4 uses for campaign data import  so your market, objective, budget, and any other attribute can live in your own system and be joined to the session data, instead of being crammed into a string that a marketer has to retype correctly every time.

This resolves the positional-naming tension entirely: the name stays human, the structure stays queryable, and neither has to compromise for the other. Article 1 covers what utm_id does and how it behaves in GA4.

Use when: you import campaign cost data, run enough campaigns that renaming happens, or have more attributes than a name can carry.

Whichever tier you choose

Decide the campaign value once, before launch, and use the identical value on every link across every channel promoting that initiative. That's what makes the campaign comparable across channels  and it's the single most common thing teams get wrong, because the email is built by one person and the ads by another.

Content and Term Naming

Both are optional fields. Name them only when you'll analyse them.

utm_content describes the specific link or creative, never the campaign. Pattern: placement or variant.

hero_cta · inline_text · footer_cta · video_ad_a · image_ad_b

Keep the vocabulary small and reusable. hero_cta should mean the same placement in every email you send, or the field's cross-campaign value disappears.

utm_term carries a paid keyword or audience term. Pattern: the keyword itself, lowercase, underscores for spaces  project_management_software.

If you're running Google Ads with auto-tagging, keyword data is captured natively and utm_term is usually redundant. And to restate rule 5 because this is the field where it gets broken: never put personal data here.

Naming Conventions by Channel

Short pointers. Each channel has implementation detail that belongs to its own guide.

ChannelSourceMediumNotes
Paid searchgoogle, bingcpcAuto-tagging usually makes manual tagging unnecessary on Google Ads
Paid sociallinkedin, facebook, instagram, tiktokpaid_socialMust pass GA4's paid-medium test — see the warning above
Organic socialSame source valuesorganic_socialConsistency with the paid source names is what makes comparison possible
Emailnewsletter, or your sending propertyemailDetail in the email UTM tracking guide
Partnerspartner_acmereferralDecide granularity before your first partner campaign
AffiliatesThe affiliate's identifieraffiliateMatches Google's Affiliates channel condition
Influencerscreator_janedoepaid_social or referralDepends whether the placement is paid

Full worked examples for social and email live in the social media UTM guide and the email UTM guide.

Team Governance

A naming convention is not a document. It's a set of decisions about who is allowed to create a value, and what happens when someone needs a new one. This is the part that determines whether your standard survives its first quarter.

Assign an owner

One named person owns the taxonomy. Not a team, not a committee  one person who approves new values and is accountable for the approved lists staying current. Without this, the convention degrades the first time someone launches a campaign on a Friday afternoon and needs a source that isn't on the list.

In a small business this is whoever runs marketing. In a larger one it's usually analytics or marketing ops. The seniority matters far less than the singularity.

Maintain approved lists, not guidelines

Guidelines get interpreted. Lists get used.

Publish an explicit, finite list of approved utm_source values and approved utm_medium values. Anyone tagging a link picks from the list. If the value they need isn't there, they request it  they don't invent it.

This one change eliminates most fragmentation, because most fragmentation isn't people ignoring rules. It's people improvising in the absence of an answer.

Define how a value gets added

A lightweight process, written down:

  1. Requester proposes the new value and what it's for.
  2. Owner checks it isn't a duplicate of an existing value under a different name this is the check that matters most.
  3. Owner checks it passes GA4's channel conditions if it's a medium.
  4. Value is added to the list with the date and a one-line definition.
  5. The team is notified.

Five minutes. The alternative is discovering six months later that partner_acme,

acme, and acme_partner all exist.

Never repurpose or delete a value

If a value is retired, mark it retired on the list and stop using it. Do not reassign it to a new meaning  every historical report that touches it silently becomes wrong.

QA before launch, not after

Add two checks to whatever pre-launch process you already have:

  • Every UTM value on this link appears on the approved list.
  • The campaign value is identical to the one used on every other channel for this initiative.

Both take seconds and catch the errors that are expensive to find later.

Handling the mess you already have

Most teams adopting a convention have years of inconsistent data behind them. You cannot retroactively fix it, and you should not try.

Do this instead: pick a start date, apply the convention from that date forward, and document what changed so anyone comparing across the boundary knows why the numbers shift. Trying to clean historical data through report filters produces a maintenance burden that outlives the person who built it.

The UTM Naming Template

Copy this into a shared document. It is deliberately short enough that people will actually read it.

[COMPANY] UTM NAMING STANDARD

Owner: [NAME]          Last updated: [DATE]

 UNIVERSAL RULES

- Lowercase only

- Separator: underscore ( _ )

- One value, one meaning never repurpose

- No personal or sensitive data, ever

- Campaign value is identical across all channels for one initiative

 APPROVED SOURCES (add only via the owner)

linkedin · facebook · instagram · tiktok · youtube

google · bing

newsletter

partner_[name] · creator_[name]

 APPROVED MEDIUMS (fixed list do not extend without checking GA4 channel rules)

email

cpc

paid_social

organic_social

referral

affiliate

display

sms

 CAMPAIGN NAME FORMAT

Tier chosen: [ descriptive / positional / id_plus_name ]

Pattern:     [e.g. product_objective_market_period]

Example:     analytics_demo_uk_2026q3

 

CONTENT VALUES (placement or variant)

hero_cta · inline_text · footer_cta · [creative]_[variant]

 DO NOT USE

- Capital letters

- Spaces

- Hyphens (we use underscores)

- "shop", "shopping", "cross-network" or "video" in campaign names

- Any value not on the approved lists

- Any personal data

Naming Convention Checklist

Before any campaign link goes out:

  • ☐ All values lowercase
  • ☐ Separator consistent with the standard
  • ☐ Source is on the approved list
  • ☐ Medium is on the approved list and passes GA4's channel test
  • ☐ Campaign value identical across every channel for this initiative
  • ☐ Campaign name avoids shop, shopping, cross-network, video
  • ☐ utm_content used only if you'll analyse it
  • ☐ No personal or sensitive data anywhere in the URL
  • ☐ Link tested it opens the right page with parameters intact

Apply Your Convention

A convention only exists if it reaches the URLs. The fastest way to apply it consistently is to build every campaign link in one place, from your approved values.

Build your campaign URL →  enter your approved source, medium, and campaign values and get a correctly encoded tracking link.

Where to go next:

  • Need the definition of each field first? UTM parameters reference
  • Still unsure what belongs in source versus medium? → Source vs medium vs campaign
  • Want to see conventions applied to real campaigns? → UTM examples library
  • Ready to check the data is landing correctly? → How to track UTM campaigns in GA4
  • New to campaign tracking entirely? Complete campaign URL guide
Tags:
#SEO#Marketing
Amna
About the author:

Amna

Editor

Related Articles

UTM Parameters: Complete Reference Guide

UTM Parameters: Complete Reference Guide

<p>UTM parameters are tags you add to the end of a URL to tell your analytics platform where a visitor came from. Add ?u...
Aug 24, 2026
The Complete Guide to Campaign URL Builders: Master UTM Tracking

The Complete Guide to Campaign URL Builders: Master UTM Tracking

<h2>Key Takeaways</h2><ul><li>A Campaign URL is a normal link with UTM parameters attached, so Google Analytics 4 can te...
Jul 27, 2026