linkutm Logo

UTM Not Showing in GA4? The 6 Errors That Break Your Tagged Campaigns

Bhargav Dhameliya
Bhargav Dhameliya
June 19, 2026
5 min read
utm not showing in ga4 featured

You tagged every link. Source, medium, campaign, all filled in. Then you open GA4 a day later and the traffic sits under “direct / none” or “(not set).” Your campaign is invisible.

I have watched this happen to good marketers dozens of times. The frustrating part? The problem is almost never GA4. It is the tag itself. One small mistake in how the link was built, and GA4 throws the data away.

Here’s the thing. There are really only six construction errors that cause this. Each one has a clear symptom and a 2-minute fix. This guide walks through all six, shows you how to spot which one you hit, and how I stop them from happening in the first place.

If you are seeing “Unassigned” instead, or “(not set)” on traffic you did not tag, that is a different problem with server-side causes. I will point you to the right fix for those at the end. This article is about the tags you built yourself.

The 6 UTM Errors at a Glance

Before the deep dives, here is the quick map. Find your symptom, jump to the fix.

# The error What GA4 shows Quick fix
1 Missing utm_medium Unassigned or (not set) Always include source AND medium
2 Inconsistent capitalization Two rows for one source Lowercase everything
3 Broken query string syntax direct / none Fix the ? and & order
4 UTMs after the # fragment direct / none Put UTMs before the #
5 Redirect or shortener strips tags direct / none Tag the final URL
6 Typo in a parameter name direct / none Spell the keys exactly

Real talk: five of these six produce the exact same symptom (direct / none). So the symptom alone will not tell you which error you made. You have to inspect the actual link. More on that in the diagnosis section.

These tags are built from UTM parameters, the five snippets you add to a URL to tell GA4 where a click came from. When one is malformed, GA4 cannot read the campaign, so it falls back to direct.

Diagram of a tagged UTM URL flowing from click to GA4 showing six points where campaign data breaks

Error 1: You Skipped utm_medium

The most common error is leaving out utm_medium. Marketers add utm_source and utm_campaign, feel done, and ship the link.

GA4 needs both source and medium to attribute a session. If medium is missing, GA4 cannot slot the traffic into a channel. It lands in “Unassigned” or shows “(not set)” on the medium dimension.

Here is a broken link and the fix:

Broken: https://linkutm.com/pricing?utm_source=newsletter&utm_campaign=june_launch
Fixed: https://linkutm.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=june_launch

The honest limitation: adding medium is not enough on its own. The value has to match what GA4 expects for channel grouping. If you write utm_medium=newsletter instead of email, GA4 still cannot map it to the Email channel, and it shows up as Unassigned traffic in GA4. Use standard medium values: email, social, cpc, referral.

Error 2: Your Capitalization Is Inconsistent

GA4 is case sensitive. Facebook, facebook, and FaceBook are three different sources to GA4. So one campaign gets split into three rows, and none of them tells the full story.

This is not technically “broken” data. The traffic still attributes. But your reporting fragments, and that is worse in some ways, because the numbers look real while being wrong.

Monday:   ?utm_source=Facebook&utm_medium=Social
Tuesday:  ?utm_source=facebook&utm_medium=social

Those two links report as separate sources and separate mediums. Your Facebook total is now scattered across four rows.

The fix is simple: lowercase everything, always. The harder fix is getting your whole team to do it every single time. That is why a documented standard matters. Lock in a documented UTM naming convention so “lowercase only” is a written rule, not a hope.

Error 3: Your Query String Syntax Is Broken

A URL can have exactly one question mark. Everything after it is the query string, and parameters are joined by ampersands. Break that structure and GA4 reads nothing.

The three syntax mistakes I see most:

  1. Two question marks. page?ref=home?utm_source=... The second ? should be &.
  2. A space in a value. utm_campaign=june launch breaks the URL. Use june_launch or june-launch.
  3. A parameter before the question mark. Putting utm_source in the path instead of the query string.
