Guide
How to see UTM parameters in GA4
The tags are collected on the landing pageview. You look at session dimensions, not a report literally named “UTM.” This page is the click-path in the interface. How the fields are stored is GA4 UTM tracking.
Standard reports: Traffic acquisition
Open Reports → Acquisition → Traffic acquisition. The table often starts on Session default channel group. That is a bucket (Paid Search, Email, Unassigned), not the raw UTM. To see the tags:
- Open the dimension dropdown above the table.
- Switch to Session source / medium. You should see pairs like
google / cpcandfacebook / paid_social. - Add a secondary dimension, or switch primary to Session campaign, to see
utm_campaign.
Session source is utm_source. Session medium is utm_medium. Session campaign is utm_campaign. If you only look at channel group, a bad medium hides as Unassigned and you will think “UTMs are not working” when they are working and the value is just one GA4 does not group. Fix that in Unassigned traffic.
Explorations for term and content
Standard reports hide utm_term and utm_content more often than source and campaign. In Explore, create a free-form exploration. Dimensions to add:
- Session source, Session medium, Session campaign
- Session manual term (term)
- Session manual ad content (content)
Use a date range that includes your test. Filter to the campaign name you just shipped so the table is not the whole site. If those dimensions are empty but campaign is filled, you never set term or content — that is optional, not a bug.
First user vs session
GA4 also stores First user source, medium, and campaign: the tags on the hit that started the user. A later email click can change session campaign while first user stays the original paid click. For “what sent this visit,” use session. For “how did we acquire this user,” use first user. Mixing them in one slide is how two analysts both look correct and still fight. More on that split: GA4 campaign tracking.
A four-minute test that actually finishes
- Build a link in the campaign URL builder. Use a throwaway campaign name such as
qa-desk-2026-08-30so you can find it. - Open it in a private window. Accept or dismiss consent the way a real visitor would; a blocked tag collects nothing.
- If you have access: enable debug mode (GTM preview, or the GA Debugger extension) and watch Admin → DebugView for the page_view. Confirm campaign parameters on that event.
- Check Reports → Realtime for a coarse “someone is here.” Do not expect Traffic acquisition to update in two minutes.
- The next morning, filter Traffic acquisition to
qa-desk-2026-08-30. Confirm source, medium, campaign, and channel group.
Score the URL before you click it: UTM validator. If you only care whether the medium will group, use the channel checker first so you do not wait overnight to learn you used promo.
If the row is missing or wrong
| What you see | Usual cause | What to do |
|---|---|---|
| Nothing in DebugView | Tag did not fire (consent, blocker, wrong container) | Fix the tag. UTMs cannot report a hit that never ran. |
Session exists, campaign (not set) | Missing utm_campaign or query stripped | Decode the final URL in the decoder. |
| Channel group Unassigned | Medium not in a default rule | Change the medium. Do not wait for a custom channel unless you mean to. |
| Google Ads clicks, no google / cpc | gclid dropped or accounts not linked | Auto-tagging and the click ID inspector. |
| Looks like yesterday’s email | You are on First user, or last-click from a later session | Switch to session dimensions. Read ads vs GA4. |