utm.new
Google Analytics logo
Analytics

Google Analytics UTM parameters

Google Analytics is where UTMs were born and where they land. GA4 documents nine official utm_ parameters, applies a fixed rules engine to map them into channels, and gives Google Ads auto-tagging precedence over manual UTMs in most cases.

Updated

Google Analytics isn’t a UTM platform the same way Google Ads or TikTok Ads is — it doesn’t send UTM parameters in click URLs. It receives them. Every utm_ parameter in this catalog ultimately exists for one reason: to be read, parsed, and reported by an analytics tool. Historically, that tool has been GA.

That history goes back further than most marketers realise. UTM is short for Urchin Tracking Module, named after Urchin Software, the analytics company Google acquired in 2005 for around $30 million. By November 14, 2005, Google had rebranded Urchin’s cloud product as Google Analytics, and the parameter names — utm_source, utm_medium, utm_campaign, utm_term, utm_content — carried over verbatim. Twenty-one years later, every ad platform in the world is still feeding URLs that conform to a naming convention from a 1990s-era analytics startup.

There is one difference between winners and losers when it comes to web analytics. Winners, well before they think data or tool, have a well structured Digital Marketing & Measurement Model. Losers don’t.

Avinash Kaushik — Former Digital Marketing Evangelist, Google · Occam's Razor — Digital Marketing & Measurement Model

This page is the canonical reference for how those parameters are read, grouped, and reported in GA4. The other platform pages on utm.new explain how to produce the right UTMs for their respective ad systems. This page explains what happens after the click — and what GA4 can do with that data once it lands.

The nine official UTM parameters

Most third-party UTM articles list five or six parameters. Google’s own URL builders documentation lists nine.

ParameterWhat it sets in GA4Reported today?
utm_sourceSource dimension (e.g. google, newsletter4)Yes
utm_mediumMedium dimension (e.g. cpc, email, social)Yes
utm_campaignCampaign dimensionYes
utm_termManual term — typically a paid keywordYes
utm_contentManual ad content — used to differentiate creatives or links within a campaignYes
utm_idCampaign ID dimension. Used to link cost-data imports to session dataYes (cost-data linkage)
utm_source_platformThe platform responsible for directing traffic to a given Analytics propertyYes
utm_creative_formatThe type of creativeNot currently reported in GA
utm_marketing_tacticThe targeting criteria applied to the campaignNot currently reported in GA

The bottom two are the interesting ones. Google has reserved the parameter names in their official URL-builder spec but explicitly notes that neither currently surfaces in any standard GA report. Best read as a forward-looking signal: Google is preparing for a more granular campaign-reporting taxonomy, but until those dimensions ship, the parameters are inert. Nothing breaks if you set them; nothing is gained either.

Where the parameters surface

GA4 splits campaign reporting across two views with subtly different meanings:

  • Traffic acquisition uses the session-scoped source/medium — where the user came from on this particular visit. This is the report most marketers think of when they say “did my campaign drive traffic.”
  • User acquisition uses the first-touch source/medium — where the user came from when they first hit the site, regardless of how many times they’ve returned since.
  • Realtime shows source/medium live as the session is happening — the fastest way to confirm UTMs are landing on a fresh URL. Covered under Verification below.

Both Traffic and User acquisition read the same utm_* fields. They just freeze them at different points in the user lifecycle. A user who first arrived via your email/newsletter campaign and returned today via a cpc/google ad will appear under Email in User acquisition and Paid Search in Traffic acquisition.

GA4 Traffic acquisition report. Left sidebar shows the Acquisition section with Traffic acquisition selected. Main view shows the Session primary channel grouping for Apr 4 to May 1, 2026 — a trend chart on top and a table below listing channels (Organic Search, Direct, Unassigned, Paid Search, Paid Social, Organic Social, Paid Video, Organic Video) with session counts and engagement metrics.
Traffic acquisition · Reports → Acquisition → Traffic acquisition. The Session primary channel grouping resolves utm_source + utm_medium into the channels Google's rules engine produces.

The Realtime report shows source/medium live, which is how you confirm UTMs are actually landing on a fresh URL — covered under Verification below.

How GA4 receives the data: the Google Tag

The utm_* parameters on a URL only become useful once a tag on the landing page reads them and ships them to GA4. In modern Google deployments that tag is the Google tag (also written as the gtag.js snippet in source code).

Per Google’s official documentation:

“The Google tag is a single tag you can add to your website to use Google measurement and advertising products like Google Ads, Google Analytics, Campaign Manager, Display & Video 360, and Search Ads 360.”

