The reason people search how to see UTMs in GA4 is that Google renamed everything. There is no dimension called “utm_content” in the interface, and hunting for one is a dead end. The data is there — it is just filed under names that do not resemble the parameters you put in the link.
Here is the mapping, the reports that expose it, how to build a proper campaign exploration, and how to verify a tagged link before you send it to 40,000 people.
The fast answer
Go to Reports → Acquisition → Traffic acquisition. Change the primary dimension dropdown from “Session default channel group” to Session campaign, Session source, or Session source / medium. That covers utm_campaign, utm_source, and utm_medium in about fifteen seconds.
For utm_content and utm_term you need the secondary dimension dropdown or an exploration, because those two are not offered as primary dimensions in the standard report. Which brings us to the naming.
The dimension names GA4 uses
Learn this mapping once and the rest of the interface stops being confusing:
utm_source→ Session source (or First user source)utm_medium→ Session mediumutm_campaign→ Session campaignutm_term→ Session manual termutm_content→ Session manual ad contentutm_id→ Session manual campaign IDutm_source_platform→ Session source platformutm_creative_formatandutm_marketing_tactic→ available as their own dimensions where populated
The word “manual” in those names is deliberate. It signals values you set by hand in a URL, as distinct from values Google derived from auto-tagging on Google Ads. If a dimension has “manual” in it, it is reading your UTM parameter directly.
One more place UTMs survive: the landing page dimension. GA4 offers both “Landing page” and “Landing page + query string”, and the second one retains the full URL including your parameters. That is occasionally the fastest way to confirm a specific tagged link was hit, particularly when you are debugging a single send rather than analyzing a campaign.
User-scoped, session-scoped, and event-scoped versions
Nearly every campaign dimension exists in three flavors, and picking the wrong one produces numbers that look wrong but are not.
- First user — the campaign that first ever brought this person to the site. Used in the User acquisition report. Good for understanding acquisition, useless for evaluating last week’s newsletter.
- Session — the campaign that started this specific session. Used in Traffic acquisition. This is what you want for campaign reporting almost every time.
- Event-scoped (labeled simply “Campaign”, “Source”, “Medium”) — the campaign attributed to an individual event. Useful in explorations when you want key events tied precisely to a touchpoint.
Mixing scopes in one table is the fastest way to produce a report that does not reconcile with itself. Pick a scope and stay in it.
A concrete example of the trap. You send a newsletter, 4,000 people click, and User acquisition shows 300 sessions from that campaign. Nothing is broken — 3,700 of those readers were acquired months ago through organic search, so first-user attribution credits organic. Traffic acquisition, using session scope, will show the full 4,000. Same data, different question.
Building a campaign exploration
Standard reports get you 80% of the way. For the full UTM picture, including content and term, build a free-form exploration once and reuse it:
- Open Explore → Free form.
- Import dimensions: Session campaign, Session source, Session medium, Session manual ad content, Session manual term.
- Import metrics: Sessions, Engaged sessions, Engagement rate, Key events, Total revenue if you run ecommerce.
- Drag Session campaign to Rows, then nest Session source / medium beneath it, then manual ad content below that.
- Add Sessions and Key events to Values. Sort by Key events, not Sessions — volume without outcomes is not a result.
- Save it and give it a name your team will recognize.
Two practical notes. Explorations can be sampled on high-volume properties, and the interface tells you when sampling is applied — check that indicator before you quote a precise number. And if a nested row shows “(not set)”, that means the parameter was simply absent on those links, not that GA4 lost it.
Checking a link before you send it
Never trust a UTM until you have watched it arrive. The verification loop takes three minutes:
- Build the link and open it in a browser with your GA4 debug setup active, or with the Google Analytics Debugger extension enabled.
- Open DebugView in GA4 and find your session. Click the session_start event and inspect the campaign parameters attached to it.
- Alternatively, open Realtime and add a comparison filtered to your campaign name. If your visit appears, the tagging resolves.
Do this for one link per campaign, not per link. It catches the errors that matter — casing, missing medium, truncated values — before they are baked into a send.
UTM hygiene that keeps reports readable
Most unreadable campaign reports are a naming problem, not a GA4 problem:
- Lowercase everything. GA4 treats
Emailandemailas separate values, and the default channel rules expect lowercase mediums. Mixed casing splits one campaign across three rows and can dump sessions into Unassigned. - Use recognized mediums. cpc, ppc, paid, email, affiliate, social, referral, display. Put your creative description in utm_content, not utm_medium.
- Never UTM-tag internal links. Tagging a link between two of your own pages starts a brand new session and destroys the original attribution. This is the single most damaging UTM mistake.
- Never tag Google Ads manually while auto-tagging is on. Let auto-tagging do its job.
- Use one link builder. A shared spreadsheet with dropdown-constrained values beats good intentions.
- Keep campaign names stable across sends. “spring-sale” in March and “Spring Sale 2026” in April are two campaigns as far as GA4 is concerned, and you will never see the combined result without manual work.
- Use utm_id if you need to join GA4 campaign data to a spend figure from another system. It exists precisely for that reconciliation and almost nobody uses it.
When UTMs do not show up
A handful of specific causes, each with a different fix:
- Redirects stripping parameters. A redirect chain or a link shortener that drops the query string means GA4 never sees the UTMs. Test the final landing URL, not the link you pasted.
- Tag fired before the URL was read. Rare, but real in single-page applications where the router rewrites the URL early.
- Consent declined. Modeled sessions often carry no campaign values, which shows as “(not set)” or Unassigned.
- Wrong scope selected. Looking at First user campaign for a returning audience will show the campaign that acquired them years ago, not yesterday’s email.
- Data thresholding. Low-volume campaign rows can be withheld when identity signals could identify individuals, so small sends may show incomplete breakdowns.
Getting campaign data out of GA4
For recurring reporting, three options beyond the interface. Export any exploration to CSV or Google Sheets directly. Connect Looker Studio to the GA4 data source and build a campaign dashboard using the same dimension names above. Or enable BigQuery export, where the raw campaign parameters sit on each event with no cardinality limits and no sampling.
Whichever route you take, remember what campaign data does not cover. UTMs describe traffic you tagged. Organic search arrives untagged by definition, and GA4 does not report search queries at all — Search Console is the source for what people actually searched before clicking.
SEO Rocket connects Search Console and GA4 as ground truth for your own site and shows that measured data beside third-party estimates, clearly labeled so an estimated traffic figure is never mistaken for a recorded session. It does not replace GA4 or implement your tagging — the UTM discipline above is still yours to enforce. It just means the campaign-tagged picture and the untagged organic picture stop living in different tools when you are deciding where the next month of effort goes.