attribution

UTM parameters that do not lie to you

Most UTM problems are not tagging mistakes, they are the absence of a convention. Four rules and a naming scheme fix nearly all of it.

UTM parameters are five query-string fields that tell your analytics where a link was placed. They are simple, universally supported, and almost always a mess within a year.

The mess is rarely caused by not knowing the syntax. It is caused by three people tagging links slightly differently for eighteen months.

The five fields, and what each is for

  • utm_sourcewho sent the traffic. newsletter, linkedin, partner-acme
  • utm_mediumwhat kind of channel. email, social, cpc, referral
  • utm_campaignwhich initiative. spring-launch, q3-webinar
  • utm_contentwhich variant, for A/B testing. hero-button, footer-link
  • utm_term — paid search keyword. Rarely used now.

Source and medium do the work. Campaign is for grouping. The other two are optional and most people should ignore them until they have a specific question.

The four rules

Everything lowercase, always

Newsletter, newsletter and NEWSLETTER are three different sources in every analytics tool. This one mistake accounts for more fragmented reports than every other cause combined.

Pick lowercase, apply it without exception, and if your tool can normalise case on ingest, turn that on.

Hyphens, never spaces or underscores

A space becomes %20 and looks broken in reports. Underscores are fine technically but pick one and never mix. Hyphens are the convention.

The most damaging mistake, and it looks helpful.

Tagging a link from one page of your site to another starts a new session in most tools and overwrites the original acquisition source. A visitor who arrived from Google and clicked a tagged internal banner is now recorded as having come from that banner. You have destroyed the acquisition data for your most engaged visitors — the ones who clicked something.

Internal links get no UTMs, ever. If you want to measure internal clicks, use an event.

Medium comes from a fixed list

Source can be anything; medium must not. Fix a list and never add to it casually:

email, social, cpc, display, affiliate, referral, qr, push

The moment somebody uses e-mail, Email and newsletter as mediums, your channel grouping is fiction.

A convention that survives

Write this down somewhere shared, because the failure mode is drift, not ignorance.

source:   the specific place  (linkedin, newsletter, partner-acme)
medium:   from the fixed list (email, social, cpc, display, affiliate)
campaign: yyyy-mm-thing       (2026-08-launch, 2026-q3-webinar)

Dating the campaign is the small detail that pays off most. In eighteen months, spring-launch is ambiguous and 2026-03-launch is not.

Keep a spreadsheet of every URL built. It sounds bureaucratic and it is the only thing that stops the same campaign being tagged three ways by three people.

Where UTMs mislead

They overwrite better information

A campaign parameter beats the referrer in every tool. Usually correct — a tag is an explicit statement, a referrer is an inference.

But it produces one specific, widespread error: ChatGPT appends utm_source=chatgpt.com to the links it hands out. So your largest AI referral surface is filed under Campaigns, beside your newsletter, rather than as AI traffic. Your campaign report contains a campaign you did not run and your AI number is missing its biggest contributor.

The fix is to classify AI referrers before the campaign branch. The full treatment, including the Gemini problem.

They are visible and editable

UTMs are in the URL. People share tagged links, paste them into Slack, and post them on forums. Traffic then arrives tagged as an email campaign because someone forwarded a newsletter link.

Nothing prevents this. Just know that campaign numbers have a fuzzy edge, and that a campaign with a strangely long tail is usually a shared link rather than sustained performance.

They attribute the click, not the journey

A UTM records where the last click came from. Someone who found you through search in March, subscribed, and clicked a newsletter link in June is recorded as newsletter traffic. That is not wrong, but it is not the whole story, and it systematically over-credits the channels that come last.

Cleaning up an existing mess

Normalise case on ingest if your tool supports it. Fixes the largest single problem retroactively.

Consolidate mediums to your fixed list and map the old values.

Audit for internal tagging. Look for campaign traffic whose landing page is deep in the site and whose referrer is your own domain. That is the signature.

Then leave the past alone. Historical data tagged inconsistently is not recoverable, and rewriting it is a large project that produces a slightly tidier version of numbers nobody will look at again. Start the convention today and let the mess age out.

Common questions

Should I use UTM parameters on internal links?

No, never. A UTM on an internal link starts a new session in most analytics tools and overwrites the visitor's original acquisition source — so somebody who arrived from Google and clicked a tagged internal banner is recorded as having come from that banner. It destroys acquisition data for your most engaged visitors. Use an event to measure internal clicks instead.

Why does ChatGPT traffic appear as a campaign in my analytics?

Because ChatGPT appends utm_source=chatgpt.com to the links it gives people, and every analytics tool prioritises campaign parameters over the referrer. The result is that your largest AI referral source lands in the campaign report next to marketing you actually ran. Fixing it means classifying AI referrer hosts before the campaign rule is evaluated.

What is the right naming convention for UTM parameters?

Lowercase everywhere, hyphens rather than spaces or underscores, medium drawn from a short fixed list, and campaign names prefixed with the year and month. Dating campaigns is the detail that pays off most — in eighteen months spring-launch is ambiguous and 2026-03-launch is not. Keep a shared record of every URL built, because the real failure mode is drift between people rather than ignorance.