UTM Parameters: The Complete Guide to Campaign Tracking

· 2 min read

UTM parameters are the standard way to tell your analytics tool where a visitor came from. They're just query parameters with agreed-upon names — no magic, no JavaScript, no cookies required on the link itself. Yet most organizations' campaign data is a mess, because UTMs are easy to use and easier to use inconsistently.

Where UTMs came from

The name is an acronym: Urchin Tracking Module. Urchin was the analytics company Google bought in 2005 and turned into Google Analytics. The parameter names survived the acquisition, and because every analytics platform wanted to be compatible with the market leader, utm_* became a de facto industry standard. Matomo, Mixpanel, Amplitude, HubSpot, and dozens of others all read them.

The five parameters

Parameter Question it answers Examples
utm_source Which site or platform sent the click? google, newsletter, linkedin
utm_medium Which kind of channel? cpc, email, social, referral
utm_campaign Which push or initiative? spring-sale, product-launch
utm_term Which paid keyword? espresso+machine
utm_content Which variant of the ad or link? header-cta, footer-cta

Source and medium are the load-bearing pair. Analytics tools build their acquisition reports around the source/medium combination, and most treat a link with a source but no medium as misconfigured. Campaign, term, and content are refinements: campaign groups links across channels, term captures paid-search keywords, and content distinguishes A/B variants pointing at the same page.

How the mechanics work

A tagged link is an ordinary URL:

https://example.com/sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale

When someone clicks it, the landing page's analytics script reads the parameters from location.search and attributes the session. That's the whole mechanism — which explains the two classic failure modes. If a redirect strips the query string, attribution dies. And if the parameters are malformed (spaces unencoded, an & where a value should be), everything after the error is garbage. You can check any tagged link's structure with a URL parser before it ships.

The mistakes that corrupt data

Inconsistent casing. utm_source=Newsletter and utm_source=newsletter are two different sources in your reports. Analytics tools are case-sensitive; your team's memory is not. Pick lowercase forever.

Tagging internal links. Adding UTMs to links between pages of your own site restarts the session with a new attribution, destroying the record of where the visitor actually came from. UTMs are for inbound links only — email, ads, social, partner sites.

Swapping source and medium. utm_source=email&utm_medium=newsletter is backwards: email is the medium (the channel type), the newsletter is the source. The test: medium answers "what kind of channel?", source answers "which one specifically?"

Free-texting values. If everyone on the team invents values ad hoc, you get fb, facebook, Facebook, and meta as four different sources. Fix it with a shared naming convention and a shared tool.

Building tagged links

Hand-assembling UTM links invites both encoding bugs and convention drift. The UTM builder constructs the link as you type — proper percent-encoding for values with spaces, parameters in canonical order, live preview of the final URL — so the only thing left to get right is your naming discipline.