Every URL you share in a campaign is a question waiting for an answer. Where did this user come from? Which ad did they click? What email subject line drove that purchase? UTM parameters are the mechanism that turns those questions into data inside Google Analytics 4.
The five UTM parameters—utm_source, utm_medium, utm_campaign, utm_term, and utm_content—attach structured metadata to any URL. When someone clicks that link, GA4 reads the parameters and files the session under the right source, channel, and campaign. Without them, a significant chunk of referral and paid traffic collapses into Direct or Other, and you lose the attribution chain entirely.
What UTM Parameters Are (and What They Are Not)
UTM stands for Urchin Tracking Module, named after Urchin Software, which Google acquired in 2005. The naming is a historical footnote; the mechanism is entirely current. GA4 reads UTM parameters natively—they populate the Traffic acquisition and Campaign reports without any configuration beyond adding them to your URLs.
What UTM parameters are not: conversion pixels, server-side event tags, or tracking cookies. They are plain text appended to a URL after a question mark. No JavaScript required for the data to pass; the browser transmits the full URL string to GA4 on page load, and GA4 extracts the values. This makes them resilient in environments where script-based tracking faces limitations.
The Five Parameters: Definitions and Expected Values
| Parameter | Required? | What it captures | Example values |
|---|---|---|---|
utm_source |
Required | Origin of traffic—which site, newsletter, or platform sent the visitor | google, newsletter, facebook, linkedin |
utm_medium |
Required | Marketing channel or mechanism—how the link reached the user | cpc, email, organic, social, referral |
utm_campaign |
Required | Campaign name—which initiative, promotion, or push this link belongs to | spring-sale, product-launch-q2, brand-awareness |
utm_term |
Optional | Paid search keyword that triggered the ad (manual tagging for non-Google platforms) | utm+builder+free, campaign+tracking |
utm_content |
Optional | Ad variant or link identifier for A/B test differentiation | hero-cta, sidebar-link, text-ad-v2 |
The three required parameters—utm_source, utm_medium, utm_campaign—are sufficient for most campaign tracking scenarios. Add utm_term when you need keyword-level attribution outside of Google’s auto-tagging. Use utm_content when you’re running multiple ad creatives or email CTA variants and need to compare performance at the asset level.
Beyond the Classic Five: utm_id and the GA4-Era Parameters
Google’s own URL builder now lists more than five parameters. Four additions matter to varying degrees:
utm_id— a campaign ID that Google marks as recommended. Its practical job is joining imported cost data to sessions: if you upload ad spend from non-Google platforms into GA4,utm_idis the key the import matches on. Unlike the other parameters, treat its case as significant — platform-generated IDs are often case-sensitive, so pass them through unchanged.utm_source_platform— the platform that manages the source, such as a buying platform placing ads across many sites. Rarely needed for manual tagging.utm_creative_formatandutm_marketing_tactic— GA4 accepts both, but neither surfaces in standard reports. Tag them if you want the data in your URLs for later use; do not expect to see them in Traffic acquisition today.
The classic set remains the working core: nothing in GA4’s channel grouping or campaign reporting requires the newer parameters.
utm_source vs utm_medium: The Difference That Trips Everyone Up
Here is the rule, and it is the only one you need to remember: source is where, medium is how. The source names the specific referrer that sent the visit. The medium names the broad channel category that referrer belongs to. They answer different questions, and almost every tagging error comes from collapsing one into the other.
utm_source = where (the referrer)
The utm_source identifies the specific property or platform the click originated from. It is a proper noun — a name. google, bing, facebook, linkedin, mailchimp, partner-blog are all valid sources. If a colleague asked “which website or service sent this person?”, the answer is your utm_source. There is no fixed list; you define sources to match the platforms you actually use, and you keep them in lowercase and consistent so the same referrer never splits into two rows.
utm_medium = how (the channel category)
The utm_medium describes the type of marketing channel — the mechanism that delivered the visit. Unlike source, medium does draw from a small controlled vocabulary, because GA4 matches medium values against the rules behind its channel grouping. The standard values are cpc (paid search), email, social (or organic-social / paid-social), display, affiliate, and referral. If source answers “from where”, medium answers “by what kind of activity”. Facebook is a source; social is its medium. Google is a source; cpc is the medium when the click came from an ad.
The mistake that breaks your reports
The two classic errors are mirror images of each other:
- Putting the platform in the medium — e.g.
utm_medium=googleorutm_medium=facebook. “google” is not a channel type, so GA4 has no channel-grouping rule that matches it. The session falls into “(Unassigned)”. - Putting the channel type in the source — e.g.
utm_source=cpcorutm_source=email. Now the source is meaningless (“cpc” is not a referrer) and you lose the ability to tell which platform actually sent the traffic.
The correct pairing for a Google paid-search ad is utm_source=google and utm_medium=cpc — never the reverse. For a Mailchimp newsletter it is utm_source=mailchimp (or newsletter) and utm_medium=email. Keep the proper noun in source and the channel type in medium, every time, and the “(Unassigned)” bucket empties out.
How utm_source, utm_medium, and utm_campaign Map to GA4
GA4’s channel grouping logic reads utm_medium first. The value you pass determines which Default Channel Group the session lands in—Paid Search requires medium=cpc, Email requires medium=email, and so on. If your utm_medium values don’t conform to GA4’s expected strings, sessions end up in Unassigned and disappear from channel reports.
The mapping between medium values and GA4 channels that marketers regularly get wrong:
- Paid social: medium=paid-social (not “social” alone—that routes to Organic Social)
- Display advertising: medium=display or medium=banner
- Email marketing: medium=email (not “e-mail” or “newsletter”—channel matching rules are case-insensitive, but stored dimension values are not: GA4 stores the literal string you pass, so “Email” and “email” appear as two separate rows in reports; lowercase is best practice to prevent duplicated rows)
- Affiliate traffic: medium=affiliate
utm_source and utm_campaign feed the source/medium dimension pair and the Campaigns report respectively. Neither controls channel grouping by itself. For the report-side view — where campaign values surface inside GA4 and how to read those reports — see our guide to GA4 UTM tracking and campaign parameters.
How GA4 Uses utm_medium for Channel Grouping
This is the part most reference pages leave out, and it is the reason the source-vs-medium distinction matters at all. GA4 does not display traffic by raw utm_medium in its default reports. Instead it runs each session’s medium through a set of rules to assign a default channel group — the labels you see in the Traffic acquisition report, such as “Organic Search”, “Paid Search”, “Email”, “Organic Social”, and “Referral”. Per Google’s channel definitions documentation, those rules read the medium value (and sometimes the source) to decide the group. A simplified view of the mapping:
| utm_medium value | GA4 default channel group |
|---|---|
cpc, ppc, paidsearch |
Paid Search |
email, e-mail |
|
organic-social, social-network |
Organic Social |
display, banner, cpm |
Display |
affiliate |
Affiliates |
referral |
Referral |
| anything GA4 doesn’t recognise | (Unassigned) |
The takeaway is direct: a correct utm_medium is what lets GA4’s reporting layer place your campaign in the right channel. A misspelled or invented medium — emails, fb, ads, google — matches no rule and lands in “(Unassigned)”. You find these reports under Reports → Acquisition → Traffic acquisition; for ad-hoc breakdowns you can rebuild the same dimensions in Explore. If you want background on the surrounding signals GA4 collects automatically, our coverage of GA4 enhanced measurement walks through them.
cpc, ppc or paid — which one should you use?
All three land in a paid channel: GA4’s paid rules match the regex ^(.*cp.*|ppc|retargeting|paid.*)$, so cpc, ppc, paidsearch and even a bare paid all qualify. Which paid channel the session joins is then decided by the source: a search platform like google or bing gives Paid Search, a social platform gives Paid Social, and an unrecognised source falls back to Paid Other. The practical convention: standardise on cpc for paid search and paid-social for social ads — both are unambiguous to GA4 and to the humans reading the report — and let the source column carry the platform name.
Recommended Source/Medium Values by Channel
The single best defence against “(Unassigned)” traffic is a controlled vocabulary your whole team reuses. Copy the table below as your reference. Note the pattern: the medium column stays within the values GA4 recognises, while the source column names the actual platform.
| Channel | utm_source (example) | utm_medium |
|---|---|---|
| Paid search | google, bing |
cpc |
| Paid social | facebook, linkedin |
paid-social |
| Organic social | facebook, instagram, x |
organic-social |
newsletter, mailchimp |
email |
|
| Display | google, adroll |
display |
| Affiliate | impact, partner-name |
affiliate |
| Referral / partnership | partner-blog, vendor-name |
referral |
Two conventions hold the whole system together. First, everything stays lowercase — because values are case-sensitive, mixing cases splits one channel into several. Second, pick one spelling per concept and never deviate: email forever, not email here and e-mail there. Inconsistency is the slow-motion version of the “(Unassigned)” problem. Our UTM naming convention taxonomy turns both rules into a ready-made standard a whole team can adopt as is.
Building Tagged URLs Without Manual Assembly
Assembling UTM parameters by hand—copying a URL, typing the question mark, adding each parameter—produces typos and inconsistencies within days. utm_Medium and utm_medium are two different values to GA4. A campaign tagged “spring_sale” on one channel and “Spring-Sale” on another splits your data across two rows.
The practical approach is a URL builder that encodes each field, enforces lowercase, and outputs a complete tagged URL for copying. The UTM builder at Elsop handles this: paste your destination URL, fill in the five fields, and copy the finished link. The tool also previews the full URL before you commit it to a campaign, which catches parameter errors before they reach GA4.
Where utm_term Fits in Non-Google Paid Search
Google Ads auto-tagging adds the gclid parameter to every click, which GA4 uses for keyword and ad-level attribution without UTM parameters. You can run UTM parameters alongside gclid, but utm_term is redundant for Google Ads unless you’ve disabled auto-tagging.
For Microsoft Ads, Meta Ads keyword campaigns, and LinkedIn Sponsored Content, utm_term is the primary mechanism for passing keyword or targeting data into GA4. Microsoft Ads supports dynamic insertion via {Keyword} syntax in the tracking template—you’d set utm_term={Keyword} in the campaign’s tracking URL template. For Meta Ads specifically, our Facebook UTM guide walks through tagging each ad variant without splitting your campaign rows.
utm_content: A/B Testing at the URL Level
Email marketers sending the same link in two positions—hero image versus footer text—use utm_content to distinguish performance. Setting utm_content=hero-image on one variant and utm_content=footer-text on another lets GA4 show which placement drove more conversions, without needing a separate campaign tag for each.
For display advertising, utm_content typically carries the ad creative ID or description. This feeds the Ads content dimension in GA4, where you can filter campaign performance by creative variant.
Parameter Values That Break Analytics Reports
A few technical failure modes come up repeatedly in analytics audits:
- Spaces in parameter values — browsers encode spaces as %20 or +, which GA4 reads as the literal character rather than a word separator. Use hyphens instead. “spring sale” becomes “spring%20sale” in GA4, not “spring sale.”
- Inconsistent capitalization — GA4 treats utm_source=Google and utm_source=google as different values. Enforce lowercase in your URL builder workflow.
- Parameters on internal pages — if someone on your team links to an internal page with UTM parameters (for example, a homepage banner linking to a product page with utm_source=homepage), GA4 resets the session source to that internal tag. UTM parameters should only appear on external-to-site links.
- Double question marks — some landing page URLs already include query parameters (e.g., /page?color=blue). UTM parameters must be appended with & not ?, producing /page?color=blue&utm_source=email.
GA4 and utm_campaign: How Campaign Reports Work
In GA4, the Campaigns report under Acquisition shows performance grouped by utm_campaign value. Sessions without a utm_campaign tag appear as (not set). Paid campaigns that use auto-tagging from Google Ads populate campaign data via the gclid import rather than UTM parameters.
The Session campaign dimension in GA4 looks at the campaign at the session level—the value from the first tagged URL in the session. The User campaign dimension captures the first-touch campaign across a user’s entire history on your property. Both dimensions are available in Explorations for cross-campaign comparison.
For cross-channel campaign measurement—comparing Meta Ads, email, and display within a single campaign—consistent utm_campaign naming across all channels is essential. If the Facebook ads team uses utm_campaign=spring-launch and the email team uses utm_campaign=SpringLaunch, GA4 shows two separate campaigns instead of one.
Testing Tagged URLs Before Deployment
Before deploying tagged URLs in a live campaign, verify that GA4 receives the data correctly:
- Open your tagged URL in a browser
- In GA4, navigate to Realtime
- Look for your session under Event count by Source/Medium
- Verify the source, medium, and campaign values match your UTM parameters exactly
This takes three minutes and catches parameter errors before they corrupt a campaign’s attribution data. Once a campaign runs for a week with a misnamed utm_medium, GA4 accumulates a row of traffic under the wrong channel that can’t be retroactively corrected. And if a tagged URL passes this test but the values still never appear in your standard reports, work through why UTMs aren’t showing in GA4 — the checklist of usual suspects lives there.
For teams that run multiple campaigns across several channels, the campaign URL generator at Elsop speeds this process—particularly useful for Facebook and LinkedIn campaigns where each ad variant needs its own tagged URL. For the parallel story on how GA4 processes this attribution data after the click, see how GA4’s AI-driven anomaly detection monitors traffic patterns against learned baselines, including the sudden channel shifts that misconfigured UTM parameters produce.