Learn · Campaign data · Updated 2026-08-14

UTM naming conventions that hold up after six months

A UTM naming convention is a written, closed list of allowed values for utm_source and utm_medium, one casing rule (lowercase, hyphens), and a fixed pattern for utm_campaign, kept in a shared spreadsheet everyone tags from.

  1. Lock a controlled vocabulary for source and medium
    Write down every value your team is allowed to use for utm_source and utm_medium before anyone tags another link, and treat the list as closed unless someone actively updates it.
  2. Pick one casing and separator rule
    Lowercase everything and use hyphens between words, never spaces or underscores, and apply the rule to every value without exceptions for special campaigns.
  3. Build a fixed pattern for utm_campaign
    Settle on an order like theme-date-detail (for example spring-sale-0301) so a campaign name is decodable months later without asking whoever wrote it.
  4. Put the convention in a shared, living document
    A spreadsheet everyone can see beats a rule remembered in one person's head, and it becomes the place new team members check before tagging their first link.
  5. Generate links from the convention instead of typing them
    Use a builder that pulls from your approved value lists so a link is correct by construction, rather than proofread after the fact.
  6. Audit live links on a schedule
    Pull a sample of recently published links every month or quarter and check them against the convention, since drift happens gradually and is easiest to catch early.

Why a written convention matters more than the individual rules

Any naming convention beats no naming convention, almost regardless of which rules it contains. Whether you land on lowercase over uppercase barely matters on its own. What matters is that everyone tagging a link makes the same choice every time, without having to decide fresh each time they paste a URL into a caption or an ad platform. A convention that exists only as a habit in one person's head stops working the day that person is on leave, hands the task to someone else, or simply forgets what they did three campaigns ago. Write it down, and the convention survives turnover. Don't, and it doesn't.

The other reason this matters more than it looks like it should: most UTM fields, in most analytics platforms, are treated as exact strings, not fuzzy matches. "Instagram," "instagram," and "IG" are three different values to a tool doing simple grouping, even though a human reading the report understands they mean the same thing. A campaign that gets tagged inconsistently across a few dozen links doesn't look broken in any individual report. It just quietly fragments into ten rows where there should be three, and nobody notices until someone tries to add the numbers up and the totals look wrong.

Step 1: lock a controlled vocabulary for source and medium

Before anyone tags another link, write down the full list of allowed values for utm_source and utm_medium. Source can be a longer, growing list, since a new source gets added whenever you start posting somewhere new. Medium should stay short and closed, ideally under fifteen values, because medium's job is to let you roll up traffic into a handful of meaningful categories, and a list that grows unchecked can't do that job anymore. See utm_source vs utm_medium for the reasoning behind why these two lists behave so differently.

Step 2: pick one casing and separator rule, and apply it everywhere

Lowercase, hyphen-separated is the convention worth defaulting to, mainly because it removes ambiguity: there's no decision to make about whether "Spring Sale" becomes "spring_sale," "Spring-Sale," or "springsale." It's always spring-sale. Spaces are a particular hazard, since an untagged space in a value can get URL-encoded as %20 in one tool and + in another, which then shows up as two different values in reporting even though a person typed the same thing both times.

Step 3: build a fixed pattern for utm_campaign

utm_campaign is the one field genuinely meant to change every time, so it needs a pattern rather than a fixed list. A pattern like theme-date-detail keeps campaign names decodable without anyone having to remember what they meant six months later. Compare the two approaches below on the same campaign.

Without a patternWith theme-date-detail
spring2026spring-sale-0301
SPRING_SALE_FINALspring-sale-0308-lastcall
promospring-sale-0301-carousel

The left column is what happens when everyone tags campaigns in the moment, with whatever name feels obvious that day. The right column is decodable on sight, a year later, by someone who wasn't in the room when the campaign launched.

Step 4: put the convention in a shared spreadsheet

A UTM spreadsheet does two jobs at once: it's the approved value list, and it's a log of every link that's gone out, so the same campaign never gets tagged two different ways by two different people. At minimum, track the destination URL, source, medium, campaign, the full tagged link, who created it, and the date. A basic layout looks like this.

DateDestination URLutm_sourceutm_mediumutm_campaignFull linkCreated by
2026-03-01example.com/saleinstagrambiospring-sale-0301example.com/sale?utm_source=instagram&utm_medium=bio&utm_campaign=spring-sale-0301k.chen
2026-03-01example.com/saleweekly-newsletteremailspring-sale-0301example.com/sale?utm_source=weekly-newsletter&utm_medium=email&utm_campaign=spring-sale-0301k.chen

