Skip to content

Problem

GA4 unassigned traffic: how to fix it

Unassigned is not a channel. It is what the property shows when a session has source and medium values that do not match any channel definition, or when it has no traffic source information at all. That distinction matters because the first is a tagging convention problem you can fix in an afternoon, and the second is usually a broken measurement chain that needs real work.

By CartKernel · Last reviewed 2026-09-07

Does this look familiar?

  • A large unassigned row appears in the acquisition reports alongside the named channels
  • Unassigned carries revenue, so real orders are being credited to nothing
  • The row grew after a campaign launch, a consent banner change or a checkout change
  • Paid campaigns show far fewer sessions in analytics than clicks in the ad platform
  • Unassigned is concentrated in one country, one browser or one device type
  • Sessions that begin on a payment or booking domain appear as unassigned

Causes, ranked

Why it happens, most common first

Check them in this order. The first two account for most cases we open.

  • most common

    Campaign parameters do not match any channel rule

    Channel groups match on specific source and medium values. A medium written as paid-social, ppc-ads, newsletter or something invented by a partner will not match, so the session lands in unassigned even though the tagging is present and consistent. Capitalisation and stray whitespace cause the same result.

  • most common

    The session has no traffic source at all

    This happens when the first event of a session arrives without referrer or campaign context. Common triggers are events sent from a server without session context, a redirect that strips query parameters before the page loads, and app or webview traffic that arrives with nothing attached.

  • common

    Cross domain measurement is not configured

    When checkout, a booking step or a payment provider runs on a different hostname, the visitor starts a new session there. If that domain is not listed in the cross domain configuration, the new session has no source and the purchase inside it becomes unassigned revenue.

  • common

    Consent settings prevent source information being stored

    Where analytics storage is denied, the property cannot read or write the identifiers that carry campaign information between pages. Depending on configuration, the resulting sessions either model into channels or fall into unassigned. This concentrates in regions with prominent consent banners.

  • common

    Ad click identifiers are lost on the way in

    A redirect chain, an aggressive URL cleaning script, a cached page served without query parameters or a link shortener that drops parameters removes the click identifier. The visit still arrives, but the property has nothing to attribute it to and the ad platform reports a click you cannot see.

  • occasional

    Events arrive outside a normal session

    Measurement protocol calls without a client identifier and session information, offline conversions imported without matching, and late arriving events from a closed browser all produce activity that cannot be attached to an acquisition source.

The fix

In this order

Each step is something you can do today. Do them in sequence; skipping ahead is how a review fails twice.

Prevent it next time

  • Publish one campaign tagging convention and give everyone a link builder that enforces it
  • Add every new domain in a customer journey to cross domain settings on the day it goes live
  • Test the click parameter survives redirects whenever a landing page or caching rule changes
  • Watch the unassigned share as a monitored metric rather than noticing it during a review
  1. Split unassigned into its two kinds

    Build a report of unassigned sessions broken down by session source and session medium. Rows with values present are a naming problem. Rows showing nothing for both are a measurement problem. Handle them separately, because the fixes share nothing.

  2. Standardise campaign tagging to values the channel rules recognise

    Agree one convention: lowercase throughout, cpc for paid search, email for email, and source values that name the actual platform. Publish it, rebuild the links you control, and update the templates any partner or tool uses to build links for you.

  3. Create custom channel groups for what remains

    Where a partner cannot change its parameters, define a custom channel group that maps those exact values into the channel where they belong. Apply it going forward and note that custom groups can be applied to historical reporting in the property, unlike some other settings.

  4. Configure cross domain measurement and referral exclusions

    List every hostname a visitor crosses during a normal journey, including payment providers and any subdomain running a separate application, in the cross domain settings. Add payment and authentication domains to the unwanted referrals list so they do not start new sessions.

  5. Protect click identifiers through redirects

    Test each ad landing page by following a real ad click and checking whether the click parameter survives to the final URL. Fix redirects to preserve the query string, and make sure any caching layer varies on those parameters rather than serving a stripped copy.

  6. Set consent up to signal rather than block

    Configure the consent tool so tags load and receive explicit signals in both directions, with defaults set per region. This lets the property model behaviour for visitors who decline instead of collecting sessions with no context at all.

  7. Give server sent events the context they need

    Any event sent from a server must carry the same client identifier and session identifiers as the browser session it belongs to. Without them, the event is treated as a new sessionless visit, which is a common source of unassigned revenue on stores using server side collection.

  8. Recheck after a full week and record the residual

    Once the changes are live, wait a complete week and measure the unassigned share again. Note what remains and why, so the next investigation starts from a known baseline rather than from scratch.

When to get help

Get help when unassigned carries a meaningful share of revenue and the split between naming problems and missing sessions is not obvious from the reports, because at that point the work involves the measurement architecture rather than settings. That usually means checking how sessions are stitched across domains, whether server collection is passing identifiers correctly, and how consent is implemented in each market. Attribution decisions across paid channels rest on this data, so it is worth resolving properly rather than filtering the row out of reports.

Get a Growth Analysis

Free. We reply within one business day.

Questions

Asked alongside this problem

By CartKernel · Last reviewed

What is the difference between unassigned and direct traffic?

Direct means the property saw a session with no referrer and no campaign, which it treats as a known state and places in its own channel. Unassigned means the values present did not match any channel definition, or attribution could not be resolved at all. They look similar in a report but point at different causes.

Can I reduce unassigned by editing the default channel group?

The default group cannot be edited, but you can create a custom channel group that matches your own source and medium values and use it in reports. Custom groups apply to historical data in the property, which makes them useful for cleaning up campaigns already run.

Why does unassigned appear mainly on purchases rather than on sessions?

Because purchases often happen after the visitor has crossed into a checkout or payment domain. If that hostname is not covered by cross domain settings, a new session starts there with no source, and the order lands in it. Sessions earlier in the journey were attributed normally.

Is some unassigned traffic unavoidable?

Yes. Privacy settings, unusual browsers, links shared without parameters and events arriving outside a session will always leave a residue. The aim is to get it small and stable, then treat any growth in the share as a signal that something in the measurement chain has changed.

Related problems, answers and terms

All problems
ProblemGA4 revenue does not match Shopify: how to fix itGA4 revenue does not match Shopify for reasons that are partly fixable and partly expected. Separate the two, then close the gap that is real.OpenProblemGA4 purchase event not firing: how to fix itA GA4 purchase event not firing leaves ecommerce reports empty while orders keep arriving. Trace the event from checkout to property and repair it.OpenProblemConversions dropped after Consent Mode: how to fix itConversions dropped after Consent Mode is usually a configuration choice, not a legal ceiling. What to check, and how to keep reporting honest.OpenProblemMeta ads purchases not matching store orders: how to fix itMeta Ads purchases not matching store orders comes from attribution, deduplication and timing. Sort the reporting differences from the real defects.OpenAnswerWhy is direct traffic so high in GA4?Direct in GA4 is a fallback for sessions with no recorded source. The causes ranked, the ones you can fix, and how to read what is left.OpenAnswerWhich attribution model should an ecommerce store use?No attribution model is correct. Use one consistently for reporting, platform data for bidding, and holdout tests for budget. How to build that stack.OpenGlossaryAttribution windowAn attribution window is how long after a click or view a platform still credits a sale to the ad. Settings across Google Ads, GA4 and Meta, and pitfalls.OpenGlossaryConsent ModeConsent Mode is how Google tags read a visitor's consent choice and adjust behaviour. The signals, basic against advanced, and what it does to reporting.Open

Stop the leak.

A free Growth Analysis finds what is broken and ranks it by the revenue it costs you.