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 pattern | With theme-date-detail |
|---|---|
| spring2026 | spring-sale-0301 |
| SPRING_SALE_FINAL | spring-sale-0308-lastcall |
| promo | spring-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.
| Date | Destination URL | utm_source | utm_medium | utm_campaign | Full link | Created by |
|---|---|---|---|---|---|---|
| 2026-03-01 | example.com/sale | bio | spring-sale-0301 | example.com/sale?utm_source=instagram&utm_medium=bio&utm_campaign=spring-sale-0301 | k.chen | |
| 2026-03-01 | example.com/sale | weekly-newsletter | spring-sale-0301 | example.com/sale?utm_source=weekly-newsletter&utm_medium=email&utm_campaign=spring-sale-0301 | k.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.