Get a free audit ↗ServicesApproachResourcesAbout
Home / Resources / GA4 (not set) source/medium

GA4 (not set) source/medium: what it means and how to fix it.

Seeing (not set) in GA4 source/medium or channel reports makes it harder to understand where leads come from. It usually means GA4 did not have a value available for that dimension in the context of the report. The cause depends on which dimension and events you are looking at, so the fix starts with identifying where the missing value enters your tracking.

In this guide.

What does (not set) mean in GA4?

(not set) is a placeholder GA4 uses when it cannot provide a value for a particular dimension. It is not a marketing channel, and it does not automatically mean the visit was direct or that a campaign failed.

First, check the exact dimension in the report. Session source / medium, first user source / medium, and session default channel group describe different scopes. A missing value in one does not necessarily mean the same thing as a missing value in another.

ValueWhat it generally indicates
(direct) / (none)GA4 has no usable campaign or referral information to identify a source for that session.
(not set)GA4 has no value available for that dimension in the report's context.
A named source / mediumGA4 assigned a source and medium, such as google / organic or newsletter / email.

The important distinction is that direct is a source classification, while (not set) is a missing dimension value. Treating every (not set) row as direct can hide a tracking or implementation issue.

Why does (not set) appear in source/medium or channel reports?

There is no single cause for every (not set) value. Common areas to investigate include:

  • Events without a complete session context. Events sent from a server or through Measurement Protocol may be missing session identifiers or may not be associated with the expected session.
  • Tagging or initialization problems. GA4 events can fire before the Google tag is configured, or some events may be sent through a different implementation than the rest of the site.
  • Broken session continuity. Cross-domain journeys, redirects, or consent-related changes can affect whether GA4 can connect activity as intended.
  • Incorrect or inconsistent campaign tagging. UTMs may be missing, misspelled, overwritten, or applied inconsistently. This often causes unattributed or misclassified traffic, although the exact result depends on the situation.
  • Dimension and report scope. Some dimensions are not populated for every event or row. A report using an event-scoped dimension can behave differently from one using session-scoped traffic dimensions.
  • Data processing and configuration issues. Recently collected data, filters, custom reporting setups, and imported events can make a report look different from the standard acquisition reports.

Do not assume a particular cause from the label alone. Start with the report, date range, dimension scope, and event names where the value appears.

How to diagnose your (not set) traffic

  1. Identify the exact dimension. Is the report using Session source / medium, First user source / medium, Session default channel group, or a custom dimension?
  2. Find the affected events and landing pages. Check whether (not set) appears across all sessions or clusters around a specific form, subdomain, landing page, or event.
  3. Compare standard reports and Explorations. Use the Traffic acquisition report for session acquisition and check whether the same pattern appears when you change the dimension or scope.
  4. Use GTM Preview and GA4 DebugView. Verify that the Google tag initializes correctly, events fire once, and the expected session and campaign context is present.
  5. Inspect server-side or Measurement Protocol events. If your CRM or backend sends events to GA4, check that the implementation follows Google's current requirements for associating events with a session.
  6. Test consent and cross-domain journeys. Compare a consented test journey with your expected flow, and verify that transitions between domains do not create unintended new sessions or referrals.

If the missing values are concentrated in one event or one integration, start there rather than changing every tag on the site.

How to reduce (not set) in GA4

  • Keep one consistent Google tag configuration. Make sure GA4 configuration is in place before dependent event tags run, and avoid sending the same event through multiple implementations unintentionally.
  • Preserve session context for backend events. For Measurement Protocol and server-side integrations, follow Google's documentation for session identifiers and required event parameters. Do not guess or fabricate session data.
  • Use consistent UTM conventions. Standardize source, medium, and campaign values across paid social, paid search, email, influencer, and other tagged links. Use lowercase naming conventions where practical.
  • Configure cross-domain measurement where needed. If a lead journey spans domains you control, configure and test the cross-domain setup instead of assuming GA4 will join the journey automatically.
  • Test consent behavior and redirects. Ensure consent configuration is implemented correctly and that redirects do not strip campaign parameters before the analytics tag can read them.
  • Review custom and imported events. Check whether the event's implementation supports the dimension you are using and whether the report is appropriate for that event scope.
  • Document campaign rules. Give the team and agency a shared UTM naming guide so the same channel is not tagged in multiple conflicting ways.

Do not try to fix every (not set) value by relabeling it as direct or overwriting acquisition fields. That may make a report look tidier without repairing the underlying data.

Why it matters for lead-generation reporting

For a lead-generation business, missing source data can mean a form submission reaches the CRM without a reliable indication of whether it came from organic search, paid search, paid social, or another channel. For agencies, the same problem makes campaign comparisons less trustworthy and can lead to budget decisions based on incomplete data.

GA4 should help you understand website behavior, but it is not a replacement for saving campaign context with the actual lead. Where appropriate, capture UTMs and landing-page information in hidden form fields, validate that the values reach the CRM, and connect them to qualified leads and closed deals.

Read the guide to hidden form fields for UTM tracking and lead attribution, or explore Google Tag Manager setup and analytics audits if you need to find the source of the issue.

Frequently asked questions.

Is (not set) the same as direct traffic in GA4?

No. Direct traffic is generally shown as (direct) / (none). (not set) means GA4 does not have a value available for that dimension in the report context.

Can UTMs fix every (not set) value?

No. UTMs help identify tagged campaign traffic, but they do not fix missing session context, incorrectly implemented events, or all dimension-scope issues.

Why does (not set) appear for only some events?

Those events may be sent through a different tag or integration, may lack session context, or may be viewed with a dimension that is not available for that event. Compare the affected events and implementation.

Should I replace (not set) with direct in my reports?

Not automatically. Doing so can conceal missing tracking data. Diagnose the cause first and keep unknown values separate from genuine direct sessions.

Related guides and services.

Want to know what your GA4 data is really telling you?

Get a free analytics audit ↗