Docs · UTMs
Which parameters matter, how GA4 maps them to channels, and the governance habits that stop your source/medium report from rotting.
Most analytics accounts aren’t missing UTMs. They’re drowning in bad ones: mixed case, invented mediums, internal links that restart sessions, and paid social tagged as organic. Fixing that is less about “more parameters” and more about a short, enforced vocabulary.
If you buy traffic in Google Ads, pair this with tracking template vs Final URL suffix and the Ideal Configuration — UTMs usually belong in the suffix, not the template. For paste-ready strings, use Spectacle google/cpc, Search UTMs, or draft one-offs in the Campaign URL builder.
Five standards, plus a few GA4 extras. The names look interchangeable; the reports treat them very differently.
utm_source — the platform: google, facebook, linkedin, newsletter. One spelling per platform, forever.utm_medium — channel type. This drives GA4 default channel grouping. Keep it on a closed list (cpc, email, paid_social, …). Not the campaign name. Not “newsletter-june”.utm_campaign — the initiative. Names or IDs live here (see below).utm_content — creative / placement / A-B variant: hero-cta, ad-b, or an ad ID.utm_term — paid keyword or audience. Leave blank if you don’t need it; don’t dump random junk here.utm_id — GA4’s manual campaign ID and the join key for cost Data Import. Fill it if you import spend.
GA4 also accepts utm_source_platform, utm_creative_format, and utm_marketing_tactic.
Useful once you actually report on them. Until then, skip them — every unused parameter is another way to break a URL.
utm_medium as a controlled vocabularyDefault channel grouping is a pile of regexes over source, medium and campaign. Miss the pattern and traffic lands in Unassigned — or worse, the wrong channel.
cpc, ppc or paid with a search source. paidsearch fails. PPC fails (rules expect lowercase).paid, cpc, cpm, paid_social, …) and the source must be a social network. utm_medium=social on Meta ads often reads as Organic Social — then “organic” starts converting like paid and nobody notices for weeks.email. Not newsletter, e-mail, or mail if you care about the Email channel.google / (not set).
Write down ≤10 allowed mediums. Anything else is a bug. Meta / LinkedIn / TikTok paste packs on this site already use
paid_social or cpc on purpose — see
Calendly Meta UTMs
and
Spectacle Meta.
Values are case-sensitive. Email and email never merge. Same for campaign names.
Don’t rely on people remembering — generate links from one tool that lowercases on output
(our Campaign URL builder is fine for one-offs; agencies usually wrap a sheet with dropdowns).
If you already have years of dirty data, normalise in BigQuery from the raw page location. GA4 won’t fix casing in the built-in dimensions for you.
Tagged links between your own pages start a new session and overwrite acquisition. Paid click → internally tagged banner → conversion credited to the banner. Paid looks dead; the banner looks genius.
Use GA4 view_promotion / select_promotion (or custom events) for on-site promos. UTMs are for inbound traffic only.
spring-sale). Spaces become %20/+ and fork into duplicates.2026-q3_brand_search — pick one separator scheme and stick to it.& ? = # % and non-ASCII inside values; they break or truncate quietly.| Channel | Usual gap |
|---|---|
| Paid search | Search is fine; PMax / Shopping often aren’t. Check suffixes there too. |
| Paid social | Platform “URL parameters” defaults are incomplete — set per ad set. |
ESP defaults invent mediums. Override to email. | |
| Organic social | Almost never tagged. Tag every profile link you post. |
| Affiliates | Give partners pre-built URLs; don’t let them freestyle. |
| PDFs / decks | Links inside downloads rot for years. |
| QR codes | utm_medium=qr + a location campaign. |
| Signatures / push | Low volume, high intent, invisible without tags. |
Platform macros that resolve to IDs ({campaignid}, Meta {{campaign.id}}) survive renames.
Friendly names in utm_campaign are easier to read and fragment the moment someone “cleans up” naming in Ads Manager.
Best of both: IDs in the URL, names joined in BI. No warehouse? Use names and treat a rename as a breaking change.
That’s why our Google Ads recipes default to {campaignid} in
the Ideal tracking-template setup.
The highest-leverage fix isn’t another UTM key. It’s ownership.
Source + medium + campaign done consistently beats seven parameters done “sometimes”.
Add utm_content / utm_term when a report needs them — not because a blog checklist said so.
utm_medium=social or paid_social right for paid Meta ads?
Use something paid: paid_social, cpc, paid. Plain social usually lands in Organic Social in GA4.
Yes. Enforce lowercase at generation time.
No. It restarts the session and overwrites acquisition. Use events / promotions instead.
They create alternate URLs for the same page. Use a self-referencing canonical on the clean URL. Ad and email clicks rarely get crawled, but the canonical is cheap insurance.
Three done well first. Expand only when reporting requires it.
utm_id for?GA4 manual campaign ID and the join key for imported cost data from non-Google platforms.