In GA4, (not set) appears when a dimension has no value for a particular row in your report. It is GA4's way of saying: I collected an event, but the data associated with this dimension was missing when the event arrived. Unlike Unassigned, which means GA4 could not categorise a session into a channel group, (not set) is a more fundamental problem: the data simply was not there. The frustrating part is that (not set) can appear across dozens of different dimensions for entirely different reasons. A (not set) in Session source/medium means something completely different from a (not set) in Landing page or a (not set) in Age. Diagnosing it requires identifying which dimension is showing (not set), and then working backwards to understand why that specific piece of data was missing.
(Not set)in session Source/Medium
This is the most impactful instance of (not set) because it means sessions where GA4 could not determine any traffic source at all. Unlike Unassigned (source is known but does not match a channel group), (not set) here means the source, medium, campaign, and referrer were all absent — frequently showing up alongside an inflatedDirect traffic count.
The primary cause is sessions where session_start or page_view fired before any attribution context was available. This happens most often with Advanced Consent Mode: GA4 fires early events in the pre-consent window, before the HTTP referrer has been processed or UTM parameters have been captured. These early events have no attribution context, and if they establish the session, the entire session inherits the (not set) attribution. The same root cause shows up insudden traffic drops after a cookie banner change.
Additional causes include: events sent viaMeasurement Protocolwithout traffic source parameters, cross-domain tracking failures where the destination domain receives a session_start without the _gl parameter, and server-side tag implementations that do not forward traffic source fields from the original GA4 client event.
(Not set)in landing page
Landing page shows (not set) when a session's first page was not captured. This typically occurs when the session_start event fired but no page_view event accompanied it, or when page_view fired on a page that does not have a standard URL format GA4 can record.
Common technical causes: a single-page application (SPA) where history navigation does not trigger proper page_view events, a mobile app integration where session starts are recorded but page paths are not transmitted, or Enhanced Measurement page view events not capturing the page URL due to a configuration error.
(Not set)in age, gender, and interest reports
Demographics reports showing (not set) at a high rate is expected and normal. Google Signals is required for demographics data, and Signals only applies to users who are signed into a Google account. For unsigned-in users, GA4 has no demographics data. This dimension will legitimately be (not set) for a large fraction of your audience.
If demographics data has suddenly worsened (more (not set) than usual), check whether Google Signals has been disabled in Admin > Data Collection > Google Signals Data Collection. Also check whether data thresholding has been applied, which happens when the number of users in a demographic segment is too small to report without privacy risk. Thresholded rows appear as (not set) in some report configurations.
(Not set)in campaign or ad-related dimensions
When Google Ads auto-tagging is active and a user clicks a Google Ad, GA4 should receive the GCLID and populate campaign-level dimensions. (not set) in campaign dimensions for sessions that should have come from paid search typically means: auto-tagging is not enabled in Google Ads, the GCLID is being stripped by a redirect in the landing page URL, or the GA4 property is not properly linked to the Google Ads account.
For non-Google paid channels, the equivalent is missing or malformed UTM parameters. If utm_campaign is absent from a URL that should carry it, that dimension will be (not set). A documentedUTM governance standardis the most reliable way to keep these values populated.
(Not set)in ecommerce dimensions
Item dimensions like item_name or item_category showing (not set) in the Ecommerce Purchases report means the items array in your purchase event is incomplete or malformed. The purchase event may be firing and recording revenue correctly, but the product data within the items array is missing key fields. If you rely on extra parameters beyond the standard schema, also review yourcustom dimensions audit.
Each object in the items array requires at minimum item_id or item_name (at least one identifier), and should include price and quantity for accurate ecommerce reporting. Sending an empty items array, or sending items with missing names and IDs, results in (not set) across all item-level reports even though transaction-level metrics appear correct.
G4 Audits automatically identifies which dimensions are showing (not set) at abnormal rates and surfaces the most likely causes for each.
Systematic approach to diagnosing(not set)
Because (not set) has different causes depending on the dimension, the diagnostic process must be specific:
- Identify which dimension is showing (not set) and at what rate it appears. A 5 percent (not set) rate in source/medium is a red flag, especially when paired withsource/medium cardinality issues. High (not set) rates in Age and Gender (often 50% or more) are expected — Google Signals only applies to signed-in users, and the rate will vary significantly by site type.
- In Explorations, filter for rows where the relevant dimension equals (not set). Add additional dimensions to find patterns: do these sessions come from a particular device type, a specific landing page, or a specific time window?
- Correlate the increase in (not set) with recent changes: a new consent banner implementation, a GTM container publish, a website migration, or a new checkout flow.
- Use DebugView to reproduce the condition. If (not set) appears in source/medium, visit the site without any UTMs and without accepting cookies and observe whether session events carry attribution data.
Diagnosing and fixing (not set) in GA4
The root cause depends entirely on which dimension is affected. Start by identifying the report, then follow the relevant path.
Validate
- Identify which specific dimension is showing (not set), source/medium, landing page, age, campaign, or item dimensions all have different causes
- Check the (not set) rate: above 5% in source/medium is a problem; high rates in Age/Gender are expected due to Google Signals limitations
- In GA4 Explore, filter for rows where the affected dimension equals (not set) and add secondary dimensions to find a pattern (device, date, landing page)
- Use DebugView to reproduce: visit the site under the suspected condition (no consent, no UTMs, SPA navigation) and observe whether events carry the expected dimension value
- Check event scope vs dimension scope: custom dimensions registered at event scope cannot populate session-scoped or user-scoped report dimensions
Fix
- For (not set) in source/medium: implement Advanced Consent Mode so pre-consent events carry attribution context, and add traffic source parameters to Measurement Protocol calls
- For (not set) in landing page: fix SPA page_view implementation so history navigation triggers page_view events with the correct page_location parameter
- For (not set) in campaign dimensions: enable Google Ads auto-tagging and verify no redirects are stripping the GCLID parameter
- For (not set) in item dimensions: ensure the items array includes at minimum item_id or item_name (at least one identifier), plus price and quantity, on every purchase and view_item event
- For (not set) in custom dimensions: verify the dimension is registered in GA4 Admin > Custom Definitions with the correct scope before expecting values
Watch for
- New custom dimensions showing (not set) immediately after creation, dimensions must be registered in GA4 Admin before historical or incoming events populate them
- A spike in (not set) in source/medium correlating with a consent banner update or GTM publish
- Item dimensions showing (not set) while transaction revenue looks correct, the purchase event fires but the items array is empty or malformed
(Not set) reduction checklist
- Advanced Consent Mode is implemented so session_start events in pre-consent state carry attribution context where possible
- Measurement Protocol events include traffic source parameters (utm_source, utm_medium) when they represent user-initiated sessions
- Google Ads auto-tagging is enabled and the GA4 property is linked to the Ads account
- UTM parameters are present and correctly formatted on all paid campaign URLs
- Purchase events include a complete items array with at minimum item_id or item_name, plus price and quantity
- Cross-domain tracking is correctly configured so domain transitions do not orphan sessions
Find every (not set) source in your GA4 property
G4 Audits scans your property for abnormal (not set) rates across source/medium, landing page, campaign, and ecommerce dimensions, and tells you exactly which fix applies to each one.