Naming campaign links so later reports still make sense

The problem shows up months later, not today

I didn’t understand why UTM naming mattered until I tried to pull a quarterly report and found four different spellings of “newsletter” in my source column: newsletter, Newsletter, news-letter, and NL. Every one of those was a different row in my analytics tool. My actual newsletter traffic wasn’t wrong, it was just split into four fake channels, and I had to manually stitch it back together before I could tell whether that channel was worth the time I spent writing it.

That’s the whole case for a UTM naming convention. It costs you nothing today. It costs you real time later, at the exact moment you’re trying to decide whether to keep doing something.

What a UTM parameter actually is

UTM stands for Urchin Tracking Module, a leftover name from the analytics tool Google acquired back in 2005. Practically, it’s just a handful of extra text fields you tack onto a link as a query string, and your analytics tool reads them back out when someone clicks through.

There are five of them:

  • utm_source – where the click came from. facebook, newsletter, google.
  • utm_medium – what kind of channel it was. social, email, cpc, affiliate.
  • utm_campaign – which specific push this link belongs to. spring-launch, q3-webinar.
  • utm_content – which version of the link, if you’re running more than one. header-button, footer-link.
  • utm_term – mostly used for paid search keywords, less common outside that context.

A finished link looks like this: yoursite.com/product?utm_source=newsletter&utm_medium=email&utm_campaign=spring-launch

Every field is free text. Your analytics tool doesn’t validate spelling, doesn’t enforce lowercase, doesn’t stop you from calling the same channel three different names across three different links. That freedom is exactly why this needs a convention. Nothing forces consistency except you deciding on one and sticking to it.

Why the report breaks without one

Most analytics tools treat each unique combination of source, medium, and campaign as its own row. Change the capitalization, and it’s a new row. Add a trailing space when you paste the link into a scheduling tool, and it’s a new row. Swap email for Email on one send, and now your email channel is split across two lines in every report you run afterward.

None of this shows up as an error. Nothing breaks, no link fails, no click goes untracked. The traffic all still lands, just scattered under slightly different labels. You only notice when you go looking for a clean answer to a question like “did the newsletter or the Instagram post drive more signups this quarter” and the numbers refuse to add up cleanly because they were never one number to begin with.

Building the convention before you build more links

The fix is a short rulebook you write once and actually follow. It doesn’t need to be clever. It needs to be boring and consistent.

Pick your case and stick to it. Lowercase, always. utm_source=newsletter, never Newsletter. Analytics tools generally treat parameters as case-sensitive, so this one habit alone prevents most of the duplicate-row problem.

Use dashes, not spaces, for multi-word values. Spaces get URL-encoded into %20, which is ugly and easy to mistype by hand. spring-launch, not spring launch.

Keep a fixed list of source and medium values. This is the part people skip. Before you build your hundredth link, write down every source you actually use (newsletter, twitter, facebook, youtube-description) and every medium you actually use (email, social, organic-social, paid-social, referral). When you build a new link, you pick from that list. You don’t invent a new spelling in the moment because you’re in a hurry.

Name campaigns by what they are, not by when you happened to build the link. q3-webinar tells you something six months from now. campaign-1 does not. I’ve gone back through my own links and found ones named things like test2 that I genuinely could not identify later, and there was no way to recover what they meant short of guessing from the destination URL.

Write it down somewhere outside your head. A shared spreadsheet with two tabs, one for approved sources and one for approved mediums, is enough. If you’re a one-person operation, this still matters, maybe more, because you’re the only backstop against inconsistency and you will not remember your own naming choices from four months ago with any reliability.

A concrete before-and-after

Say you run a small subscription box business and you’re promoting the same autumn bundle across an email newsletter, an Instagram story, and a partner’s blog post. Without a convention, you might end up building these three links on three different days:

?utm_source=Newsletter&utm_medium=Email&utm_campaign=Autumn
?utm_source=insta&utm_medium=social&utm_campaign=autumn-bundle
?utm_source=partner-blog&utm_medium=referral&utm_campaign=Autumn2026

Each one is internally reasonable. Together, they’re unreportable as a single campaign, because the campaign name doesn’t match across any of them. With a convention in place, the same three links would look like:

?utm_source=newsletter&utm_medium=email&utm_campaign=autumn-bundle
?utm_source=instagram&utm_medium=social&utm_campaign=autumn-bundle
?utm_source=partner-blog&utm_medium=referral&utm_campaign=autumn-bundle

Same information, same destinations, but now you can filter your analytics tool by campaign=autumn-bundle and get every channel’s contribution in one view, split cleanly by source and medium underneath it.

What UTM naming can’t fix

A tidy naming convention makes your existing tracking readable. It doesn’t create tracking that wasn’t there, and it doesn’t solve attribution on its own. If someone clicks your newsletter link, doesn’t buy, then comes back two weeks later by typing your URL directly, that second visit shows up as direct traffic with no UTM at all, and no amount of careful naming recovers that connection. Cross-device behavior has the same blind spot: someone taps your Instagram link on their phone, then buys later from a laptop, and your analytics tool has no built-in way to know those were the same person unless you’re logged into something that bridges the two.

UTM parameters also do nothing about ad blockers or privacy settings that strip query strings or block analytics scripts outright. And they say nothing about intent. A high click count on a link tells you people clicked it. It doesn’t tell you why, or whether the people clicking were the right people for what you’re selling. Treat the naming convention as what it is: a way to make the data you do collect trustworthy enough to read, not a replacement for actually looking at what happened and using your own judgment about what it means.

Keeping it consistent going forward

The convention only holds if building a link the right way is easier than building it wrong. A shared spreadsheet works. A simple link-builder tool, even a basic one built with dropdowns pulling from your approved source and medium lists, removes the temptation to freehand a new spelling under deadline pressure. If you’re using scheduling or automation tools to post across channels, check whether they auto-append UTM parameters, because some do it with their own naming logic, and you’ll want to override that with your own convention before it starts polluting the same reports you were trying to protect.

Six months from now, when you’re trying to figure out which channel is actually worth your limited time, the difference between a clean report and a scattered one usually traces back to five minutes of naming discipline, done consistently, back when you built the first link.

If you want more of this kind of practical, no-hype breakdown of the metrics and tools that actually run a small business, you can find the rest of what we cover at Data Research Analysis Collection.

Get new guides and videos first — join the Telegram channel.