UTM parameters are tags you add to a URL's query string so analytics tools such as Google Analytics 4 can tell where each visit came from: which source, which medium and which campaign brought it.
Without them, a visit from a newsletter opened in a desktop mail app or from a PDF usually ends up as direct traffic, and you lose track of which campaign worked. This is what a link with all five parameters looks like:
https://www.yourstore.com/running-shoes/?utm_source=bing&utm_medium=cpc&utm_campaign=winter-sale-2026&utm_term=running-shoes&utm_content=ad-a
Everything after the ? is a set of name=value pairs joined by
&. The page that loads is the same; the parameters only inform your analytics.
The five UTM parameters and what each one means
utm_source (required)
The specific source sending the visit: the site, platform or send. Examples:
facebook, google, newsletter, linkedin.
utm_medium (required)
The type of channel. It carries the most weight in how GA4 classifies the visit, so stick to
standard values: cpc, paid_social, email,
social, referral, affiliate, display.
utm_campaign (required by convention)
The campaign name, for example winter-sale-2026 or app-launch. GA4
does not demand it, but without it you cannot compare campaigns, which is the whole point of
tagging.
utm_term
The paid keyword that triggered the ad, such as running-shoes. It is mostly used in
search campaigns that do not pass that data on their own.
utm_content
Tells apart ads or links within the same campaign: ad-a versus ad-b,
or header-button versus footer-link in the same email. It is the simplest
way to run a measurable A/B test.
GA4 also reads utm_id, utm_source_platform,
utm_creative_format and utm_marketing_tactic, although most accounts
get by with the classic five.
How GA4 uses source and medium to assign channels
GA4 does not look at the campaign to decide the channel: it matches source and medium against a set of rules and puts each session in a default channel group (Paid Search, Paid Social, Email, Organic Social, Referral, Display, Affiliates and so on). The full rules are in Google's documentation on the default channel group. If a combination matches none of them, the session lands in Unassigned.
| Source / medium | GA4 channel |
|---|---|
| google / cpc | Paid Search |
| facebook / paid_social | Paid Social |
| x / paid_social | Paid Other |
| newsletter / email | |
| instagram / social | Organic Social |
| partner-blog / referral | Referral |
| affiliate-network / affiliate | Affiliates |
| news-site / display | Display |
| newsletter / mail | Unassigned |
X is a good example of why the source matters. The medium paid_social matches GA4's paid
regex (^(.*cp.*|ppc|retargeting|paid.*)$), but Paid Social also needs the source to
be on the list of social sites Google publishes. That list includes
facebook, instagram, linkedin, tiktok,
twitter and t.co, but not x, x.com or
meta. So x / paid_social ends up in Paid Other: use
twitter or facebook as the source.
Naming conventions
- Always lowercase. GA4 treats
Facebookandfacebookas different sources, and your report splits into two rows. - Hyphens instead of spaces. A space becomes
%20or+and makes filtering harder:winter-sale, not "Winter Sale". - A shared naming sheet. One table with the allowed source and medium values and the live campaigns stops everyone from inventing their own.
- Consistent campaign names. A fixed pattern such as
topic-month-yearlets you group and compare campaigns in your dashboard without cleaning data by hand.
If you would rather not build the URLs by hand, the UTM builder puts them together from the fields you fill in.
When not to use UTM parameters
On internal links within your own site
If you add UTMs to a homepage banner that links to a category, you overwrite the real source of the visit in your reports: a user who arrived from Google now shows up as your internal campaign, and their conversions are misattributed. Use events to measure internal clicks.
In Google Ads with auto-tagging
With auto-tagging on, Google Ads adds the
gclid parameter and, with the account linked to GA4, campaign data arrives on its own.
UTMs are optional there.
Common UTM mistakes
- Non-standard mediums that end up in Unassigned.
mail,sm-postsornewsletteras a medium match no rule. If your channel report shows a lot of Unassigned, or every team tags its own way, an analytics implementation sets the convention and checks it before campaigns go live. - Mixed case.
Email,emailandEMAILshow up as three different values in your reports. - UTMs on internal links. They break attribution, as explained above.
- Parameters after the # fragment. In
/offer/#pricing?utm_source=newsletterthe parameters are part of the fragment, not the query string, so they are not read. The correct form is/offer/?utm_source=newsletter#pricing. - Redirects that drop the query string. If the tagged URL goes through a 301 redirect (HTTP to HTTPS, an old URL or a link shortener) that does not keep the parameters, the visit arrives without UTMs. Open the final link and check they are still in the address bar.
With properly tagged campaigns you can work out the ROAS of each channel from reliable data rather than guesswork.
Frequently Asked Questions
-
UTM stands for Urchin Tracking Module, the analytics software Google bought and turned into Google Analytics. UTM codes are the parameters you add to a URL (utm_source, utm_medium, utm_campaign, utm_term and utm_content) so your analytics knows which source, medium and campaign each visit came from.
-
No. utm_source and utm_medium are the essentials, and by convention you almost always add utm_campaign. utm_term and utm_content are optional: use them when you need to tell apart paid keywords or several ads and links inside the same campaign.
-
They are not a ranking factor: Google does not use them to rank results. The only risk is that versions of the same page with different parameters get indexed. A canonical URL pointing to the clean version prevents it, and you should not use them on internal links anyway.
-
Because the source and medium of those sessions match no rule in GA4's default channel group. It usually happens with made-up mediums (mail, newsletter, sm-posts) or sources GA4 does not recognise. Switch to a standard medium (email, social, cpc, referral) and new sessions will be classified correctly.