Glossary

What direct / none in GA4 Means and How It Differs From (not set)

Taras Shynkarenko
Taras Shynkarenko
•Updated: •7 min read
What direct / none in GA4 Means and How It Differs From (not set)What direct / none in GA4 Means and How It Differs From (not set)

TL;DR, Quick Answer

7 min read

Google Analytics 4 writes `(direct)` as the source and `(none)` as the medium on a session that arrives with no referrer and no campaign parameters, so the pair is two literal dimension values rather than a description of visitor behaviour. It is not the same as `(not set)`, which means Analytics received no value for the dimension, and not the same as `Unassigned`, which means the event carried values that matched no channel rule. The Direct channel is wider than the pair, because Google's rule also accepts a medium of `(not set)`.

What does (direct) / (none) mean in GA4?

Google Analytics 4 assigns direct / none in GA4 to a session that arrives with no referrer and no campaign parameters, writing (direct) into the source dimension and (none) into the medium dimension for that session. Google's help article puts it this way: "The '(direct)' source and '(none)' medium (that is, '(direct) / (none)') in Google Analytics represents website traffic that doesn't have a clear referral source." Read the pair as two literal values GA4 stored on the session, and check which dimension you are looking at before you interpret the number.

A person reviewing a traffic report on a laptop, next to the section on where the direct pair shows up in GA4 reports.

Where does GA4 show the (direct) / (none) pair?

The pair appears on source and medium dimensions, never on a channel dimension. In Reports, open Acquisition and then Traffic acquisition, and change the first column from Session default channel group to Session source / medium; the row labelled (direct) / (none) is your session-scoped total. The same pair shows up on First user source / medium in the User acquisition report, and that report counts something else. Google describes session scope as dimensions that "show you where both new and returning users are coming from when they start new sessions", while first-user scope records how the user was acquired once and keeps that value on every later session.

Those two reports disagree by design, and teams read the disagreement as a bug. Before you compare them, confirm both reports use the same scope, the same date range and the same definition of what counts as a session.

How is (direct) / (none) different from (not set)?

(direct) / (none) is a value GA4 assigned; (not set) is GA4 telling you it has no value to show. Google defines the placeholder as "a placeholder name that Analytics uses when it hasn't received any information for the dimension you have selected", so a (not set) medium means Analytics never received a medium at all, while a (none) medium means Analytics wrote the literal string that stands for no marketing medium.

Google publishes that definition in an article titled "[UA] What the value (not set) means [Legacy]" and does not publish a GA4 replacement for it, so the wording above is the only first-party definition available and the examples inside that article describe Universal Analytics reports. Treat the definition as current and the examples as history.

How is (direct) / (none) different from Unassigned?

Unassigned is a channel-grouping value, so it never appears on the source / medium dimension where (direct) / (none) lives. Google defines it as "the value Analytics uses when there are no other channel rules that match the event data", which means the session carried something, and that something failed every rule in the default channel group. A session that carried nothing at all matches the Direct rule instead and gets a channel of Direct.

The two rows send you to different places. Rising Unassigned points at values you are sending, such as a utm_medium nobody defined, and rising (direct) / (none) points at values that never arrived. Audit your campaign parameters against the UTM parameters guide when Unassigned climbs, and audit the links themselves when the direct pair climbs.

Is (direct) / (none) the same as the Direct channel?

The Direct channel is wider than the (direct) / (none) pair. Google's default channel group defines Direct as sessions where "Source exactly matches '(direct)' AND Medium is one of ('(not set)', '(none)')", so (direct) / (not set) also lands in Direct even though it is a different source / medium row. A property that carries both rows will show a Direct channel total larger than the (direct) / (none) row in the source / medium breakdown, and the difference is arithmetic, not a data quality problem.

Value you seeDimension it appears onGoogle's wordingWhat produced it
(direct) / (none)Session source / medium, First user source / medium"represents website traffic that doesn't have a clear referral source"The session arrived with no referrer and no campaign parameters
(not set)Any dimension, including medium"a placeholder name that Analytics uses when it hasn't received any information for the dimension you have selected"Analytics received no information for that dimension
UnassignedSession default channel group, First user default channel group"the value Analytics uses when there are no other channel rules that match the event data"The event carried source and medium values that matched no channel rule
DirectSession default channel group"Source exactly matches '(direct)' AND Medium is one of ('(not set)', '(none)')"The channel rule matched a session with source (direct)

A marketer pointing at spreadsheet figures while calculating a percentage, next to the section on working out the direct pair's share of a report.

How do you calculate the (direct) / (none) share of a report?

Divide the sessions on the (direct) / (none) row by the total sessions in the same report and multiply by 100:

direct/none share = sessions on the (direct) / (none) row ÷ total sessions × 100

If Traffic acquisition returns 5,000 sessions for the month and the (direct) / (none) row holds 1,400 of them, the share is 1,400 ÷ 5,000 × 100 = 28 percent of sessions for that property, that date range and that scope. Run the same arithmetic on the First user source / medium report and the number changes, because the denominator counts users acquired rather than sessions started. Record which report produced the figure whenever you quote it, since two tools reporting the same site rarely agree once scope differs.