That single-tag, multiple-destinations design has three implications worth understanding:

  • One snippet feeds many products. When a user lands on your page with a tagged URL, the Google tag captures the utm_* parameters once and forwards them to every linked destination. Add Google Ads conversion tracking later and it consumes the same UTMs without re-instrumentation.
  • GTM and gtag.js coexist. Google Tag Manager is a tag-management layer; the Google tag is what actually fires under it. If you deploy Google Ads or Floodlight tags through GTM, GTM auto-loads the Google tag library on your page even if you didn’t add it manually. A site using GTM doesn’t need a separate gtag.js snippet for GA4 — GA4 can be configured as a destination on the Google tag GTM creates.
  • Auto-tagging happens here. The “Google Ads auto-tagging” feature that appends gclid to outbound ad clicks is an opt-in setting on the Google tag’s connected Google Ads account, not a separate script. Removing the Google tag removes the GCLID handling along with everything else.

Default channel grouping

This is the rules engine that turns raw utm_source/utm_medium strings into the channel buckets you see in reports — Paid Search, Organic Social, Email, and so on. The rules are fixed and global; they’re not configurable at the property level (you can build Custom channel groups, but the Default group is owned by Google).

The channels and their qualification rules, per Google’s official documentation:

ChannelRule
DirectSource = (direct) AND Medium = (not set) or (none)
Cross-networkCampaign name contains cross-network
Paid SearchSource matches search-site list AND Medium matches ^(.*cp.*|ppc|retargeting|paid.*)$
Paid SocialSource matches social-site regex AND Medium matches the paid regex above
Paid VideoSource matches video-site list AND Medium matches the paid regex
Paid ShoppingSource matches shopping-site list OR Campaign matches ^(.*((^[a-df-z]|^)shop|shopping).*)$ AND Medium matches paid regex
DisplayMedium ∈ display, banner, expandable, interstitial, cpm
Organic SearchSource matches search-site list OR Medium = organic
Organic SocialSource matches social regex OR Medium ∈ social, social-network, social-media, sm, social network, social media
Organic VideoSource matches video-site list OR Medium matches ^(.*video.*)$
Organic ShoppingSource matches shopping-site list OR Campaign matches shopping regex
EmailSource OR Medium matches email|e-mail|e_mail|e mail
AffiliatesMedium = affiliate
AudioMedium = audio
SMSSource OR Medium = sms
Mobile Push NotificationsMedium ends with push OR contains mobile/notification, OR Source = firebase
ReferralMedium ∈ referral, app, link

Three things worth noticing in the rules above:

  • The “paid” regex is forgiving. ^(.*cp.*|ppc|retargeting|paid.*)$ matches cpc, cpm, cpv, ppc, retargeting, paid_social, paid-search, and anything else that contains cp or starts with paid. This is why the convention utm_medium=cpc works on Google Ads, Microsoft Ads, Pinterest, and TikTok with the same outcome — they all hit the same regex.
  • The Email rule is unusually permissive. It matches email, e-mail, e_mail, and e mail (with a literal space). Most rules in this engine require an exact match; Email is the rare exception that papers over common typos.
  • Source matters more than most people realise. Many channels (Organic Search, Organic Social, Organic Video, Organic Shopping) qualify if either the source matches a known list or the medium matches a known string. Google maintains a downloadable list of around 820 known sources mapped to their categories — bing.com is automatically Search, tiktok.com is automatically Social, and so on. You don’t need a perfect utm_medium if your utm_source is on the list. But you do need both if you want predictable Paid Search vs Organic Search separation, which is the whole point of using UTMs in the first place.

When traffic falls into Unassigned or (Other)

  • Unassigned = the source/medium combination matched no channel rule. Almost always a typo, an unrecognised source, or a missing medium on a non-Direct hit.
  • (other) = a cardinality-limit aggregation. GA4 caps the number of distinct values per dimension; everything past the cap gets bucketed into (other). This is independent of the channel grouping.

Unassigned is fixable by correcting your tagging. (other) is fixable by reducing the cardinality of your campaign names (don’t include timestamps, don’t append the user’s email, etc.).

GCLID auto-tagging vs manual UTMs

This is the single biggest source of confusion in the GA-meets-Google-Ads relationship.

But there’s a documented fallback that almost no third-party article quotes correctly. From the same help page:

In instances where the GCLID or DCLID cannot be used as intended, if any UTM parameter is present on the URL, Google Analytics will derive all cross-channel traffic source dimension values from UTM parameters, exclusively.

Google Analytics Help · Traffic-source dimensions, manual tagging, and auto-tagging

That caveat is why “defensive UTMs” are worth keeping on Google Ads URLs even though Google’s headline advice is to rely on auto-tagging. If a redirect strips the GCLID, an aggressive consent script blocks it, or the URL passes through a tracker that doesn’t preserve the parameter, GA4 won’t fall back to “missing data” — it’ll fall back to whatever UTMs are present. No UTMs means the session lands in (direct)/(none), which is the worst case.