Broken: https://linkutm.com/pricing?ref=nav?utm_source=twitter&utm_medium=social
Fixed: https://linkutm.com/pricing?ref=nav&utm_source=twitter&utm_medium=social

If you build links by hand, this is where most errors creep in. I wrote a full breakdown of the correct query string syntax with the rules for ?, &, and #. The limitation of manual building: even when you know the rules, copy-paste introduces stray characters you will not notice by eye.

Anatomy of a UTM-tagged URL labeling the query string, ampersand separators, and hash fragment

Error 4: You Put UTMs After the # Fragment

This one is sneaky because the link looks fine. The hash symbol (#) marks a fragment, and anything after it is not sent to the server or to GA4 in the way your parameters need.

If your UTMs sit after the #, GA4 never sees them. The session shows as direct / none.

Broken: https://linkutm.com/pricing#section?utm_source=email&utm_medium=newsletter
Fixed: https://linkutm.com/pricing?utm_source=email&utm_medium=newsletter#section

UTM parameters always go before the fragment. The fragment goes last.

The gotcha: some single-page apps and site builders auto-generate links with the fragment in the middle. If your CMS does this, you cannot always fix it in the link, and you may need to handle it in your tag setup. That is the one case here where the fix lives outside the URL.

Error 5: A Redirect or Shortener Stripped Your Parameters

You tag a link, then run it through a redirect or a cheap link shortener, and the UTMs vanish on the way to the final page. GA4 sees a clean, untagged URL. Direct / none again.

Not every shortener does this. Good ones preserve query parameters and pass them to the destination. Some older redirect setups and a few free shorteners drop everything after the domain.

The rule I follow: tag the final destination URL, then shorten. And test the short link before it goes live. Click it, watch where you land, and check the address bar for your UTMs.

This is exactly why I built tagging and shortening into one step at linkutm. When you create a link with linkutm’s UTM builder, the short link carries the parameters through to the destination, so the redirect never eats your tracking. The trade-off: you still have to point the link at the right final URL. The tool cannot guess your destination for you.

Error 6: You Have a Typo in a Parameter Name

GA4 only reads the exact keys: utm_source, utm_medium, utm_campaign, utm_term, utm_content. Misspell the key and GA4 ignores it completely. Not the value, the key.

Broken:  ?utm_sorce=google&utm_medium=cpc&utm_capaign=brand
Fixed:   ?utm_source=google&utm_medium=cpc&utm_campaign=brand

utm_sorce and utm_capaign are invisible to GA4. With the source key misspelled, GA4 records no source at all, and the whole session collapses to direct / none.

These typos are brutal because the link still works for the user. It loads the right page. Nothing looks wrong until the data does not show up days later, long after the campaign is live. The limitation of catching this manually: by the time you notice, you have already lost the data for every click so far. You cannot backfill it.

How to Diagnose Any UTM Problem in 5 Minutes

Stop guessing which error you hit. Here is the exact process I use to find the broken link.

  1. Copy the live link. Pull the actual URL from the email, ad, or post, not the one in your planning doc. They drift apart more than you would think.
  2. Read it left to right. Check for one ?, & between parameters, lowercase values, correct key spelling, and UTMs before any #.
  3. Open GA4 Realtime. Click your own link, then watch Reports, Realtime. Your session should appear with the right source and medium within seconds.
  4. Use DebugView for detail. If Realtime is unclear, DebugView shows the exact campaign parameters GA4 received on the page_view event.
  5. Fix, re-test, then ship. Correct the link, click it again, and confirm GA4 reads it before you relaunch.

The fastest version of this: paste the link into a builder and rebuild it cleanly. I walk through how to verify the tagged link in GA4 step by step, including the Realtime and DebugView checks.

One honest caveat: Realtime testing shows your own click instantly, but it does not prove the link works for every browser. Safari and ad blockers can still drop sessions for reasons that have nothing to do with your tag.

GA4 Realtime report showing a test session with the correct source and medium after a UTM test click

When It Is Not a UTM Error

Sometimes the tag is perfect and the data is still wrong. That means the cause is downstream, not in your link. Do not waste an hour rebuilding a tag that was never broken.

These are not construction errors, so they are out of scope here, but here is where to go:

  • Traffic you never tagged showing as (not set). That points to server-side and platform causes. See the other server-side reasons GA4 shows (not set).
  • Tagged traffic landing in Unassigned. Usually a channel-grouping mismatch on your medium values, covered in the unassigned-traffic fix linked above.
  • Counts that look low across the board. Often consent banners, ad blockers, or Safari tracking limits, not UTMs at all.

The dividing line is simple. If you can see your UTMs in the live URL and GA4 still drops them, suspect the platform. If the UTMs are missing or malformed in the URL, it is one of the six errors above.

How I Prevent All Six Before They Happen

Diagnosing broken links is reactive. By the time you catch the error, clicks are already lost. So the real win is preventing the mistake at creation.

Three controls kill all six errors at the source:

  • Naming enforcement. Lowercase and no-spaces applied automatically, so Errors 2 and 3 cannot happen. The builder will not let a space or a capital through.
  • Templates. Reusable presets for source and medium mean you never retype utm_medium=email and never misspell the key, which stops Errors 1 and 6.
  • One-step tag and shorten. Tagging and shortening together means no redirect strips your parameters, handling Error 5.

Before any link goes live, I still recommend you run them through a UTM validator to catch anything a human missed. The honest limitation: no tool can fix a link that already shipped untagged. Prevention only protects links you build going forward, not the campaign you launched last week.

Broken hand-built UTM link versus a clean enforced UTM link with the six errors fixed

Frequently Asked Questions

Why is my UTM showing as direct / none in GA4?

Direct / none means GA4 could not read a valid source from your link. The usual causes are a typo in a parameter key, a broken query string, UTMs placed after the # fragment, or a redirect that stripped the tags. Inspect the live URL: if the UTMs are missing or malformed there, that is your answer.

Why is my UTM not tracking in GA4 even though the link works?

A link can load the right page while still being invisible to GA4. The page loads using the path and domain, but GA4 reads the campaign from the query string keys. If a key is misspelled or sits after a #, the page still works but the tracking does not. Always test the link in GA4 Realtime, not just in your browser.

How long does UTM data take to show in GA4?

Realtime shows your tagged session within seconds, so use it to confirm a link works. Standard reports can take 24 to 48 hours to fully process. If a link appears correctly in Realtime but never lands in standard reports, the tag is fine and the issue is processing or filtering, not your UTM.

Can a # in my link stop GA4 from reading my UTMs?

Yes. Anything after the # is a fragment, and GA4 does not read campaign parameters placed there. If your UTMs sit after the #, the session shows as direct / none even though the link opens the right page. Put UTM parameters before the #, and let the fragment come last.

How do I know if a redirect stripped my UTM parameters?

Click the link and watch the final address bar after the page settles. If the utm_ tags are gone, a redirect or shortener dropped them on the way to the destination. Tag the final URL first, then shorten, and use a shortener that carries query parameters through to the landing page.

Fix It Once, Then Stop It Forever

Broken UTM data in GA4 almost always traces back to one of six construction errors: a missing medium, inconsistent capitalization, broken syntax, UTMs after the fragment, a stripping redirect, or a typo in a key. Each has a clear symptom and a fast fix.

Start here:

  1. Pull your live link and read it left to right.
  2. Test it in GA4 Realtime with your own click.
  3. Rebuild it cleanly if anything is off.
  4. Move your link creation into a builder that enforces the rules.

The cheapest fix is the one you never have to make. Build your next campaign link with linkutm’s UTM builder and let naming enforcement and templates stop all six errors before a single click is lost.

Bhargav Dhameliya

About Bhargav Dhameliya

Share this article

Ready to track your campaigns better?

Join thousands of marketers who use linkutm to build, track, and manage their marketing campaigns with ease.

Get Started for Free