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:
- Paid Search — source matches a search engine list AND medium matches
cpc|ppc|paidsearch
- Organic Search — source matches a search engine list AND medium is not one of the paid values (no UTM needed — GA4 infers this from the referrer)
- Email — medium matches
email|e-mail|e_mail|newsletter
- Paid Social — source matches a social network list AND medium matches
cpc|ppc|paid
- Organic Social — source matches a social network list AND medium matches
social|social-network|social-media|sm|social network|social media
- Referral — medium is
referral|app|link
- Direct — source is
(direct) AND medium is (none) or (not set)
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.