UTM tagging

UTM Parameters: The Right Way to Tag Your Campaigns

Inconsistent UTM tagging is the most common source of broken channel attribution in GA4. This reference covers each parameter, how GA4 reads it, and the tagging mistakes that send traffic to the wrong channel.

Cross-channel · 8 min read

UTM parameters are five query-string values you append to a URL before sharing it. When a visitor arrives via that link, GA4 reads them to classify the session into a channel, attribute conversions and populate campaign reports. Get them right and your channel grouping is accurate. Get them wrong, or skip them on some links but not others, and GA4 files traffic in the wrong buckets without telling you, sometimes for months.

The complete parameter reference

GA4 parses all five from the URL when a session begins, stores them as session-scoped dimensions, and uses them for default channel grouping, traffic source reports and the Acquisition overview.

Parameter GA4 dimension Required? Recommended values If missing
utm_source Session source Required google, facebook, mailchimp, linkedin, newsletter Attributed to (direct) or the referring domain, depending on the referrer header.
utm_medium Session medium Required cpc, email, social, display, affiliate, referral The session almost certainly lands in the wrong channel group: GA4's rules rely on medium to tell Paid Search from Organic, Email from Direct.
utm_campaign Session campaign Required spring-sale-2025, brand-search-q1, may-newsletter Reported as (not set): you lose sight of which campaign drove the session.
utm_term Session keyword Optional The paid keyword that triggered the ad, e.g. project+management+software Keyword column is blank. A real gap for paid search; irrelevant for email and social.
utm_content Session content Optional Ad variant, CTA, or link position: hero-cta, sidebar-banner, text-link You cannot tell two ads or two links in the same email apart. Useful for A/B tests or multiple placements.

Why utm_medium matters most

GA4's default channel grouping is a set of rules run server-side on every session. Each rule checks source, medium and, for Google traffic, the presence of a gclid auto-tag. Medium is the primary filter: a session tagged medium=cpc routes to Paid Search or Paid Social depending on the source; medium=email routes to Email; medium=social routes to Organic Social.

If you forget utm_medium on an email link, GA4 sees an unknown medium and the session typically lands in Unassigned, or in Direct if the email client strips the referrer header. Either way, channels that didn't drive the conversion get inflated, and over a quarter every assisted-conversion report is distorted.

The case-sensitivity gotcha

UTM values are case-sensitive in GA4. utm_source=Facebook and utm_source=facebook create two separate rows in every report. If half your team uses title case and half lowercase, Facebook traffic splits across two lines and neither shows the true total.

The fix: always use lowercase, no spaces, with hyphens for word separation. Keep a shared naming doc (even a Google Sheet works) and enforce it with a URL builder or UTM linter.

Common mistakes

Don't Do Why it matters
utm_source=Facebook utm_source=facebook Mixed case splits the source into two rows in every report.
utm_campaign=Spring Sale 2025 utm_campaign=spring-sale-2025 Spaces get encoded as + or %20 inconsistently across tools. Use hyphens or underscores.
Email link has utm_source and utm_campaign but no utm_medium Always include utm_medium=email Without a medium, GA4 cannot match the Email rule, so the session lands in Unassigned or Direct.
utm_campaign=may-newsletter used on both email send and paid retargeting ads Use distinct names: may-newsletter-email and may-newsletter-retargeting Reusing a campaign name across channels makes campaign reporting meaningless: you can't separate email conversions from ad conversions.
Tagging every internal link with UTMs Only tag external links pointing to your own domain UTMs on internal links overwrite the original source mid-session, resetting attribution to the internal page.
Auto-tagging disabled on Google Ads with no manual UTMs Leave auto-tagging on, or add UTMs manually if you must Without a gclid or manual UTMs, Google Ads clicks arrive as organic or direct and ad attribution vanishes.

Practical examples

Email campaign link

A monthly newsletter driving recipients to a product landing page:

https://example.com/landing-page?
utm_source=mailchimp&
utm_medium=email&
utm_campaign=june-newsletter-2025&
utm_content=hero-cta

This appears in GA4 under the Email channel group, with source mailchimp and campaign june-newsletter-2025. The utm_content value separates the hero CTA from other links in the same email.

Paid search campaign link

A Google Ads campaign where auto-tagging is disabled and manual UTMs are required:

https://example.com/product?
utm_source=google&
utm_medium=cpc&
utm_campaign=brand-search-q2-2025&
utm_term={keyword}&
utm_content=responsive-ad-v2

Google Ads replaces the {keyword} placeholder with the actual search term at click time. This session routes to Paid Search because source=google and medium=cpc match the rule. If auto-tagging is enabled, skip the manual UTMs: the gclid parameter carries richer data and the two can conflict. See Ads auto-tagging vs UTMs for when to use each.

UTMs and GA4's default channel grouping

GA4 ships with around a dozen channel definitions, each a rule applied at session start. The most relevant are:

"Matches" means an exact or regex match, and it is case-sensitive. medium=Email does not match the Email rule and medium=CPC does not match Paid Search. Lowercase is functionally required, not just a style preference.

You can view and customise these rules in GA4 under Admin → Data display → Channel groups. Add custom channels when your source/medium conventions differ from Google's defaults, for example if you tag influencer links with medium=influencer.

Direct and dark traffic

Some traffic is untaggable. Mobile apps, email clients that strip query strings, WhatsApp or Slack links and browser bookmarks all arrive without UTMs or a referrer. This dark traffic ends up in Direct.

A growing Direct channel is not always a problem: it can reflect word-of-mouth or brand recall. But an unexplained Direct spike alongside a paid campaign launch usually means UTM links are being stripped in the delivery chain (a URL shortener, an email client, or a redirect that drops query strings). Test the full URL end-to-end before launch, using GA4's DebugView to confirm parameters arrive intact.

For traffic you cannot tag, add a custom GA4 channel that catches known internal referrers (your own app domain, for instance) before they fall into Direct.

Related guides

All guides →

See your actual channel data.

Connect GA4 and build a live acquisition report. Free for one report.

Create a report