Why are my UTM parameters not showing up in Google Analytics?
UTM parameters usually fail to show in Google Analytics because a redirect strips them, the visitor declined cookies, the data hasn't processed yet, the tags sit after a #, or the GA4 tag never fires on the landing page. Check the final URL first, then Realtime, then consent and tag setup.
- Redirect strips the query string.
- Consent declined or not yet given.
- Processing delay.
- Tags after a
#fragment. - GA4 tag missing on the landing page.
- Case or spelling differences.
- Missing
utm_campaignorutm_medium. - Auto-tagging and manual tags conflict.
- Looking at the wrong report or dimension.
- The tagged link's final URL keeps the tags.
- The visitor gives consent.
- The GA4 tag fires.
- GA4 processes the data.
- The campaign becomes visible in reports.
1. A redirect strips the query string
Open your tagged URL and check the address bar after the page loads. If the utm_ values are gone, a redirect dropped them. Common ones: http to https, non-www to www, trailing slash rules, old page redirects and shorteners. Fix: configure each redirect to pass the query string through.
2. Consent was declined or never given
With Consent Mode, GA4 doesn't set cookies until the visitor accepts. Declined visits may appear only as modelled data, or not at all. Fix: test with consent accepted, and check the banner isn't blocking the tag outright. See Google's Consent Mode docs.
3. The data hasn't processed yet
Realtime shows visits within minutes. Standard reports can take a day or more. Fix: test in Realtime or DebugView, then check standard reports the next day.
4. The tags are after a #
In example.com/#/pricing?utm_source=x, everything after # is a fragment, and GA4 doesn't read UTMs there by default. This trips up single-page apps. Fix: put the query before the hash: example.com/?utm_source=x#/pricing.
5. The GA4 tag is missing on the landing page
Campaign pages built outside the main site, such as a landing page builder or a new AI-built page, often lack the tag. Fix: open the page with GTM preview or Tag Assistant and confirm a page_view fires.
6. Case or spelling differences
"Facebook", "facebook" and "fb" are three sources in GA4. Your campaign is there, split three ways. Fix: lowercase everything and use the UTM builder.
7. Missing campaign or medium
A link with only utm_source can show "(not set)" for campaign, and an unusual medium can land in Unassigned in the default channel group. Fix: always set source, medium and campaign, and use mediums GA4's channel rules recognise.
8. Auto-tagging and manual tags conflict
On Google Ads, auto-tagging (gclid) and manual UTMs can disagree. By default GA4 favours the auto-tagged data for Google Ads clicks. Fix: keep auto-tagging on and check GA4's manual tagging override setting if you need your UTMs to win.
9. You're looking at the wrong report
Session-scoped dimensions ("Session campaign") and user-scoped dimensions ("First user campaign") answer different questions. A returning visitor's new campaign won't appear in the first-user view. Fix: use session dimensions for campaign checks.
Fixed everything above and still need the source on each lead? Pre-register for Trakt and every form submission keeps its campaign.
Diagnosis table
| What you see | Most likely cause | Check |
|---|---|---|
| Nothing in Realtime | Tag missing, consent declined | Tag Assistant, accept consent |
| Visit shows as Direct | Redirect strip, fragment | Final URL in the address bar |
| Campaign "(not set)" | Missing parameter | The tagged link itself |
| Same campaign split | Case or spelling | Lowercase naming |
| Shows in Realtime, not reports | Processing | Wait a day |
How to check if your UTM parameters are working has the full test sequence. For leads arriving as Direct in the CRM, see why leads show as direct.
Why analytics alone breaks in practice (and how Trakt helps)
Even with GA4 perfect, analytics is a report about sessions. It isn't the record of where each lead came from, and it won't fix a CRM full of "Direct".
How Trakt closes the gap
Trakt captures UTMs on every form automatically and stores each lead with its source, so the campaign stays on the lead no matter what the GA4 report shows. The leads-by-source overview shows which channel produced leads and revenue. Trakt keeps the first touch, links visits across devices, and syncs source and revenue into your CRM.
GA4 alone vs. GA4 plus Trakt, by requirement
| Requirement | GA4 alone | With Trakt |
|---|---|---|
| Campaign on sessions | Yes | Yes |
| Campaign on each lead | No | Yes |
| Revenue by source | Needs CRM work | Won deal value by source |
| Redirects that keep the query | Same either way | Same either way |
FAQ
Why is my UTM campaign not showing in GA4?
Most often a redirect strips the tags, the visitor declined consent, or the data hasn't processed yet. Check the final URL, then GA4 Realtime with consent accepted.
Why do my UTM visits show as direct in Google Analytics?
The UTMs didn't reach GA4, usually because a redirect removed them or they were placed after a #. Without the tags, GA4 can't attribute the session and files it as Direct.
How long until UTM data appears in GA4 reports?
Realtime shows it within minutes. Standard reports can take a day or more. Test in Realtime or DebugView first.
Does consent mode stop UTM tracking in GA4?
It can. If a visitor declines analytics cookies, GA4 doesn't record the visit normally, so their UTMs won't appear in standard reports. Test with consent accepted.
Why does my campaign show as (not set) in GA4?
The link probably had no utm_campaign, or a tag setting overwrote it. Always include source, medium and campaign on every tagged link.
How can I check all of these at once?
Run a site-wide attribution audit. Trakt's free tool checks GA4, consent, redirects, form capture and more, and scores the result out of 100.
What to do first
Paste your tagged link into a private window and look at the address bar. That one check rules out causes 1 and 4 in five seconds. Then open GA4 Realtime with consent accepted.


