[Analytics Implementation](/categories/analytics-implementation) November 3, 2026

# Missing UTM parameters in GA4: how to find the cause

Find where campaign UTMs get lost before GA4 reports them: the landing URL, the first hit, the tag and consent timing, the values, and the report you read.

![](/images/64994225b80181b90166ae3e_unnamed-modified.avif)

**[Mariona Martí](/author/mariona-marti)** Digital Marketing Specialist

5 min read · 999 words

When UTM parameters go missing in GA4, they are lost in one of five places: the URL that actually loads, the first hit GA4 receives, the moment the tag fires, the values themselves, or the report you are reading. Check them in that order. Each step either finds the cause or rules out everything before it, so you never debug a report for a problem that happened at the redirect.

## Three symptoms that look the same

“Missing UTMs” shows up in GA4 in three ways, and each points somewhere slightly different:

| What you see | What it usually means | Where to start |
| --- | --- | --- |
| Campaign visits counted as Direct or Referral | The UTMs never reached GA4 | Steps 1 to 3 |
| `(not set)` in source, medium, or campaign | Some parameters arrived, others didn’t | Step 4 |
| Sessions in Unassigned | The values arrived but match no channel rule | Step 4 |

Google is explicit about the second one: “Missing UTM parameters will result in (not set) values being present in reporting.” And about the third: Unassigned “is the value Analytics uses when there are no other channel rules that match the event data.” Both come from its documentation on [URL builders](https://support.google.com/analytics/answer/10917952) and the [default channel group](https://support.google.com/analytics/answer/9756891). If your problem is `(not set)` beyond campaigns, the [(not set) guide](/blog/what-is-not-set-in-google-analytics) covers the rest; for Unassigned in general, see [unassigned traffic](/blog/what-is-unassigned-traffic-in-google-analytics).

## Step 1: check the URL that actually loads

Click the real ad, email, or social link, not the URL in your spreadsheet, and look at the address bar once the page has loaded. Then open the browser’s Network panel, reload, and read the redirect chain.

The query string is dropped most often by:

-   A redirect from `http` to `https`, from the bare domain to `www`, or from an old path to a new one, written without passing the query string along.
-   A link shortener, an email click tracker, or an app link that rebuilds the URL.
-   A malformed link: a `#` before the `?`, a second `?` instead of `&`, or spaces and characters that were never encoded.

If the UTMs are gone from the final URL, nothing in GA4 can recover them. Fix the redirect or the link and stop here.

## Step 2: check what GA4 received

If the final URL has the UTMs, check the hit. Open DebugView, or filter the Network panel by `collect`, and find the first `page_view` of the session. Its `page_location` parameter should carry the full URL, `utm_` parameters included.

That is also where Google stores them: UTM parameters are left out of the landing page and page path dimensions and populated in the Page location dimension, per the same [URL builders documentation](https://support.google.com/analytics/answer/10917952). If `page_location` has the UTMs, the collection is fine and the cause is in step 4 or 5.

## Step 3: check that the tag fires on the landing page

If the URL had the UTMs but the first hit doesn’t, the GA4 tag fired too late. The first hit GA4 sees comes from a later page, whose URL has no campaign parameters, so the session starts without them.

Three common reasons:

-   **Consent.** With basic Consent Mode, Google tags wait for the visitor’s choice. If the visitor accepts on the second page, the first hit carries the second page’s URL. Test the landing page in each consent state you support.
-   **Triggers.** A GA4 tag on a trigger that doesn’t fire on that template, or fires only after an interaction.
-   **Single-page apps.** A route change before the tag loads, or a router that rewrites the URL and drops the query string.

The [GTM debugging guide](/blog/gtm-debugging-guide) walks through Preview Mode and the Network panel for this check.

## Step 4: check the values GA4 got

If the hit carries the UTMs, read the values as GA4 reads them:

-   **Case.** Google’s documentation says “Parameter values are case sensitive, e.g. `utm_source=google` is different from `utm_source=Google`.” Two spellings become two rows.
-   **The three that matter.** Google says you “should always use `utm_source`, `utm_medium`, and `utm_campaign`.” A link with a campaign but no medium arrives with a `(not set)` medium.
-   **Medium against the channel rules.** Channels are assigned by rules on source and medium. Paid Search, for example, needs a search source and a medium that matches `^(.*cp.*|ppc|retargeting|paid.*)$`. A made-up medium such as `newsletter-blast` or `influencer` matches no rule and lands in Unassigned. The channel rules themselves “aren’t case sensitive and can’t be edited.”

A shared [naming convention](/blog/campaign-naming-convention) prevents most of this; the [UTM tracking audit](/blog/utm-tracking-audit) is the clean-up when it has already happened.

## Step 5: check the report you are reading

Sometimes nothing is missing and the report answers a different question:

-   **Scope.** The Traffic acquisition report groups sessions by session source and medium; User acquisition groups users by their first source. A returning visitor who first came from organic search shows as organic in User acquisition even when today’s session came from your campaign.
-   **Processing time.** Google lists a daily processing time of 12 hours for standard properties and says [processing can take 24 to 48 hours](https://support.google.com/analytics/answer/11198161). Yesterday’s campaign can look empty in standard reports while DebugView and Realtime already show it.

## Catch it before the report does

Every step above is a manual check you run after someone notices a gap. By then the campaign has been running for days, and the bidding has been learning from the wrong data.

Trackingplan reads the hits your site sends to GA4 and to your ad platforms on real traffic. It flags UTMs that break your [campaign naming rules](/docs/naming-conventions-monitoring), sources and mediums with duplicate or badly formatted names, and the drop in campaign traffic when a redirect or a tag change starts losing them. The issue arrives with the hits behind it, so you start at the step that failed, not at step 1.

The order is the fix: URL, hit, tag, values, report. Most missing UTMs are found in the first three, before GA4 ever had a chance to report them.

On this page

1.  [*01*Three symptoms that look the same](#three-symptoms-that-look-the-same)
2.  [*02*Step 1: check the URL that actually loads](#step-1-check-the-url-that-actually-loads)
3.  [*03*Step 2: check what GA4 received](#step-2-check-what-ga4-received)
4.  [*04*Step 3: check that the tag fires on the landing page](#step-3-check-that-the-tag-fires-on-the-landing-page)
5.  [*05*Step 4: check the values GA4 got](#step-4-check-the-values-ga4-got)
6.  [*06*Step 5: check the report you are reading](#step-5-check-the-report-you-are-reading)
7.  [*07*Catch it before the report does](#catch-it-before-the-report-does)

**Stop babysitting tags**

Trackingplan audits your real user data around the clock and flags issues before they cost you.

[Start free trial →](https://app.trackingplan.com/signup)

![](/images/64994225b80181b90166ae3e_unnamed-modified.avif)

**Mariona Martí** Digital Marketing Specialist

At Trackingplan since 2022, Mariona turns complex analytics challenges — tags, consent, broken conversions — into relatable stories that connect with the analytics community.

Share Copy link [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwww.trackingplan.com%2Fblog%2Fmissing-utm-parameters-ga4) [X](https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.trackingplan.com%2Fblog%2Fmissing-utm-parameters-ga4&text=Missing%20UTM%20parameters%20in%20GA4%3A%20how%20to%20find%20the%20cause)

Read next

[All Blog →](/blog)

-   [
    
    7 minAnalytics ImplementationFebruary 16, 2026
    
    ### What is (not set) in Google Analytics and how to fix it
    
    Learn what (not set) means in Google Analytics 4, why it shows up in landing page, source, campaign and custom dimension reports, and how to fix each cause.
    
    by **David Pombar**](/blog/what-is-not-set-in-google-analytics)
-   [
    
    14 minAnalytics ImplementationMarch 14, 2026
    
    ### What Is Unassigned Traffic in Google Analytics and How to Fix It
    
    Learn what is unassigned traffic in Google Analytics. Discover the causes and find actionable steps to fix your data for accurate attribution and reporting.
    
    by **David Pombar**](/blog/what-is-unassigned-traffic-in-google-analytics)
-   [
    
    18 minPaid MediaMay 12, 2026
    
    ### UTM tracking audit: how to clean up campaign data in GA4
    
    Our step-by-step UTM tracking audit guide helps you find, validate, & fix errors for perfect GA4 attribution. Master your marketing data now!
    
    by **David Pombar**](/blog/utm-tracking-audit)

Trackingplan

## See everything. Miss nothing.

Your implementations audited around the clock with real-time, real-user data. Real-time alerts about errors or changes in your data, campaigns, pixels, privacy and consent. Let AI flag issues before they cost you.

[Start free trial →](https://app.trackingplan.com/signup) [Book a demo](/demo)
