If you’ve ever opened your GA4 reports and found a traffic source, campaign, or even country listed as (not set), you’re not alone. It’s one of the most common — and confusing — issues marketers and analysts face.
In GA4, “(not set)” appears when Google Analytics doesn’t receive the necessary information to populate a specific dimension. It’s not an error — it simply means the data for that field was missing, blocked, or disconnected from the session context.
For example:
If a user completes a purchase, but GA4 doesn’t know where the session originated, the source/medium field may show (not set)
If browser settings block cookies, GA4 might not be able to assign a client ID, and the session itself could go untracked
This issue doesn’t just affect reporting cleanliness — it affects your ability to attribute conversions, evaluate campaigns, and optimize ad spend. And unfortunately, it tends to happen more often on Shopify — especially when using GA4’s client-side setup or native integrations.
Why Does “(not set)” Appear More Often on Shopify?
The (not set) problem is common across many platforms — but it’s especially noticeable for Shopify merchants using Google Analytics 4 (GA4). Even with a seemingly correct setup, you may find purchases showing up with unknown sources, unattributed campaigns, or missing user/session information.
This isn’t because Shopify blocks GA4 — but rather due to how Shopify’s structure interacts with GA4’s attribution logic.
Bonus: Learn more about Why Your Attribution Data Doesn’t Match Across Platforms
Here’s why Shopify increases the risk of tracking gaps:
1) Broken Session Flows
Shopify’s checkout flow often leads users away from the standard tracking path — especially when:
A customer pays via PayPal, Klarna, or a delayed payment method
The purchase is completed through a link or email invoice
A Draft Order is paid without the user returning to your store — or the session is overwritten by a tracking issue
In these cases, GA4 never sees the thank_you page — meaning it can’t match the order to the original session or source.
2) Strict Privacy Defaults and Cookie Limitations
Many Shopify stores operate in regions with GDPR or similar regulations. When using Shopify’s Privacy API with Google Consent Mode (v2), GA4 relies on valid consent signals to collect marketing data.
However, due to misconfigured setups — in either Basic or Advanced Mode — cookies may still be blocked or user/session identifiers may not be stored properly.
Without those identifiers, GA4 can’t connect the purchase to the user’s earlier activity, resulting in (not set).
3) Shopify’s Native GA4 Integration Is Limited
Shopify’s Google & YouTube Channel app provides only a basic GA4 setup. It doesn’t include:
Server-side tracking
Reliable client-server coordination
Complete ecommerce parameters
While it technically sends purchase events, Shopify’s GA4 integration often lacks the context GA4 needs to match those events with the correct session or campaign.
This issue doesn’t just impact traffic source or campaign attribution — it can also lead to incomplete data in other GA4 reports like Items, Coupons, Taxes, and Shipping.
That’s why understanding the root causes of (not set) — and how to reduce them — is essential for Shopify merchants using GA4.
Bonus: Learn more about Why You Need Server-Side Tracking for Shopify in 2025
The Real Causes Behind “(not set)” in GA4
While Shopify’s structure contributes to tracking issues, the core reason (not set) appears is because GA4 couldn’t access or match critical attribution data during a session or conversion.
Below are the most common and technically grounded causes — especially relevant for Shopify merchants:
1) Client-Side Tracking Blocked or Interrupted
GA4 relies on browser scripts to capture identifiers like client_id, session_id, and UTM/click IDs. But in real-world conditions, those scripts often fail to load or run properly.
Common reasons:
Ad blockers prevent GA4 scripts from executing
Browser restrictions (like Safari’s ITP or Firefox’s ETP) limit cookie lifetime or block tracking altogether
When GA4 can’t access this data, it logs the event but cannot assign a traffic source — and falls back to (not set).
Bonus: Explore How to Fix Your GA4 & Meta Tracking!
2) Consent Restrictions or Misconfiguration
If you’re using Google Consent Mode (v2) with Shopify’s Privacy API in Active Mode, GA4 is restricted from writing cookies unless valid marketing consent is received.
However, even when users give consent, GA4 may still miss attribution data if the consent setup is misconfigured — which is common on Shopify.
This can result in:
GA4 running in limited mode
No client_id being stored
UTM and campaign data not being captured
Without this data, even successful purchases can’t be tied to the original session — and GA4 reports it as (not set).
3) Session Breakage or Overwritten Sessions
This is especially common in Shopify. If a user leaves your site and completes the transaction externally — such as through:
A PayPal or Klarna redirect
A manual payment link (e.g., for Draft Orders)
…or if their existing session is overwritten due to a tracking issue, the original session context is lost. GA4 might still receive the purchase (via server-side or delayed triggers) but can’t link it to the visit.
Without session continuity, source and campaign data are lost — and GA4 logs (not set).
4) Missing UTM or Click ID Parameters
UTM tags (like utm_source, utm_medium, and utm_campaign) are commonly used to track where visitors come from. In some cases, these parameters may be missing when a user lands on the site — due to:
Redirects that strip UTM values from URLs
Consent restrictions that prevent them from being stored
Pages or campaigns that were never properly tagged
When this happens, GA4 can’t assign a traffic source — and logs the session or conversion as (not set).
(Click identifiers like gclid and fbclid are more relevant for attribution within marketing platforms like Google Ads or Meta.)
Summary: GA4 Needs Client Context
Even with server-side tracking in place, GA4’s Measurement Protocol requires session data — especially client_id — to properly link conversions to traffic sources.
If that context is missing due to any of the reasons above, GA4 doesn’t guess. It just records the event with (not set) where attribution data should be.
Why It’s So Hard to Fully “Fix” the (not set) Problem
If you’ve been looking for a guaranteed way to remove all (not set) values from your GA4 reports — here’s the reality:
You can’t fix it completely.
Even with a solid implementation, some amount of “(not set)” will always appear. That’s not a mistake or a misconfiguration — it’s simply how Google Analytics works in today’s privacy-first, browser-restricted environment.
Here’s why it’s technically unavoidable:
Some Browsers Intentionally Block Tracking
Safari, Firefox, Brave, and other privacy-focused browsers often block:
Third-party cookies
GA4 scripts
Redirected click parameters like gclid or fbclid
These restrictions prevent GA4 from creating a client ID or reading UTM data — which means session data is missing from the start.
Consent Restrictions (Especially in GDPR Regions)
When Consent Mode is set to Active, GA4 requires explicit consent to store any marketing-related data. But even when consent is given, tracking may still fail due to incorrect setup — especially on Shopify. This can result in:
No cookies
No client ID
No UTM parameters
No attribution context
Session Disconnects from Real User Behavior
Shopify’s checkout process — especially when it involves external redirects or delayed completions — frequently breaks session continuity. GA4 receives the purchase data, but the user never returns to the site or loads the thank_you page, so the source can’t be linked.
Bottom Line
You can reduce the chances of (not set) by ensuring proper client-side tracking and a working consent setup — but you can’t recover data that was never captured in the first place.
The goal is not to eliminate (not set) entirely.
It’s to minimize it — and make sure your key purchase events are attributed accurately whenever possible.
How Analyzify Helps Minimize “(not set)” in GA4
While it’s impossible to eliminate (not set) entirely, there’s a lot you can do to reduce its frequency — especially when purchases are tracked server-side.
Analyzify helps minimize “(not set)” in your GA4 reports by preserving the critical data points GA4 needs for attribution — and sending them server-side with each purchase event.
Here’s how:
✅ Captures and Stores Key Identifiers Early
Analyzify captures and temporarily stores values like:
client_id (from the user’s first pageview)
UTM parameters (source, medium, campaign, term, content) — used for Shopify-side reporting
Click IDs (like gclid, fbclid) — used for ad platform attribution
This data is preserved even if the user doesn’t complete their purchase in the same session — or returns via a different flow (e.g., draft orders, manual payment links).
✅ Sends Purchase Events with Attribution Data via Server-Side
When a purchase is completed, Analyzify:
Retrieves the previously stored session and user identifiers, such as client_id and session_id
Sends this information alongside the purchase data via GA4’s Measurement Protocol
Ensures GA4 receives the session context — helping match the event to the original source and medium instead of falling back to (not set)
This process works reliably even when:
The user returns later to complete the purchase (e.g., after receiving a draft order link or email invoice)
The purchase is triggered by a third-party billing system or completed through manual backend creation (e.g., B2B orders)
GA4 cannot generate or recover client/session identifiers server-side on its own — it must receive them explicitly. Analyzify ensures those values are available when it matters most: at the time of purchase.

