adop.tools

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. A complete reference for marketing teams who want clean, trustworthy data.

Cross-channel · 8 min read

UTM parameters are five query-string values you append to any URL before sharing it. When a visitor arrives via that link, GA4 reads the parameters and uses 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 entirely on some links but not others — and GA4 quietly files traffic in the wrong buckets, sometimes for months before anyone notices.

The complete parameter reference

All five parameters are parsed from the URL the moment a session begins. GA4 stores them as session-scoped dimensions and uses them to drive 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 Session may be attributed to (direct) or the referring domain, depending on whether a referrer header is present.
utm_medium Session medium Required cpc, email, social, display, affiliate, referral The session almost certainly lands in the wrong channel group — GA4's rules depend heavily on medium to distinguish Paid Search from Organic, Email from Direct, etc.
utm_campaign Session campaign Required spring-sale-2025, brand-search-q1, may-newsletter Reported as (not set) in campaign reports — you lose visibility into 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. For paid search this is a significant reporting gap; for email and social it's irrelevant.
utm_content Session content Optional Ad variant, CTA, or link position: hero-cta, sidebar-banner, text-link You cannot distinguish between two ads or two links in the same email — useful only when running A/B tests or multiple placements per campaign.

Why utm_medium matters most

GA4's default channel grouping is a set of rules that run server-side on every session. Each rule checks a combination of source, medium, and — for Google traffic — the presence of a gclid auto-tag. The 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, if the email client strips the referrer header, in Direct. Either outcome inflates channels that didn't actually drive the conversion. Over a full quarter this distorts every assisted-conversion report you run.

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 uses lowercase, your Facebook traffic appears split across two lines — and neither line reflects the true total.

The fix is simple: always use lowercase, no spaces. Replace spaces with hyphens if you need word separation. Establish a shared naming doc (even a Google Sheet works) and enforce it with a URL builder or a UTM linter in your campaign workflow.

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 channel rule — 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 Re-using a campaign name across channels makes campaign-level 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 acquisition source mid-session, resetting channel 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 — ad spend attribution vanishes entirely.

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 will appear in GA4 under the Email channel group, attributed to source mailchimp and campaign june-newsletter-2025. The utm_content value lets you distinguish the hero CTA from any 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

The {keyword} placeholder is replaced by Google Ads with the actual search term at click time. This session routes to Paid Search in GA4's default channel grouping because source=google and medium=cpc match the rule. Note: if auto-tagging is enabled, skip the manual UTMs — the gclid parameter carries richer data and the two approaches 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 is a logical rule applied at session start. The most commonly relevant rules are:

The word "matches" here means an exact match or a regex match, and it is case-sensitive. medium=Email does not match the Email channel rule. medium=CPC does not match the Paid Search rule. This is why lowercase convention isn't just a style preference — it's functionally required.

You can view and customise these rules in GA4 under Admin → Data display → Channel groups. Adding custom channels is useful when your source/medium conventions don't align with Google's defaults — for example, if you tag influencer links with medium=influencer.

Direct and dark traffic

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

A growing Direct channel is not always a problem — it can reflect word-of-mouth or strong brand recall. But if you're seeing an unexplained spike in Direct alongside a paid campaign launch, the likely cause is that your UTM links are being stripped somewhere in the delivery chain (a URL shortener, an email client, or a redirect that drops query strings). Test the full destination URL end-to-end before launch using GA4's DebugView to confirm parameters are arriving intact.

For traffic you genuinely cannot tag, consider adding a custom channel definition in GA4 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