TL;DR, Quick Answer
7 min readDirect is not a channel, it is the bucket for everything the tool could not attribute. A session lands there when the request carries no Referer header and no campaign parameters, which happens on HTTPS to HTTP navigation, under a no-referrer policy, from native apps and messaging clients, from PDFs, through redirects, from untagged email and from QR scans. Shrink the bucket by tagging links, not by reinterpreting the number.
What is direct traffic?
Analytics tools file a session as direct traffic when the request arrives carrying no referrer and no campaign parameters, which makes the label a record of missing attribution data, not a record of people typing your URL into the address bar. Google Analytics 4 states the rule in its default channel group definitions: a session is Direct when "Source exactly matches '(direct)' AND Medium is one of ('(not set)', '(none)')". Read the number as a measurement gap and find which of the causes below is filling it.
Why is direct not a channel?
Direct is not a channel, it is the bucket for everything the tool could not attribute. Every other channel is defined by evidence the request carried, a referring hostname or a utm_medium value, while Direct is defined by the absence of that evidence, and an absence has no marketing behaviour attached to it. Treat a rising Direct line as an instrumentation alert and audit the links people are actually clicking, the same way you would audit the traffic GA4 never records at all.
GA4 draws the distinction one step further. Its Unassigned bucket is "the value Analytics uses when there are no other channel rules that match the event data", so a session that carries a source but matches no rule goes to Unassigned, while a session that carries nothing at all goes to Direct.
What actually lands in the direct bucket?
Seven mechanisms strip the referrer or the campaign tag before your script runs, and each produces a session indistinguishable from a bookmark click. The browser decides most of them, so no tag configuration recovers the source.
| Cause | What reaches your server | Why |
|---|---|---|
| HTTPS page links to an HTTP page | No Referer header | The W3C Referrer Policy algorithm returns no referrer on a secure to insecure downgrade |
Referring site sends Referrer-Policy: no-referrer | No Referer header | MDN: "The Referer header will be omitted: sent requests do not include any referrer information" |
Link carries rel="noreferrer" | No Referer header | MDN: the keyword instructs the browser "to omit the Referer header and otherwise leak no referrer information" |
| Native app or messaging client opens the link | No Referer header | The tap did not originate from an HTML document, so there is no referring address for the client to send |
| Link inside a PDF or an Office document | No Referer header | The reader hands the URL to the browser as a fresh navigation, not a document to document hop |
| Redirect chain that passes through an HTTP hop or a no-referrer service | Referrer lost at that hop | The Referrer Policy spec resets request's referrer policy from each redirect response, so one hop can drop it for the rest of the chain |
| Untagged email link or a QR code scan | No referrer, no UTM | The mail client or camera app opens the URL with nothing attached, and you added no campaign parameters |
How do referrer policies remove the referrer?
A referrer policy is a per-request rule that decides how much of the referring URL the browser puts in the Referer header. The W3C Referrer Policy specification sets strict-origin-when-cross-origin as the default referrer policy: it sends the origin, path and query string on same-origin requests, the origin alone on cross-origin HTTPS to HTTPS requests, and nothing at all on an HTTPS to HTTP downgrade. Under no-referrer the header never appears, and under origin you receive https://example.com/ with no path, enough to name the channel but not the page.
The downgrade rule surprises teams. The spec's algorithm returns no referrer "if referrerURL is a potentially trustworthy URL and request's current URL is not a potentially trustworthy URL", so a single non-HTTPS URL anywhere in your funnel converts real referral traffic into direct. Fix it by serving every hop over HTTPS, then read what browser referrer policies do to analytics before you blame the tool.

Why do apps, PDFs and QR codes arrive as direct?
Native apps, document readers and camera apps arrive as direct because the Referer header describes a document to document navigation and none of them start from a document. MDN defines the header as containing "the absolute or partial address from which a resource has been requested", and a Slack message, a price list PDF and a printed QR code have no such address to report. The fix is to put the source into the URL yourself.
That is what campaign parameters are for. Add utm_source and utm_medium to the link before it goes into the deck, the PDF, the newsletter or the QR generator, and the session arrives labelled even though the referrer is gone. Flowsery reads those parameters in its UTM campaign tracking, and the full parameter guide covers the naming rules that keep the labels readable across a team.
How do you calculate direct traffic share?
Direct traffic share is the count of direct sessions divided by total sessions for the same period, expressed as a percentage. Use it as a before and after measurement on a tagging project, not as a benchmark against other sites, because the number moves with your channel mix and your visitors' browsers.
direct traffic share = (direct sessions / total sessions) x 100
A site records 42,000 sessions in a month and 9,660 of them are direct. 9,660 divided by 42,000 is 0.23, so direct traffic share is 23 percent. The team tags every newsletter link, moves one legacy redirect from HTTP to HTTPS, and adds parameters to the QR code on its conference banner. Next month direct falls to 5,880 of the same 42,000 sessions. 5,880 divided by 42,000 is 0.14, a 14 percent share, and the 9 point difference now sits in email and event rows you can act on. Count sessions the same way in both periods, since session definitions differ between tools and a definition change alone moves the ratio.
How do you shrink the direct bucket?
Shrinking the direct bucket is a link hygiene project, not a reporting setting. Work through it in order of volume: tag email and newsletter links, tag every link you paste into Slack, LinkedIn or a community thread, tag QR codes and print URLs, tag links inside PDFs and slide decks, then audit your redirect chains for any hop that is not HTTPS.
Then check what your own site sends outward. A Referrer-Policy: no-referrer header on your pages makes you invisible in your partners' referral reports, a fair privacy choice as long as you make it deliberately. Publishers who want to stay attributable keep strict-origin-when-cross-origin and every outbound link on HTTPS.

