What (not set) Means in GA4
When you see "(not set)" in a GA4 report dimension, it means no value was collected for that dimension in those sessions. It is not an error in itself — it is GA4's way of saying "this dimension has no data for these rows." But it usually indicates a setup gap that is worth investigating.
Case 1: (not set) in Source/Medium
Cause: Sessions where GA4 could not determine a traffic source. The most common reasons:
- Direct sessions that arrived with no referrer and no UTM parameters
- iOS 15+ users with Private Relay enabled (IP masked, user agent generic)
- Sessions from within apps (email clients, social apps) that do not pass referrer headers
Fix for UTM-less paid traffic: Ensure all paid campaigns use UTM parameters. Missing UTMs on email campaigns are a common cause of "(not set)" in email traffic.
Fix for dark social: Short links from messaging apps often strip referrer headers. Accept that a small percentage will show (not set) from these sources.
Case 2: (not set) in Landing Page
Cause: Sessions where no page_view event was recorded with a valid page_location parameter. Common causes:
- Single-page applications (SPAs) where GA4 fires before the URL is properly set
- Redirect chains that GA4 did not follow correctly
- Tag firing on document ready before URL is finalised
Fix: In GTM, ensure your GA4 Configuration Tag fires on DOM Ready or Window Loaded triggers rather than Page View if your site has redirect chains. For SPAs, implement explicit page_view events triggered by route changes.
Case 3: (not set) in Google Ads Dimensions
Cause: Sessions from Google Ads where the GCLID was not passed to GA4. This happens when:
- GA4 is not linked to Google Ads (Admin then Google Ads Links)
- Auto-tagging is disabled in Google Ads
- Landing page redirects strip the gclid parameter
- The page loads so slowly that GA4 fires before the gclid is available
Fix: Enable auto-tagging in Google Ads (Settings then Auto-tagging). Verify the GA4-Google Ads link is active. Check that no redirect strips the gclid parameter.
Case 4: (not set) in Ecommerce Dimensions
Cause: Product-related dimensions (item_name, item_category) showing (not set) means those parameters are missing from the items array in some purchase events.
Fix: Check your purchase event implementation — ensure every item in the items array includes item_id AND item_name. Use GA4 DebugView to inspect a purchase event and verify all item parameters are present.
Case 5: (not set) in Custom Dimensions
Cause: A custom dimension has been registered in GA4 Admin but the corresponding event parameter is not being sent consistently with all events.
Fix: Check your event implementation. Custom dimensions are only populated when the event explicitly includes the parameter — they do not inherit from other events or sessions. If the parameter is missing from some events, (not set) appears for those rows.
How Much (not set) Is Acceptable?
Some (not set) is unavoidable — direct sessions, dark social, and app traffic will always produce some. Concerning thresholds:
- Source/medium (not set) above 20% of sessions: investigate UTM coverage
- Landing page (not set) above 5%: investigate redirect or SPA issues
- Google Ads campaign (not set) above 10%: check auto-tagging and link status
Summary
(not set) in GA4 is a diagnostic signal, not an error. Each dimension has specific causes for (not set) that require different fixes. Start with the dimensions that have the highest (not set) percentage and the greatest business impact — typically source/medium and Google Ads campaign dimensions.
See our GA4 Setup & Audit service for data quality investigation.
Too much (not set) in your GA4 reports? Contact Adslytics.
Need expert tracking setup?
Our Google Tag Manager experts have delivered 500+ tracking setups with a 98% success rate.
Get a Free Consultation →