Topic: Attribution & Acquisition

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

Bernhard Prange · 2026-05-19 · 8 min read

(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.
  • 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

Related articles