Flowsery
Start FREE Trial
Real-time dashboard
Goal tracking
Cookie-free tracking
What should you check when direct traffic spikes?
A sudden jump in direct traffic points to a change in your links or your tracking script, not a surge of people remembering your domain. Check four things in order: a new redirect that dropped a campaign parameter, a Referrer-Policy header added to your site or to a partner's, a campaign that shipped without UTM tags, and a script that started firing before the query string was read.
Compare the spike against the same window in a second measurement source, because tools count the same traffic differently and a gap between two of them narrows the search fast.
Frequently Asked Questions
Does direct traffic mean people typed my URL?
No. Typed URLs and bookmarks land in direct, but so does every session whose referrer was stripped by a referrer policy, an HTTPS to HTTP downgrade, a rel="noreferrer" link, a native app, a PDF or a redirect. Direct is the bucket for everything the tool could not attribute, and typed URLs are one entry in it.
What is a normal direct traffic percentage?
There is no defensible benchmark, because the share depends on your channel mix, your visitors' browsers and how much of your link inventory carries campaign parameters. Measure your own number, tag your links, and measure again. The movement between those two readings is the figure that tells you something.
Why did my direct traffic go up after a site migration?
Migrations add redirect hops, and each hop can drop the referrer or strip the query string carrying your UTM parameters. The W3C Referrer Policy specification resets a request's referrer policy from each redirect response, so one misconfigured hop changes behaviour for the rest of the chain. Trace a real campaign URL through every redirect and confirm the parameters reach the final destination.
Does GA4 treat direct and unassigned the same way?
No. GA4 assigns Direct when "Source exactly matches '(direct)' AND Medium is one of ('(not set)', '(none)')", meaning nothing arrived at all. Unassigned is "the value Analytics uses when there are no other channel rules that match the event data", meaning something arrived but matched no rule, which points to a malformed utm_medium.
Can I recover the real source of a direct session?
Not after the fact. The Referer header either arrived or it did not, and no server-side processing reconstructs a header the browser never sent. Recover the source going forward by putting it into the URL as campaign parameters before the link is shared.
Does switching everything to HTTPS reduce direct traffic?
It removes one cause. The default strict-origin-when-cross-origin policy sends no referrer when an HTTPS page links to an HTTP page, so any HTTP URL in your funnel converts referral sessions into direct ones. Serving every page and redirect hop over HTTPS restores the origin on those requests, and leaves the app, PDF and QR causes untouched.
Why does Slack or LinkedIn traffic show up as direct?
A tap inside Slack or LinkedIn opens the link straight from the app, not from an HTML page, so the client has no referring address to send in the Referer header. The session arrives exactly like a bookmark click, indistinguishable from someone typing your URL. Add utm_source and utm_medium to every link before you paste it into a chat app or a social post, since that is the only way to label it before the referrer disappears.
What does rel="noreferrer" do to my traffic reports?
The noreferrer keyword instructs the browser to omit the Referer header and leak no referrer information at all, the same effect a full no-referrer policy has on an entire site. A click on that link lands in the direct bucket even though it started on a page you control, indistinguishable from a bookmark visit. Add campaign parameters to the link itself if you still want the source to show up in your reports.
Should I add Referrer-Policy: no-referrer to my own site?
That header keeps your site invisible in every partner's referral report, since none of your outbound clicks will carry a Referer header at all. It is a legitimate privacy choice as long as you make it on purpose, not a default setting left unexamined. Sites that want their outbound links to stay attributable keep strict-origin-when-cross-origin instead and serve every link over HTTPS.
What is the difference between the origin and no-referrer policies?
Under origin the browser still sends a Referer header, but trimmed to just the domain, something like https://example.com/ with no path or query string attached. Under no-referrer the header never appears at all, so the request looks identical to a typed URL. origin still names which site sent the click, no-referrer erases the source entirely.
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
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


What the Numbers Say About Average Bounce Rate by Industry
Nine tracked industries return a documented average bounce rate by industry ranging from 35.76% to 48.38%, sourced from Databox data dated September 2024.


Why Beforeunload vs Pagehide Decides If Analytics Survive
Comparing beforeunload vs pagehide shows why mobile skips beforeunload, blocks the back-forward cache, and why pagehide with sendBeacon flushes data reliably.


What Digital Experience Analytics Covers That Web Analytics Misses
Unlike event counting, digital experience analytics reconstructs the visit itself, using session replay, heatmaps, friction detection and journey analysis.


Why Pageviews vs Sessions vs Users Never Match on One Report
Comparing pageviews vs sessions vs users shows three separate counts that roll up into each other and rarely land on the same number twice.


How Session Timeout Rules Quietly Inflate Your Analytics
A session timeout closes an idle visitor's session, and the default 30-minute rule is why the same traffic reports different counts.


How to Tell What Is a Good Conversion Rate for Your Site
Benchmarks answer what is a good conversion rate differently for ecommerce, SaaS and lead gen, and a single median number hides more than it reveals.
Related Articles


What a Session Is in Web Analytics
In web analytics, a session is one group of a visitor's interactions, closed by inactivity, midnight, or a campaign change.


How Session Replay Works, and What It Cannot See
A session replay rebuilds a visit from DOM mutations and input events, not video. See what it captures, what masking hides, and how it differs from heatmaps.


Working Through the Average Order Value Formula Step by Step
The average order value formula divides revenue by orders, and a single discount code or return policy can quietly distort every number a team reports.

