(not set) is the label GA4 puts in a report row when the dimension you are viewing has no value for some of the data. The sessions, events or sales in that row are still counted; the report just cannot say which landing page, campaign, city or product they belong to.
How (not set) works
Every row in an analytics report pairs a dimension, such as session source or landing page, with metrics such as sessions or key events. When an event reaches Google Analytics without the information needed to fill that dimension, GA4 keeps the event and files it under (not set) rather than throwing it away. The label looks the same everywhere, but the reason behind it depends entirely on which dimension you are reading.
The causes I find most often, by dimension:
- Landing page: the session had no page view at its start. This happens when a session times out and the visitor’s next action is a scroll or a click on a page that is already open, or when events arrive from a server through the Measurement Protocol without session details.
- Session campaign: Google Ads clicks arrive carrying a click ID from auto-tagging, but the Ads account is not linked to the GA4 property, so GA4 knows the visit was paid yet cannot look up the campaign name. Links tagged with UTM parameters but no utm_campaign value produce the same result.
- Custom dimensions: the parameter was never sent with the event, or the custom dimension was registered after the data came in. Registration only works from that day forwards.
- City, region or country: GA4 could not work out a location from the visitor’s connection, which is common with some VPNs and privacy relays.
- Item name, brand or category: an ecommerce event was sent without those fields in its items array.
Why it matters
A small, steady (not set) share is normal, and I would not spend a client’s budget trying to remove every last row. The trouble starts when the share grows, or when it sits in a report you rely on for decisions. If a large part of your paid sessions shows a (not set) campaign, you cannot see which campaign produced the enquiries, and budget gets moved on guesswork. If revenue sits against a (not set) landing page, you cannot tell which pages earn their keep.
UK sites have one extra source of it. Where analytics only loads after a visitor accepts cookies, which is the usual set-up under PECR, a banner that loads GA4 on acceptance but never sends a page view for the page the visitor is on can create sessions with no page view at all. Those sessions then show a (not set) landing page, and the problem looks like a GA4 fault when the fix belongs in the consent set-up.
Common mistakes
- Treating (not set) as one problem. A (not set) landing page and a (not set) campaign have unrelated causes and unrelated fixes.
- Filtering the row out of dashboards to make them look tidy. It holds real visits and real sales, and hiding it makes your totals disagree with the property.
- Registering a custom dimension and expecting last month’s reports to fill in. Only data collected after registration carries the value.
- Publishing tag changes without testing, then finding weeks later that a new event has been sending empty parameters.
- Assuming Google Ads data is broken when the account was simply never linked to the GA4 property.
How to act on it
Start by sizing the problem. Open the report for the dimension in question, compare the (not set) row with the total for the last 28 days, and check whether the share is steady or rising. A rising share nearly always lines up with a change: a new cookie banner, a site rebuild, a new payment provider or a Tag Manager publish.
Then work through the causes for that dimension. For campaigns, confirm the Google Ads link in GA4’s Admin under Product links, and check auto-tagging is switched on in the Ads account. For landing pages, use DebugView or Tag Manager’s preview mode to confirm a page view fires on the first page, including straight after someone accepts cookies. For custom dimensions and ecommerce items, inspect the event and check the parameter is present and spelt exactly as registered.
Where paid traffic is involved, I fix this before managing any budget in performance marketing, because a campaign you cannot see in the data cannot be judged fairly against the others.