Direct / none share of a 5,000-session report
(direct) / (none)1,400 sessions (28%)
Other sources3,600 sessions (72%)
The same example from the Traffic acquisition report used to walk through the share formula.

What should you check in GA4 when the (direct) / (none) row grows?

Check the report configuration first, then the links. Four checks in order:

  1. Confirm the dimension. Switch Traffic acquisition to Session source / medium so you are reading the pair itself rather than the Direct channel, which also absorbs (direct) / (not set).
  2. Compare scopes. Put Session source / medium and First user source / medium side by side; a gap between them is a scope difference, not new untagged traffic.
  3. Segment by landing page. Add Landing page as a secondary dimension on the (direct) / (none) row. A single page carrying most of the total points at one campaign or one redirect, which gives you something you can fix.
  4. Audit the outbound links. The causes that strip a referrer or a campaign tag are documented in full in the guide to direct traffic as an attribution bucket, which covers referrer policies, native apps, PDFs, redirects, untagged email and QR codes. Fix the tagging on the links you control with UTM campaign tracking.

One more check sits outside the report. GA4 can only classify sessions it recorded, so a growing direct row and a shrinking total are two symptoms of one problem; read the GA4 data gap before concluding that attribution alone broke. If you migrated the property, also confirm the channel definitions you are comparing against, because GA4 and Universal Analytics group channels differently.

Flowsery
Flowsery

Start FREE Trial

Real-time dashboard

Goal tracking

Cookie-free tracking

Frequently Asked Questions

Does (direct) / (none) mean people typed my URL into the address bar?

No. Google's article lists three reasons for the pair, and typing a URL is one item inside one of them, alongside missing traffic information and ad blockers. The pair records the absence of a referrer and campaign parameters at the moment GA4 processed the session, and that absence has several causes that have nothing to do with the address bar.

Can I convert (direct) / (none) sessions back into their real source?

Not after collection. GA4 stores the source and medium it received, and no reprocessing recovers a referrer that the browser never sent. Reduce future volume by tagging every link you control with campaign parameters, which is the only lever that changes what arrives.

Why does my Direct channel number differ from my (direct) / (none) row?

Google's Direct rule accepts a medium of (not set) as well as (none), so the channel total includes (direct) / (not set) sessions that the source / medium breakdown lists on a separate row. Add both rows together before comparing them with the channel figure.

Is Unassigned a subset of direct traffic?

No. Unassigned and Direct are two separate values of the same channel dimension, and a session gets one or the other. Unassigned means the event carried data that matched no rule in the default channel group; Direct means the session matched the rule for source (direct).

Does GA4 document what (not set) means for GA4 properties?

Google's only article defining the value is marked as Universal Analytics legacy content. The definition it gives, a placeholder used when Analytics received no information for the selected dimension, still describes what the value signals in a GA4 report, but the reporting examples inside that article refer to Universal Analytics.

Which GA4 dimension should I use to track the direct pair over time?

Use Session source / medium if you are measuring how sessions arrive, and First user source / medium if you are measuring how users were first acquired. Pick one, note it on the chart, and keep it fixed, because switching scope mid-quarter changes the trend line without anything changing on the site.

Is a high (direct) / (none) share automatically a problem?

A high share by itself is not automatically a problem, it is arithmetic that reflects untagged links, missing referrers or ad blockers. Segment the (direct) / (none) row by landing page first, since a single page or campaign driving most of the total gives you something concrete to fix. Treat the percentage as a starting point for an audit, not a verdict on your marketing.

Why would (direct) / (none) grow while my total sessions are falling?

A growing (direct) / (none) row alongside a falling session total often signals a tracking gap rather than a surge in untagged traffic, because GA4 can only classify sessions it actually recorded. Check for a broader data collection problem before treating the row itself as the cause of the shift. Fixing the collection gap can move both numbers at once.

Does a growing (direct) / (none) row mean my UTM tagging is broken?

A growing (direct) / (none) row is not usually a UTM tagging problem, that pattern shows up as rising Unassigned instead. (direct) / (none) means values never arrived at the session at all, no referrer and no campaign parameters. Unassigned means the event carried a value, such as an undefined utm_medium, that matched no rule in the default channel group. Check Unassigned first if you suspect a tagging mistake, and check outbound links if (direct) / (none) is the row climbing.

Why do Session source / medium and First user source / medium show different (direct) / (none) totals?

The two reports measure different things, so their (direct) / (none) totals rarely match. Session source / medium counts every session that arrived with no referrer and no campaign tag, while First user source / medium keeps the value from a user's very first session and applies it to every later session, new or returning. Put both reports side by side before concluding that untagged traffic has changed, since a gap here is usually a scope difference rather than new data.

Was This Article Helpful?

Let us know what you think!

See us more often in Google

One click marks Flowsery as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.

Before you go...

Flowsery

Flowsery

Revenue-first analytics for your website

Track every visitor, source, and conversion in real time. Simple, powerful, and cookie-free.

Real-time dashboard

Goal tracking

Cookie-free tracking

Related Glossary Terms

Related Articles