UTM parameters are the bridge between your marketing spend and your GA4 conversion data. When someone clicks your Facebook ad, your email campaign, or a link in a newsletter you sponsored and then converts, GA4 needs a way to know which campaign gets credit. UTM parameters appended to the landing page URL are that signal — GA4 reads them automatically on page load and ties every event in that session to the campaign that drove it.
The catch is that GA4 reads them exactly as written. A single uppercase letter in utm_medium can silently send a campaign's traffic into "Unassigned." A space in a campaign name creates URL-encoding inconsistencies across platforms. And GA4 introduced three new UTM parameters that most analytics teams haven't heard of yet. This guide covers all 7 UTM parameters, what each controls in your reports, the formatting rules that prevent silent broken attribution, and how to audit your current tagging.
The 7 UTM Parameters
utm_source (required)
Identifies where your traffic came from. Examples: google, facebook, newsletter, linkedin, bing. GA4 uses this value — combined with utm_medium — to assign sessions to channel groups. The Paid Social rule requires source to match a list of social network names; the Paid Search rule requires source to match a recognized search engine.
Critical detail: utm_source is case-sensitive in GA4's Channel Grouping evaluation. Google and google are treated as different values, and the rule matching that routes sessions to Paid Search or Organic Search uses lowercase strings. A source value of Facebook may miss the Organic Social match entirely and land in Unassigned. Rule: always lowercase.
utm_medium (required)
Identifies the marketing medium — the type of channel. This is the most important parameter for Channel Grouping. Examples: cpc (paid search), email, paid_social, referral, display. GA4's Channel Grouping rules are evaluated against utm_medium first, and they use exact string matching for most values.
The accepted strings are strict. If your emails use Email instead of email, they land in "Unassigned." If your paid social campaigns use social instead of paid_social, they land in Unassigned. If your paid search campaigns use ppc, that value is actually accepted by GA4's Paid Search rule — but paid, paidsearch (one word), and adwords are not. Medium is the lever GA4 pulls first. Get it wrong and the channel is wrong regardless of what source says.
utm_campaign (required)
The campaign name. This is the primary dimension in GA4's campaign reports and what you see in the "Session campaign" and "First user campaign" dimensions. Examples: summer_sale_2026, brand_awareness_q2, welcome_series_onboarding.
Convention: lowercase, underscores instead of spaces, descriptive but concise enough to read in a report row. The campaign name is not evaluated against any channel rule — it's purely a reporting label — so the main failure mode here is inconsistency across the team rather than rule mismatches.
utm_content (optional)
Differentiates between ads or links within the same campaign. This is the A/B testing dimension for creative. If you're running two versions of a Facebook ad with different copy, tag one utm_content=cta_button_blue and the other utm_content=cta_button_orange. If your email has multiple CTAs, tag them utm_content=top_nav_link and utm_content=footer_link.
Maps to the "Session manual ad content" dimension in GA4. Not used for Channel Grouping and not required for any rule to fire correctly. Think of it as the creative identifier that lets you go below campaign-level in your analysis.
utm_term (optional)
The paid search keyword. For manual tagging of paid search campaigns, this is the keyword you bid on. Maps to the "Session manual term" dimension in GA4.
For organic search, GA4's Google Search Console integration populates keyword data separately — through the Search Console link, not UTMs. For paid search, Google Ads auto-tagging (gclid) decodes keyword data automatically when the Ads account is linked to GA4, making manual utm_term redundant for Google Ads. It remains useful for Bing Ads and other paid search platforms that don't have their own auto-tagging mechanism.
utm_id (optional — new in GA4)
A campaign identifier that maps to the Campaign ID dimension in GA4. Useful when your marketing platform assigns its own numeric or alphanumeric campaign IDs — for example, a Facebook campaign ID, a Display & Video 360 campaign ID, or an ID from your own marketing stack — and you want that ID to appear in GA4 for cross-referencing.
This parameter did not exist in Universal Analytics. GA4 added it to make it easier to join GA4 data with external campaign data using a stable identifier rather than a human-readable campaign name that may vary across platforms. If your team doesn't currently cross-reference GA4 with external campaign databases, you can skip it — its absence doesn't affect Channel Grouping or standard campaign reports.
utm_source_platform (optional — new in GA4)
Identifies the platform that manages the campaign buy — distinct from utm_source, which identifies the network where the ad runs. Examples: Search Ads 360, Meta Ads Manager, TikTok Ads, DV360. Maps to the "Source platform" dimension in GA4.
The distinction: utm_source=google tells you the ad ran on Google's network. utm_source_platform=Search Ads 360 tells you it was managed through SA360 rather than Google Ads directly. For teams running campaigns across multiple buy-side platforms that all source traffic from the same network, this parameter lets you separate reporting by the managing platform rather than just the serving network.
How GA4 Processes UTM Parameters
GA4 reads UTM parameters from the page URL on load and stores them as session-scoped dimensions. All events fired in that session — page views, scrolls, button clicks, purchases — carry the same campaign attribution. The attribution is session-based, not hit-based. A user who arrives via a UTM-tagged link and then navigates through five pages will have all five pages' events attributed to that campaign.
Session attribution persists for the duration of the session (30 minutes of inactivity by default). If the same user visits again in a new session — even in the same day — the new session starts fresh. If the new session has a UTM tag, that tag wins. If it doesn't, GA4 uses the referrer to determine the source. If there's no referrer either, the session is attributed as (direct).
Auto-tagging takes priority over manual UTMs for Google Ads traffic. When Google Ads auto-tagging is enabled (which it is by default), Google appends a gclid parameter to ad click URLs. GA4 reads the gclid and decodes the campaign data directly from Google's servers — source, medium, campaign, keyword, ad content. If you also add manual UTM parameters to the same URL, the gclid-decoded values override the manual UTMs for Traffic Acquisition channel classification. Your manually set values still appear in the raw event parameters, but the session-level channel dimensions use the gclid data. The safest approach: for Google Ads, rely on auto-tagging and skip manual UTMs, or use manual UTMs that exactly match what auto-tagging would produce.
The 5 UTM Formatting Rules That Break Attribution
Rule 1: Lowercase everything
GA4's Channel Grouping rules use case-sensitive string matching. utm_source=Facebook does not match the Organic Social rule's list of social networks (which uses lowercase facebook). utm_medium=Email does not match the Email channel rule (which uses lowercase email). Sessions tagged with uppercase values land in Unassigned — silently, with no error message, and the fix doesn't backfill historical data (historical sessions keep the channel they were originally assigned to).
This is the single most common UTM mistake. It's invisible until someone digs into why Unassigned traffic spiked the week after a campaign launched. Enforce lowercase across your team by using a URL builder that lowercases inputs automatically, and add lowercase validation to any URL build process or spreadsheet template.
Rule 2: No spaces in parameter values
Spaces in UTM values get URL-encoded as %20 or + depending on the encoding method, and different platforms decode them differently. utm_campaign=Summer+Sale+2026 and utm_campaign=Summer%20Sale%202026 both appear as Summer Sale 2026 in most decoders — but if one platform encodes differently, you end up with two distinct campaign names in your GA4 reports for the same campaign. Use underscores: utm_campaign=summer_sale_2026.
Rule 3: utm_medium=cpc is exact for Paid Search — but ppc also works
GA4's Paid Search channel rule accepts cpc, ppc, paid search, and paidsearch (with a space). It does not accept paid, adwords, or other variants. If your team uses utm_medium=paidsearch without a space, that lands in Unassigned. If you use utm_medium=paid, that also lands in Unassigned. The safest standard: use cpc for all paid search, since it's the shortest string with no ambiguity and is universally understood in GA4 reports.
Rule 4: Never tag internal links with UTMs
When a user clicks an internal link that has UTM parameters, GA4 starts a new session attributed to those UTM values. The existing campaign attribution is overwritten. A user who arrived from a Google Ads click and then clicks a utm_source=newsletter&utm_medium=email internal navigation link will have the rest of their visit attributed to your email newsletter, not the Google ad. All downstream conversions follow that second attribution.
This inflates email and self-referral attribution at the expense of the acquisition channels that actually drove the user to the site. Check your website's internal links — particularly navigation menus, banners, and cross-sell sections — for UTM parameters and remove them.
Rule 5: Avoid special characters in campaign names
Characters like !, #, &, =, and ? have specific meanings in URLs. An ampersand in a campaign name value (utm_campaign=Q2 Brand & Performance) will break the URL, splitting the parameter at the & and treating the rest as a new parameter. Percent signs, brackets, and pipes cause similar encoding issues. Stick to letters, numbers, underscores, and hyphens.
GA4 Channel Grouping and Your UTMs
GA4 assigns every session to a Default Channel Group based primarily on utm_source and utm_medium. The rules are evaluated in order — the first match wins. Here are the rules that depend most directly on correct UTM formatting:
Paid Search: medium matches cpc, ppc, paid search, or paidsearch, AND source matches a recognized search engine. Both conditions must be true. Google Ads traffic with auto-tagging enabled bypasses this rule entirely — gclid decoding handles it.
Paid Social: medium matches paid_social, social_paid, social-paid, or paidsocial, AND source matches a social network. Note that utm_medium=social alone is NOT sufficient for this rule — social without the "paid" qualifier lands in Organic Social if source matches a social network, or Unassigned otherwise.
Email: medium matches email, e-mail, e_mail, or newsletter. Exact matching — emails (plural) and eml don't match.
Organic Social: source matches a social network domain list (facebook, instagram, twitter/x, linkedin, pinterest, tiktok, reddit, and others) and medium is NOT a paid pattern. Untagged links from social apps typically land here via referrer detection.
Direct: source exactly matches (direct) and medium exactly matches (none) or (not set). This is assigned by GA4 when no UTMs and no referrer are present — it is not a UTM value you should set.
To see your full channel group rules, go to GA4 Admin → Data Display → Channel groups. The default group is read-only but you can see the exact conditions for each channel. If your team uses non-standard medium values, you can create a custom channel group with rules that match your conventions.
How to Audit Your UTM Consistency
Check 1 — the Unassigned deep-dive: In GA4, open the Traffic Acquisition report. If you see "Unassigned" in the channel list, click the row to drill in. Add "Session source / medium" as a secondary dimension. The source/medium pairs you see there are the ones not matching any channel rule. Common patterns: mixed-case variants (Facebook instead of facebook), non-standard medium values (social instead of paid_social), and missing medium entirely.
Check 2 — the source/medium inventory: In GA4 Explorations, run a free-form report with "Session source / medium" as the dimension and Sessions as the metric. Sort descending by sessions. Scan for: inconsistent capitalization within the same source (e.g., google / cpc and Google / cpc appearing as separate rows), medium values you don't recognize, and (not set) on landing pages you know are tagged.
Check 3 — before you launch: Before any new campaign goes live, paste your UTM URL into GA4's Campaign URL Builder (available under the Help menu in GA4 or as a standalone tool at ga-dev-tools.google) and verify the parameters parse correctly. One minute of verification before launch prevents weeks of messy campaign data.
URL Auditor
NiceLookingData's URL audit checks UTM consistency on your pages — detecting mixed-case source values, URL-encoding issues, and internal links that accidentally carry UTM parameters. Paste a URL and get results in seconds.
Open UTM Builder →Frequently Asked Questions
What are UTM parameters in GA4?
UTM parameters are query string values appended to landing page URLs that tell GA4 which marketing campaign, channel, and source drove a visit. GA4 reads them automatically on page load and stores them as session-level dimensions. Every event in that session — page views, clicks, purchases — carries the campaign attribution. The name UTM comes from Urchin Tracking Module, a holdover from the Urchin analytics product Google acquired in 2005 that became Google Analytics.
What UTM parameters does GA4 support?
GA4 supports 7 UTM parameters: utm_source, utm_medium, and utm_campaign are required for meaningful attribution. utm_content and utm_term are optional and existed in Universal Analytics as well. GA4 added three new parameters: utm_id (campaign identifier for cross-referencing with external systems), utm_source_platform (the buying platform, e.g. Meta Ads Manager), and utm_creative_format (the ad format, e.g. video or image — a third new GA4 parameter not covered in depth here because it's primarily used by automated platform tagging).
Does case matter in UTM parameters?
Yes. GA4's Channel Grouping evaluation is case-sensitive, and the accepted values in the channel rules are all lowercase. utm_medium=Email doesn't match the Email channel rule. utm_source=Facebook doesn't match the Organic Social rule's social network list. The practical consequence: always use lowercase for all UTM values, especially source and medium. Campaign names are less critical from a channel-rule perspective (they don't affect which channel a session lands in) but mixed-case campaign names still create duplicate rows in reports.
What is utm_source_platform in GA4?
utm_source_platform is a GA4-specific parameter (not in Universal Analytics) that identifies the platform managing the campaign buy — distinct from utm_source, which identifies the network where the ad appears. Example: utm_source=google says the ad ran on Google's network; utm_source_platform=Search Ads 360 says it was bought through SA360 rather than Google Ads directly. It maps to the "Source platform" dimension in GA4 and is most useful for enterprise teams running campaigns through bid management platforms that sit between them and the ad network.
How do UTM parameters affect GA4 Channel Grouping?
GA4's Channel Grouping evaluates utm_source and utm_medium (and sometimes utm_campaign) against an ordered list of 17 channel rules. The first rule a session matches determines its channel assignment. If no rule matches — because the medium value doesn't match any accepted string or the source isn't on the recognized lists — the session lands in "Unassigned." Getting channel grouping right requires using exact medium values GA4's rules accept: email, cpc, paid_social, display, referral, and so on.
Should I use UTM parameters on internal links?
No. Never add UTM parameters to links between pages on your own domain. When GA4 detects UTM parameters on a page URL, it starts a new session attributed to those parameters — overwriting any existing campaign attribution. A user who arrived from a paid ad and then clicks an internal link tagged with utm_source=newsletter will have the rest of their session — including any conversions — attributed to your newsletter, not the paid ad. Internal UTM tagging inflates some channels while deflating the acquisition channels that actually brought the user to your site.
Does Google Ads auto-tagging conflict with UTM parameters?
When both are present, auto-tagging wins for channel classification. Google Ads auto-tagging appends a gclid parameter to ad click URLs, and GA4 uses the gclid to decode campaign data directly from Google's servers. If you also add manual UTM parameters to the same URL, the gclid-decoded values take precedence for the Traffic Acquisition channel dimensions. Your manual UTM values are still recorded as event parameters but don't control the session's channel assignment. For Google Ads campaigns, either rely entirely on auto-tagging or add manual UTMs that exactly mirror what auto-tagging would produce. Don't layer conflicting values.
How do I check if my UTM parameters are working in GA4?
Three methods. First: click your UTM-tagged link yourself and check GA4 DebugView (Admin → DebugView) in real time — you should see a session_start event with your campaign parameters attached. Second: in GA4 Reports, open Traffic Acquisition and check whether your campaign appears under the expected channel within 24–48 hours. Third: in GA4 Explorations, run a free-form report with "Session source / medium" and "Session campaign" as dimensions and filter for your campaign name to confirm the exact values GA4 received. If the campaign appears in a channel you didn't expect — or in Unassigned — compare your medium value against the channel rule list for that channel.
UTM Builder
Build UTM URLs That GA4 Gets Right
NiceLookingData's UTM builder validates your parameters against GA4's Channel Grouping rules before you launch — so you know the channel assignment before the campaign goes live, not after.
Open UTM Builder →Analytics consultant turned founder. After years running the same GA4 and GTM audits across client engagements, Ludde built the audit into a product — so the pattern-matching takes a minute, not a meeting. More about Ludde →
Run a free GA4 audit.
Connect your Google Analytics 4 property. Our auditor runs 61 checks and gives you an instant health score with a plain-English action plan.
