Attribution & Acquisition

"(not set)" in GA4 - where auditing really begins

When page titles, traffic sources or UTM parameters show up as (not set), the reports are already worthless. Here is how the auditor breaks the problem apart.

(not set) is perhaps the most common symptom in GA4 reports - and at the same time the most frequently ignored one. If you do not know a page title, cannot assign a channel or lose a sessionSource, you have nothing left to work with in reporting. The auditor checks this on two levels.

What happens in the code

Page title (BigQuery view)

The check in app/queries/checks/page_quality.sql classifies every page view into a status class:

CASE
  WHEN page_title IS NULL OR page_title = '' OR page_title = '(not set)'
  THEN 'not_set_page'
  WHEN page_title LIKE '%404%' OR page_title LIKE '%not found%'
  THEN 'error_page'
  ELSE 'ok'
END AS page_status

Traffic source (Data API view)

On the live API side, app/services/ga4_api_check_service.py checks the share of sessions with sessionSource = (not set):

not_set_sessions = _safe_int(_get_single_metric_value(source_not_set_report))
share = (not_set_sessions / total_sessions) if total_sessions > 0 else 0.0
status_traffic = _evaluate_threshold(
  share,
  warning=THRESHOLDS["traffic_not_set_share"]["warning"], # 5 %
  fail=THRESHOLDS["traffic_not_set_share"]["fail"], # 15 %
)

Thresholds (combined)

Check Green Yellow Red
Page title (not set) <1 % 1-5 % >5 %
sessionSource = (not set) <5 % 5-15 % >15 %

The two thresholds are deliberately different: a (not set) page title is always a tracking bug (every page has a title), whereas a certain (not set) rate for traffic sources is unavoidable (e.g. direct address entries).

Typical causes

  • <title> tag missing or arriving too late - single-page applications that set the title only after the first page_view via JavaScript deliver an empty value to the GTM trigger.
  • UTM parameters missing - organic sessions fall into the fallback as soon as utm_source is not passed through. Newsletter clicks, social posts and affiliate links without UTM all end up here.
  • No-referrer policy in the browser - if the site or the ad platform sets Referrer-Policy: no-referrer, GA4 sees neither source nor medium. The same happens with many visits from AI assistants - see how to attribute ChatGPT visitors anyway.
  • Bot/crawler traffic - search engine bots without user-agent classification often land as (not set).
  • Untagged affiliate links - partners set links without UTM, the traffic ends up as Direct or (not set).

"(not set)" vs. "Unassigned" and "landing page (not set)"

Three terms that are often confused:

  • (not set) - GA4 received no value at all (a capture or timing problem). Affects page title, sessionSource and also the landing page: "landing page (not set)" means the first session had no valid page_view with page_location - usually SPA timing, a consent gap or a redirect chain.
  • "Unassigned" - a value is present but cannot be assigned to any channel group. That is a channel/UTM problem, not a capture problem - details in Unassigned traffic in GA4.
  • (not provided) - a historical UA relic for encrypted organic keywords.

Where the auditor shows the problem

The create_page_quality_section section in app/components/dashboard/sections/content.py shows the page title problems:

  • Summary cards for (not set) and error-page shares.
  • Detail table with concrete URLs, views and status.

You see the traffic source share in the live check as a separate card - without a dedicated BigQuery section, but with a clear traffic light.

How to proceed

  1. Page title (not set) share first - it is always fixable.
  • For SPAs, set the title right before the first page_view tag (e.g. via a history-change listener in GTM that waits until document.title is filled).
  • For multi-page apps, check whether every page has a <title> tag in the <head>.
  1. Break down sessionSource = (not set) - group by landing page in the GA4 UI and audit the top landing pages.
  2. Establish UTM discipline - require the newsletter tool, social scheduler and affiliate programmes to set UTMs.
  3. Check referral exclusion - see the blog post Banks and payment providers as referrers and Self-referrals.
  4. In the auditor, check the progress after 48 h under Attribution & acquisition quality.

Frequently asked questions

What does (not set) mean in GA4?
(not set) means GA4 received no value for a field - for example no page title or no traffic source. For page titles it is always a tracking bug (every page has a title); for traffic sources a small share is normal (e.g. direct entries).
What is the difference between (not set), (not provided) and Unassigned?
(not set): GA4 received no value - a capture or timing problem. (not provided): historically from Universal Analytics for encrypted organic keywords. Unassigned: a value is present but does not fit any channel group - a channel-definition or UTM problem.
How do I fix landing page (not set) in GA4?
landing page (not set) usually occurs when the first session had no valid page_view with page_location - due to tag timing in single-page apps, consent gaps or redirect chains. Make sure page_view fires with a valid URL before all other events.

#not-set#utm#traffic-quality#page-title