(not set) Everywhere? Here's Exactly Why—and How to Fix It
- Central Delta Group
- Jun 23
- 3 min read
If you've spent time in GA4, you've inevitably stumbled on those cryptic '(not set)' entries cluttering your reports. They're frustrating, confusing, and can make your analytics look sloppy. But '(not set)' isn't a random glitch; it signals specific issues with how Google Analytics 4 (GA4) captures critical data points via Google Tag Manager (GTM). In this compact guide, we'll demystify why this happens and precisely how to fix it.

Understanding '(not set)' in GA4 Reports
'(not set)' simply means GA4 didn't receive certain dimension values—Landing Page, Source/Medium, or Page Title—at the right moment. GA4 attributes these values at session start, relying heavily on your GTM configuration.
When your Landing Page is '(not set)', GA4 missed capturing a page_view event at session start. Similarly, a '(not set)' Source/Medium means GA4 didn't properly attribute the session's campaign data (UTM parameters). A missing Page Title means the title wasn't captured or was unavailable when GA4 fired.

Why Does '(not set)' Happen with GTM?
GA4 captures dimensions from the very first event of a session. If anything disrupts this first event, dimensions turn into '(not set)'. Common GTM pitfalls include:
GA4 config tag firing too late (e.g., after page modifications or redirects).
Initial events firing out-of-order, causing GA4 to miss crucial details like UTMs.
Session starts without a pageview (like midnight rollovers or session timeouts).
GA4 won’t retroactively update missing session attributes. So if it doesn't capture them initially, they remain '(not set)'.
Step-by-Step GTM Solution to Eliminate '(not set)'
Step 1: Set GA4 Config to Fire Immediately
Your GA4 Configuration tag must trigger at the
earliest moment possible (Initialization). This ensures GA4 immediately captures critical details like the Landing Page URL and UTM parameters.
In GTM, change your GA4 config tag's trigger from "All Pages" to "Initialization - All Pages."

Step 2: Persist UTM Parameters to Avoid Losing Campaign Data
GA4 attributes traffic source from initial UTM parameters. Often, UTMs disappear (due to redirects or single-page apps), leaving GA4 clueless about session origins.
Set up variables in GTM capturing each UTM parameter from URLs (utm_source, utm_medium, utm_campaign). Then, implement a simple "Persist UTMs" script in GTM that stores these parameters in session storage, preserving the data across subsequent page navigations.
This mirrors the method outlined by Anson Lobo—capture UTMs on page load and store them client‑side—so later tracking or forms can access the original campaign data confidently.
Step 3: Verify Everything in DebugView and GTM Preview
Test your updated configuration thoroughly:
Use GTM Preview to ensure GA4 config fires immediately upon loading each page.
Ensure no other GA4 events fire before your GA4 config tag.
In GA4 DebugView, verify the session_start and page_view events capture correct UTM parameters and Landing Page URLs.
Special Considerations
Some '(not set)' entries, like midnight session rollovers or lengthy session timeouts, can't be entirely avoided. However, the outlined GTM adjustments drastically reduce unnecessary '(not set)' clutter in your reports. By implementing this precise GTM configuration, you'll reclaim clarity in your GA4 analytics, ensuring each session starts with fully captured dimensions—and fewer '(not set)' frustrations.
Sources
Google Analytics Help Center – What the value (not set) means in your reports.
Analytics Mania – Julius Fedorovicius. June 2025. How to remove (not set) in Google Analytics 4.
Anson Lobo (LinkedIn) – 30th June 2024. How to save UTM parameters in cookie & use them in form fields.
MeasureSchool – Usman Qureshi. 31th July 2024. How to fix Not Set in GA4 [Debug + GTM tutorial].