Free 15-minute audit: we look at your ads, your tracking and your funnel and tell you what to fix first.

Book a call

UTM discipline: the naming convention that stops your attribution from leaking

· Brian Jones

Rows of labelled wooden drawers in a library card catalogue

Before anyone argues about which attributionAttribution The rules for deciding which ad, click or channel gets credit for a sale or lead. Every tool uses different rules, so the same sale can be credited to Google in one report and Meta in another. model is right, look at the raw campaign data. On most accounts I open, the first report I pull shows Facebook, facebook, fb, FB_ads and meta as five separate sources for the same channel. That’s not an attribution problem. That’s a spelling problem, and it’s cheaper to fix than anything else on the list.

Why the small stuff breaks the big reports

GA4GA4 Google Analytics 4, the current version of Google's free web analytics. Reports visits, traffic sources and conversions using its own attribution rules. is literal. Its own UTM documentation says it plainly: “Parameter values are case sensitive, e.g. utm_source=google is different from utm_source=Google.” Every variation becomes its own row. Every row splits the conversionsConversion The action you want someone to take after seeing an ad: a purchase, a form fill, a booked call. Each platform counts conversions by its own rules, which is why two dashboards rarely agree.. By the time the data reaches a dashboard, the biggest channel looks like six small ones and the decision gets made on the wrong picture.

HubSpot has the same issue in a different costume. Its traffic source rules classify a visit as paid social only when utm_medium contains paid, ppc or cpc and utm_source is exactly the name of a recognized network.

Write utm_medium=social on a paid campaign and every one of those leads lands in Organic Social. Nobody notices until someone asks why paid social shows zero pipeline.

The convention

Here’s the one I use. It’s boring on purpose.

utm_source is the platform, lowercase, one spelling forever: google, meta, tiktok, linkedin, bing, newsletter. Not facebook on Monday and fb on Friday.

utm_medium is the mechanism, from a fixed list: cpc for paid search, paid_social for paid social, email, organic_social, referral, partner. Keep it under ten values and never add one without writing it down.

utm_campaign matches the campaign name inside the ad platform. If the campaign in Meta is 2025-q1_leadgen_cold_video, the UTMUTM parameters Tags added to the end of a link (utm_source, utm_medium, utm_campaign, utm_content, utm_term) that tell analytics tools where a visit came from. They only work if everyone spells them the same way. says the same thing. When a reconciliationReconciliation Comparing what the ad platforms say they delivered against what actually happened in your CRM or payment system, and working out where the difference comes from. comes up later, you want to match on a string, not on someone’s memory.

utm_content carries the ad or creativeCreative The ad itself: the image or video, the words on it, and the copy underneath. "Testing creative" means trying different versions of the ad to see which one people respond to. identifier. utm_term carries the keyword on search and the audience name on social. Both optional, both lowercase, both without spaces.

Underscores inside values, hyphens between date parts. No capitals anywhere. No spaces ever. That’s the whole thing.

Let the platforms do the work

You should not be typing these by hand.

On Google Ads, turn on auto-tagging and leave it on. It appends the gclid, which is what makes offline conversion importOffline conversion import Uploading conversions that happened outside the website, such as a lead becoming qualified or a deal closing in the CRM, back to Google Ads or Meta, matched to the original click so the platform learns from real outcomes. and the GA4 link work at all. Then put your UTMs in an account-level tracking template using ValueTrackValueTrack Google Ads placeholders such as {campaignid}, {keyword} and {device} that are swapped for the real values when an ad is clicked. parameters, so every campaign inherits them:

{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_content={creative}&utm_term={keyword}

Set it once at the account level and stop thinking about it.

On Meta, the URL parameters field at the ad level accepts dynamic values the same way: utm_source=meta&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}. Every new ad gets tagged correctly without anyone remembering to do it.

Email, partners and anything manual go through a shared URL builder with the allowed values locked in a dropdown. A Google Sheet with data validation does the job. The point is that nobody types utm_medium free-hand.

Three rules that keep it clean

One document, one owner. The convention lives in a doc that a single person maintains. Adding a new medium means editing the doc first. If it isn’t in the doc, it isn’t a valid value.

Audit monthly, not annually. Pull the source/medium report for the last 30 days, sort by sessionsSession One visit to a website, from arrival to leaving or going idle. Analytics tools count sessions and assign each one a source., and look for anything that isn’t on the list. A single rogue Facebook caught in month one is a ten-minute fix. Caught in month twelve, it’s a year of reports you can’t trust.

Never tag internal links. A UTM on a link from your own homepage to your own pricing page resets the session’s source. The paid click that brought the visitor in gets overwritten by utm_source=homepage, and the campaign loses the credit it earned.

What this buys you

Clean UTMs don’t make attribution correct. Platform-reported numbers still need reconciling against the CRMCRM Customer relationship management software, such as HubSpot or Salesforce, where leads, contacts and deals are recorded. Usually the only system that knows whether a lead was real., and that’s a separate job. What clean UTMs do is make every downstream conversation possible. You can’t compare HyrosHyros A third-party ad-tracking tool that follows a customer across clicks, opt-ins and purchases with its own tracking script, so you get one attribution view that isn't run by an ad platform. to GA4 to Ads ManagerAds Manager Meta's interface for building campaigns and reading their results. Its numbers reflect Meta's attribution rules, not your bank account. if all three are reading a different spelling of the same campaign.

It takes an afternoon to set up and about twenty minutes a month to maintain. If you’d rather have it done for you as part of a broader tracking review, that’s covered under tracking and attribution.

Want this checked on your account?

Book a 15-minute call. Bring the ad account and the sales sheet, and we'll see whether they agree.