Beyond reports: what GA4 does with the data

UTMs feed dimensions in reports, but the same parameters flow into three downstream systems that turn campaign data into something more actionable than a row in a spreadsheet.

Audiences

Any UTM dimension can be used as an audience-definition condition in Admin → Audiences. A “users who arrived from email/newsletter in the last 30 days” audience takes seconds to build and exports automatically to any linked Google Ads, Display & Video 360, or Search Ads 360 account for re-targeting. Because the audience is rebuilt continuously as new sessions arrive, the export stays fresh without manual sync.

Predictive audiences layer Google’s machine-learning models on top of the same UTM-derived behaviour. Per Google’s documentation, pre-built templates include “Likely 7-day purchasers,” “Predicted 28-day top spenders,” and “Likely 7-day churners.” The eligibility threshold is non-trivial: “In the last 28 days, over a seven-day period, at least 1,000 returning users must have triggered the relevant predictive condition (purchase or churn) and at least 1,000 returning users must not.” Below that bar the templates show as ineligible until traffic catches up.

Demographics and interests

GA4’s demographic reports (age brackets, gender, interest categories like Arts & Entertainment) come from Google Signals — Google associating event data with signed-in users who’ve enabled Ads Personalization. Per Google’s docs, the source is “data from users who sign in to Google. When Google signals data is available, Analytics associates event data it collects from users with the Google accounts of users who are signed in and consented.”

Two practical caveats:

  • Google Signals is opt-in at the property level. It doesn’t activate by default — toggle it under Admin → Data collection.
  • Identity-protection thresholds suppress small buckets. Google withholds demographic values when the bucket is too small to anonymise. For low-traffic properties or narrow date ranges, you’ll see (not set) in the gender or age dimension where the underlying count is below the privacy threshold.

Search Console linking

UTMs can’t capture organic-search keyword data — that information lives in Google Search Console, not in the URL the user clicks. Linking GSC to GA4 brings that organic-query layer into Analytics reports, alongside the UTM-derived paid and referral data, in two new reports: Google Organic Search Queries and Google Organic Search Traffic.

Per Google’s documentation:

  • Permissions needed: “To create a link, you need the Editor role on the Google Analytics 4 property, and you need to be a verified owner of the Search Console property.”
  • Data retention: “Search Console keeps data for the last 16 months. As a result, reports in Analytics also include a maximum of 16 months of data.”
  • One-to-one mapping: A web data stream can be linked to only one Search Console property, and vice versa.

The integration takes 24–48 hours to start populating data. Once live, organic-search performance shows up alongside paid Search and direct traffic in the same Acquisition reports — making side-by-side comparison of branded paid vs branded organic actually possible inside one tool.

Limitations and gotchas

  • Case sensitivity is real. utm_medium=CPC does not equal utm_medium=cpc in most reports. The default channel grouping regex is case-insensitive in some places (the source-list match is, the medium regex usually is) but reporting dimensions like Source and Medium preserve the original case. Two campaigns differing only in case will appear as two rows in your reports. Lowercase everywhere is the only safe convention.
  • Missing utm_medium drops to Direct. If a URL has utm_source=newsletter but no utm_medium, the session is classified as (direct)/(none) rather than as Email or Newsletter. Always set source and medium together.
  • Custom channel groupings are forward-only. If you create a Custom channel group in GA4, it applies from the moment of creation onward — historical data in the existing reports is not retroactively re-classified. This is unlike UA, where Custom Channel Groupings could be applied retroactively.
  • The 820-source list is not public-API documented. Google publishes it as a downloadable spreadsheet linked from the Default channel group help page, but the list isn’t versioned and updates without notice. If bing.com was on the search list yesterday and gets recategorised tomorrow, your Paid Search numbers shift quietly.
  • No GA4 dimension exists yet for utm_creative_format or utm_marketing_tactic. Setting them today does nothing visible. They are documented, accepted, and silently ignored.

Verification

Before assuming UTMs are landing correctly, prove it. The reliable order:

  1. Realtime — confirms the URL is reaching GA at all and the parameters parse.
  2. DebugView — confirms each parameter on the page_view event individually.
  3. Traffic acquisition — confirms the channel grouping after the session has settled (typically 24–48 hours after the click).

Realtime reportReports → Realtime in GA4. Visit the tagged URL in an incognito window and watch for your session to appear with the expected Source/Medium. If you see (direct)/(none), the parameters aren’t reaching GA. Check for redirects, hash-routing apps that don’t trigger a page_view, or consent-block scripts.

