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.