UTM parameters are five query-string tags (utm_source, utm_medium,
utm_campaign, utm_term, utm_content) that tell an analytics tool
where a visit came from. They work when every link follows one
lowercase, hyphenated convention and fail when they do not, so
governance matters more than memorising the names. Build the tags with
the UTM builder and read them back in link click
analytics.
What are the five UTM parameters?
utm_source, utm_medium, utm_campaign, utm_term and
utm_content: where the traffic came from, through what kind of
channel, for which initiative, on which paid keyword, and which
variant. They are ordinary query-string parameters in the sense of
RFC 3986, section 3.4,
so any tool that reads a URL can read them. The table decodes each.
| Parameter | Purpose | Example |
| -------------- | -------------------------------- | ---------------------- |
| utm_source | Where the traffic comes from | linkedin |
| utm_medium | The channel type | social, email, cpc |
| utm_campaign | The named initiative | q2-launch |
| utm_term | Paid keyword (paid search only) | link+shortener |
| utm_content | Variant / placement / creative | hero-cta, v2 |
If you only enforce one rule, enforce lowercase, no spaces, hyphens only. Half of all "weird analytics anomalies" are just a stray capital letter.
How does GA4 read UTM parameters?
Google Analytics 4 documents nine parameters, not five: the five above
plus utm_id, utm_source_platform, utm_creative_format and
utm_marketing_tactic. Google's own guidance is that utm_source,
utm_medium and utm_campaign should always be included whenever you
tag a URL, and that every relevant parameter should be set so reports
do not fill with "(not set)".[1] In practice the first three
are the ones every tool reads, utm_id matters if you upload cost data
to match campaigns, and the last three are for teams that already have
the basics under control.
The parameters are read from the landing URL at the start of a
session, which has two consequences. A short link in front of the
tagged URL does not change anything, because the redirect delivers the
full destination URL, parameters included. And a parameter typo is
permanent: analytics tools record what arrived, so utm_medium=Email
and utm_medium=email stay two mediums forever.
A worked example
A newsletter promoting a Q2 launch, with the primary button and a text link tagged separately:
https://example.com/launch?utm_source=newsletter&utm_medium=email&utm_campaign=q2-launch&utm_content=primary-cta
https://example.com/launch?utm_source=newsletter&utm_medium=email&utm_campaign=q2-launch&utm_content=text-link
Build both with the UTM builder so the spelling
is identical, shorten each one so the email stays readable, and send.
A week later the campaign report shows q2-launch with two content
rows, and the short links' own click analytics show
which row people clicked before the destination's analytics ever
loaded, which is the number ad blockers cannot remove.
A UTM governance system that actually sticks
- Pick a builder, not a spreadsheet. Spreadsheets drift. A builder with validation enforces the conventions automatically.
- Standardize medium values.
social,email,cpc,display,referral,affiliate,partner. That's the list. - Use a campaign naming convention.
<quarter>-<theme>-<channel>works well:q2-launch-paid. - Audit weekly. Pull your
utm_sourcedistinct list. Anything weird? Fix it now before it pollutes the next quarter.
Try it free, no signup
UTM Builder
Build campaign-tagged URLs in seconds.
Templates by channel
utm_source=newsletter
utm_medium=email
utm_campaign=q2-launch
utm_content=primary-cta
LinkedIn organic
utm_source=linkedin
utm_medium=social
utm_campaign=q2-launch
utm_content=hero-image
Google Ads
utm_source=google
utm_medium=cpc
utm_campaign=q2-launch
utm_term={keyword}
utm_content={adgroupid}-{creative}
Podcast read
utm_source=podcast-marketing-against-the-grain
utm_medium=referral
utm_campaign=q2-launch
utm_content=midroll
What to never do
- Don't put UTMs on your homepage's internal navigation. You'll overwrite organic source attribution.
- Don't use UTMs on indexable inbound links — search engines will index the parameterized URL as a duplicate.
- Don't track campaign IDs only — humans need to read the value six months from now.
Common mistakes, and the fix for each
- Mixed capitalisation.
Email,emailandEMAILbecome three mediums. Fix: a builder that lowercases on the way out, and a weekly look at the distinct values. - Spaces and punctuation in values.
q2 launchbecomesq2%20launchin one tool andq2+launchin another. Fix: hyphens only. - Source and medium swapped.
utm_source=email&utm_medium=newsletterreads backwards in every report. Fix: medium is the channel type from the short list above; source is the specific property. - One link reused across placements. The email button and the LinkedIn post share a URL, so the report cannot say which one worked. Fix: one tagged link per placement, even when the destination is the same.
- No campaign value. Source and medium alone group every email you
ever sent into one row. Fix: always set
utm_campaign, per Google's own guidance.[1] - UTMs stripped by a redirect. Some redirect services drop the query string. Fix: test the short link once and check the landing URL still carries the parameters; the redirect checker shows the final URL.
Where do shortened links fit in?
In front of the UTM, so the parameters survive every paste and the copy stays clean. UTMs are ugly; wrap them in a branded short link so the social copy stays readable and the parameters survive every paste, scrape, and forward.
That combination — a clean short link in front, a governed UTM on the back — is the foundation of every modern attribution stack.
References
[1] Google Analytics Help. Collect campaign data with custom URLs. https://support.google.com/analytics/answer/10917952. Checked 22 October 2026.
[2] Google. Campaign URL Builder (the reference implementation of the parameter set). https://ga-dev-tools.google/campaign-url-builder/. Checked 22 October 2026.
[3] IETF. RFC 3986: Uniform Resource Identifier (URI): Generic Syntax, section 3.4 Query. https://www.rfc-editor.org/rfc/rfc3986#section-3.4.
