There is no sight more frustrating in GA4 than to look at a report and see half of your sessions have been attributed to “(not set)”. When Google has no data for a dimension it simply returns the “(not set)” value. But what that means for your website can vary by context, and fixing it is not always trivial.

In general, there are two main places you’ll see “(not set)” values appear in your reports, 

  • Acquisition Reports (i.e. Session Source / Medium or First User Source / Medium)
  • Landing Page Reports

But they can pop up in all kinds of reports, all with slightly different causes and solutions.

(not set) source / medium in GA4 report

This occurs when GA4 has no data about how a Session started. This is subtly, but critically different from Direct traffic. Direct traffic occurs when GA4 detects a normal session starting but doesn’t know where it came from and otherwise acts normally. The best way to think about the differences is that Direct traffic is the “Everything Else” bucket and that “(not set)” sessions are errors of some kind.

What specifically causes the error is whenever the automatically generated session_start event isn’t recorded. When this happens Google starts to record events and needs to tie them to some kind of session. But all the details for how that session arrived are normally stored on that session_start event and therefore it just has to use “(not set)” as the placeholder.

Causes of missing session_start events

  1. Session timeouts
    1. If a user’s session times out, sometimes a new session can begin without a proper session_start event. 
    2. This can be mitigated by using the maximum session timeout allowed by GA4 (7hrs 55 minutes)
  2. Users leaving the website before the session_start event is sent to GA4
    1. If for example, if a user clicks on your website by accident and rapidly leaves it they might trigger page_view events, but the session_start one is sometimes delayed and so might not fire before they exit.
    2. A key indicator of this sort of behaviour is if you have much higher clicks recorded in your Ad Platform than you see sessions in GA4
  3. Ad blockers and privacy extensions
    1. These can often interfere with the normal operation of Google Analytics data processing.
    2. Not much can be done about this trigger, but it is usually a relatively small proportion of users
  4. Incorrect GA4 configuration, network issues & JS error
    1. Sometimes, things will just break on your website and GA4 won’t work the way it’s supposed to.
    2. Pay close attention to the console and look for any console errors, duplicate events or just plain weirdness popping up.

(not set) landing page in GA4 report

This, like with Source / Mediums, occurs when GA4 has no data on what landing page a session started on. This can occur again when the session_start event is missing as above. However, the more common cause for this error to appear in the landing page report is for there to be no page_view associated with the session at all. 

Common causes of page_view-less sessions are unusually triggered events. For example, if you have an event firing from someone reading an email confirmation, then that might not get associated with the original web session. This would therefore be a session with no page_views and a (not set) landing page.

The best way to minimise the presence of (not set) in your LP report is to closely investigate those sessions and see what events are being triggered in these sessions that supposedly have no pageviews. Once you know which events are triggering these sessions, you can look at their triggers and see what might be causing them. 

Finally, a neat trick if you’re being plagued with (not set) is to increase the session timeout duration from 30 minutes to a maximum of 7hrs 55 minutes. This can ensure that loose events that fire late don’t get missed out from the main web session.

(not set) in other GA4 reports

In most of the other reports (not set) is pretty self-explanatory. They’re simply situations where no data was received for that dimension for relatively obvious reasons:

  • Session Google Ads Campaign – For non-paid traffic or if the Ads account isn’t linked to GA4
  • Country – This report relies on ip addresses. If the IP address is blocked due to e.g. VPNs this will appear under (not set)
  • Item Name – If no Item Name data was sent with the ecommerce data then it will appear as (not set)

(not set) in GA4 is merely the absence of data for a dimension. In most reports, this is no problem, it’s to be expected that not everyone lets you geolocate their ip address. However in certain cases it is indicative of errors in your tracking and you should attempt to minimise these errors as much as you can. You’ll never be able to eliminate them completely, but reducing their impact on your reports is a worthy goal. Finally, one other approach that can help, is to filter out these rows from your reports either using Explore reports or the in-built Library functionality. With a filtered report you can make sure you’re making your decisions on only the accurate data without the errors polluting your judgement.