Notice both rows share the same utm_campaign value, since it's the same push across two channels, while source and medium differ correctly per placement. That's the pattern a spreadsheet is meant to enforce: one campaign, consistently tagged, across however many links it takes to run it.

Step 5: generate links from the convention, don't retype it

A spreadsheet enforces the convention on paper, but someone still has to build each link by hand unless a tool does it for them, and hand-typing is where casing drifts and values get misspelled. A UTM builder that pulls from a fixed dropdown for source and medium, rather than a free-text field, makes the wrong value harder to enter than the right one. That's a stronger guarantee than a written rule anyone can forget under deadline pressure.

Step 6: audit live links on a schedule

Conventions drift even with a spreadsheet and a builder in place, usually because someone new joins the team, or an old habit reasserts itself under time pressure. Pull a handful of links published in the last month and check them against your value list. Catching a bad medium value the week it happened is a five-minute fix. Catching it eight months later means a quarter of reporting is quietly wrong and nobody can say exactly which part.

What about utm_term and utm_content

Most teams can run a naming convention on source, medium, and campaign alone and never touch the other two fields. But if you're running paid search, utm_term deserves the same fixed pattern as everything else: the actual keyword, lowercase, hyphenated, exactly as it appears in the ad group, so it lines up with the platform's own reporting instead of a paraphrased version of it. utm_content is worth adding whenever two links are otherwise identical and only the placement differs, a story versus a grid post, a header button versus a footer link. The pattern here can be as simple as a short, consistent label per placement type: story, grid, header-cta, footer-cta. Skip it and those placements collapse into one number in every report, which hides exactly the comparison you'd want to make.

Mistakes that show up even with a convention in place

  • Treating the campaign field as a dumping ground. Cramming source, medium, and date all into utm_campaign because it's easier than filling in the other fields defeats the entire point of having five separate parameters.
  • Letting the medium list grow without a decision. Every "just this once" addition makes the roll-up question harder to answer, which is the whole reason a closed medium list exists in the first place.
  • No owner for the spreadsheet. A shared document nobody is responsible for tends to fall a few campaigns behind reality within a quarter, and usually nobody notices until someone goes looking for a link that was never logged.
  • A convention that exists on paper but isn't enforced at link-creation time. A rule only checked after the fact, in an audit, catches problems weeks after they've already muddied a report.

Rolling a convention out to a team that's already tagging links their own way

Retiring an existing mess is harder than starting one from scratch, mostly because old links are already live in captions, ads, and printed materials that can't be edited after the fact. Don't try to retag everything that's already out there. Fix the convention going forward, backfill the spreadsheet with what you can identify from existing reports, and accept that a few months of historical data will stay imperfectly tagged. Trying to retroactively clean every past link usually eats more time than the cleanup is worth, and it's not where the convention pays off anyway. The payoff is in every link tagged from this point on.

Where a naming convention alone isn't enough

A convention fixes how links get tagged. It doesn't fix what happens after someone clicks one, and that's a separate system entirely. Once the link is tagged consistently, you still need something logging the click itself, capturing the parameters, the referrer, and whether it's a first visit or a returning one. Raydar's link analytics do that logging automatically on every click through a bio link or short link, which means the value of a good naming convention compounds: consistent tags plus consistent capture is what makes a monthly report trustworthy instead of a rough guess. If the underlying parameters themselves are still unfamiliar, start with what are UTM parameters. And once the convention is in place, the actual mechanics of attaching UTM parameters to a specific link are covered in how to add UTM parameters to a link.

Common questions

Should UTM values be lowercase?
Yes. Most analytics platforms treat UTM parameters as case-sensitive exact strings, so instagram and Instagram log as two different values even though they mean the same thing. Lowercase everything to avoid that split.

What's a good UTM spreadsheet template?
At minimum, columns for date, destination URL, utm_source, utm_medium, utm_campaign, the full tagged link, and who created it. That's enough to both enforce the convention and serve as a log of every link sent.

How many utm_medium values should we allow?
Keep it short, ideally under fifteen, covering things like social, paid-social, email, cpc, referral, affiliate, qr, and sms. A longer list defeats the point of medium, which is to let you roll traffic up into a small number of meaningful categories.

Do hyphens or underscores matter in UTM values?
Pick one and use it everywhere; the specific choice matters less than the consistency. Hyphens are the more common default and avoid the encoding issues that can come from underscores or spaces in some platforms.

Related: utm_source vs utm_medium: what goes where · How to add UTM parameters to a link · How to see where your website traffic is actually coming from