DebugViewAdmin → DebugView. Requires GA Debugger Chrome extension or debug_mode enabled in your tag config. Shows individual events as they fire, including the page_view event with its full set of parameters. The page_location parameter on page_view should contain your full URL with all UTMs intact. If the URL in DebugView has UTMs stripped, the issue is upstream of GA — a redirect, consent script, or analytics wrapper is the culprit.

Traffic acquisition + Source/Medium dimension — for any session older than the Realtime window, this is the canonical verification. Set the date range tight, filter by your campaign, and confirm the source/medium and channel match what you expect.

Common problems

  • My campaign is showing in Unassigned. Almost always a typo in utm_medium. Run your medium values through the rules table above. Common offenders: social-paid instead of paid-social, e-mail works but Email (capital E) sometimes doesn’t depending on the report.
  • My Google Ads campaign is showing as (direct)/(none). GCLID is being stripped before it reaches your landing page. Check for redirects (especially link-shorteners, marketing-automation wrappers, or AMP cache redirects), hash-based routes, or consent-mode scripts blocking the parameter. Add defensive UTMs as a fallback.
  • My UTMs and Google Ads are reporting different campaign names. Auto-tagging wins by default in GA4. The campaign name you see in your GA4 reports for Google Ads traffic is pulled from the auto-tagged value, not from your utm_campaign. If you want them to match, either turn off auto-tagging (not recommended) or align your Google Ads campaign names with your UTM scheme.
  • I added utm_id and nothing changed in my reports. utm_id populates the Campaign ID dimension, which most default reports don’t show. Add it as a secondary dimension in Traffic acquisition, or use it as the join key for ad-cost data import — that’s its primary purpose.
  • My traffic is in (other). Cardinality limit. Some campaign-level dimension (most often utm_campaign or utm_content) has too many distinct values. Reduce variation — drop timestamps, drop user IDs, drop anything that creates a new unique string per session.

Frequently asked questions

Last reviewed
How many UTM parameters does Google Analytics actually support?

Nine. Google's URL builders documentation lists utm_source, utm_medium, utm_campaign, utm_term, utm_content, utm_id, utm_source_platform, utm_creative_format, and utm_marketing_tactic. The last two are documented but explicitly noted as not currently reported in GA — Google has reserved the parameter names without yet surfacing them in any report.

Why isn't my UTM showing up in GA4?

Most common cause: a typo in utm_medium. GA4 matches medium values against a fixed regex rules engine (e.g. ^(.*cp.*|ppc|retargeting|paid.*)$ for paid channels, email|e-mail|e_mail|e mail for Email). Anything that doesn't match a rule lands in Unassigned. Other common causes: missing utm_medium (drops the session into Direct), case-sensitivity (CPCcpc in some contexts), or Google Ads auto-tagging overriding your manual UTMs.

Does GA4 actually use utm_id?

Yes — but mostly for cost-data import, not for surfacing in standard reports. Google's documentation describes utm_id as the field used to link uploaded ad-cost data with session data. It populates a Campaign ID dimension in GA4, but most reports still default to showing campaign name. Set it when you import non-Google ad spend, or when you want a stable ID across name changes.

Why is my Google Ads traffic showing as (direct)/(none)?

Auto-tagging probably failed to land. GA4 prioritises auto-tagged GCLID values over manual UTMs — but Google explicitly states that 'in instances where the GCLID or DCLID cannot be used as intended, if any UTM parameter is present on the URL, Google Analytics will derive all cross-channel traffic source dimension values from UTM parameters, exclusively.' If you see (direct)/(none), the GCLID is being stripped (often by a redirect, a meta refresh, or an aggressive consent script) and you have no UTM fallback in place.

Should I add UTMs to my Google Ads URLs if auto-tagging is on?

Google's recommendation is no — auto-tagging carries richer Google Ads data than manual UTMs, and adding both can cause discrepancies. The exception: defensive UTMs as a fallback in case GCLID is stripped (see above). If you do add them, set utm_source=google, utm_medium=cpc, and use ValueTrack for the rest — they'll only be used if the GCLID fails.

What's the difference between Traffic acquisition and User acquisition reports?

Traffic acquisition uses the session-scoped source/medium — where the user came from this visit. User acquisition uses the first-touch source/medium — where the user came from when they first hit your site. UTMs feed both, but you'll see different values in each report for any user who returns through a different channel.

Are utm_creative_format and utm_marketing_tactic worth setting?

Probably not yet. Google has reserved both names in their official URL builders spec but flags both as not currently reported in GA. They likely signal where Google is taking campaign reporting next, but until they surface in a report, they're inert. No harm in setting them; no benefit either.