Still Seeing “(not set)” in GA4? We Can Help Fix It.
Analyzify helps you preserve session context, capture identifiers early, and send purchase data server-side — reducing (not set) and restoring your attribution.Does It Remove “(not set)” Completely?
No — and we believe it’s important to be transparent about that.
However, Analyzify significantly improves attribution accuracy in GA4 by:
Preserving session context
Capturing click IDs and UTM parameters early (used where relevant)
Sending stored identifiers with server-side events
The result? Fewer (not set) entries, more reliable source tracking, and a clearer view of your campaigns’ actual performance.
Bonus: Explore Benefits of GA4 Server-Side Tracking for Shopify
Final Thoughts: You Can’t Control Everything — But You Can Track Smarter
The (not set) issue in GA4 is frustrating — but it’s not a bug. It’s a result of how modern tracking works in a privacy-restricted, session-fragmented environment.
While no setup can remove all attribution gaps, you don’t have to accept a broken view of your data.
Analyzify helps Shopify merchants reduce tracking loss by preserving session context and ensuring the necessary identifiers are available server-side — even in the most difficult scenarios.
That means:
Fewer (not set) entries in your GA4 reports
More reliable campaign attribution
Better insights from the data you already collect

“(not set)” Isn’t a Bug — But You Can Minimize It.
“(not set)” happens when GA4 can’t track sessions — Analyzify helps prevent that with hybrid tracking and server-side delivery.If you’re tired of unexplained revenue gaps and missing conversions, it’s time to fix what you can — and Analyzify is built to help.