Direct / None in GA4 means the session arrived with no referrer and no campaign parameters. GA4 knows the visit happened. It knows nothing about where it came from, so it files it under source = direct and medium = none.
Most people read that as "someone typed our URL into their browser." That's almost never what it means. In the properties I have audited, actual typed-in traffic is a small minority of the Direct bucket. The rest is attribution that leaked somewhere between the click and the pageview.
Direct is where your other channels go to die. Every untagged email, every PDF link, every app click, and every stripped referrer ends up in the same pile, and that pile then gets credited with conversions the real channels earned.
This article covers what actually lands in Direct, how to tell how much of yours is fake, and what you can realistically fix.
- Direct / None means no referrer and no UTM parameters. It doesn't mean "typed the URL."
- The biggest contributors are untagged links: email clients, PDFs, chat apps, and anything sent by a colleague.
- HTTPS to HTTP downgrades strip the referrer entirely. So do most mobile apps and many privacy browsers.
- Direct isn't the same as Unassigned. Direct means GA4 knows there was nothing. Unassigned means GA4 had something it couldn't classify.
- If Direct is above 20% of sessions on a site with real marketing spend, treat it as a tagging defect, not customer loyalty.
What GA4 actually means by Direct / None
GA4 builds attribution from two inputs: the HTTP referrer header, and the UTM parameters in the URL.
If both are missing, there is nothing to work with. GA4 doesn't guess and doesn't leave the field empty. It writes direct as the source and none as the medium, and moves on.
That's the whole mechanism. Direct isn't a channel that people arrive through. It's the label GA4 uses when it has no information at all.
Direct isn't the same as Unassigned
These get confused constantly, and the confusion sends people chasing the wrong fix.
| Direct / None | Unassigned | |
|---|---|---|
| What GA4 has | Nothing. No referrer, no UTM | Something it can't classify, or a session with no source data |
| What it means | GA4 knows it doesn't know | GA4 got data that matched no channel rule |
| Typical cause | Stripped referrer, untagged link | A utm_medium value GA4 doesn't recognise |
| Typical fix | Tag your links, fix redirects | Fix your UTM values or add a custom channel group |
If your problem is a utm_medium=newsletter that GA4 refuses to file as Email, that's Unassigned, and I covered the six causes of it in unassigned traffic in GA4. If your problem is traffic arriving with nothing at all, keep reading.
Want to know if your tracking is leaking attribution? The Free GTM Audit checks the layer that feeds this data. Enter a URL, get a report in about 10 minutes. No signup.
What is actually hiding in your Direct bucket
Here is what really lands there, roughly in order of volume.
1. Untagged email links
The single biggest contributor for most businesses.
Desktop email clients like Outlook and Apple Mail don't send a referrer. If the link in your email isn't tagged with UTM parameters, the click arrives naked. GA4 sees no referrer, no campaign, and files it as Direct.
This is why so many companies conclude that "email doesn't drive traffic." It drives plenty. It just arrives anonymous.
2. Documents, PDFs, and slide decks
A link in a PDF, a Word document, a PowerPoint deck, or a signed proposal sends no referrer. Sales teams send these constantly. Every click is Direct.
3. Chat and messaging apps
Slack, WhatsApp, Signal, Teams, Messenger. Most strip the referrer or send nothing usable. Someone shares your article in a company Slack, twelve people click, and GA4 reports twelve people who apparently woke up and typed a 60-character URL from memory.
4. HTTPS to HTTP downgrades
If a secure page links to a non-secure page, browsers drop the referrer entirely. This is a spec-level privacy protection, not a bug.
It's rarer now that most of the web is HTTPS, but if any part of your funnel is still HTTP, you're burning attribution at that boundary.
5. Mobile apps and in-app browsers
Clicks from native apps often carry no referrer. The in-app browsers inside Instagram, Facebook, and LinkedIn are inconsistent about what they pass. Some traffic you believe is Direct is actually social.
6. Redirects that drop parameters
If your link is example.com/promo?utm_source=newsletter and your server redirects /promo to /promotion while dropping the query string, the UTM data dies in transit.
Marcin, a marketing lead at a Polish B2B firm, sent a launch email to 12,000 contacts with correctly tagged links. His CMS had a redirect rule that stripped query parameters on every URL ending without a trailing slash. Every single click landed as Direct.
Email showed 41 sessions in GA4. His email platform reported 2,900 clicks. The gap was not deliverability, it was a redirect rule nobody had looked at in three years.
7. Bookmarks and genuinely typed URLs
This is the thing everyone assumes Direct is. It's real, and it is usually the smallest slice.
Returning customers do bookmark you. People do type short branded domains. But if you have real marketing spend and Direct is 30% of your sessions, that isn't brand loyalty. That's tagging debt.
How to tell how much of your Direct is fake
You can't see inside the Direct bucket, because by definition there is nothing to see. But you can triangulate.
- Compare to your email platform. Take clicks reported by your ESP for a campaign. Compare to sessions GA4 attributed to Email in the same window. If the ESP says 2,900 and GA4 says 41, your email links are untagged or your redirects are eating parameters.
- Check the landing pages. In GA4, look at Direct sessions broken down by landing page. Direct traffic to your homepage is plausible. Direct traffic to
/blog/how-to-configure-consent-mode-v2-in-gtmisn't. Nobody types that. Deep landing pages in the Direct bucket are proof of lost attribution. - Look at new vs returning. Genuine Direct skews heavily to returning users. If most of your Direct sessions are first-time users landing on deep pages, the attribution is broken, not loyal.
- Click your own links. Send yourself the email. Click the link on a phone. Watch whether the UTM parameters survive to the landing page.
Step 2 is the fastest and the most damning. A first-time user arriving directly on a deep article URL didn't type it. Something stripped the source.
What you can actually fix
Roughly in order of return on effort.
Tag every outbound link you control. Email, newsletters, PDFs, slide decks, partner links, QR codes, in-app links, push notifications. If you own the link, it gets UTM parameters. This alone typically recovers the majority of fake Direct. Use the canonical utm_medium values, because the wrong ones create a different problem: see the UTM parameter guide.
Here is what a properly tagged email link looks like:
https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=2026-05-launch
utm_source is where it came from, utm_medium is email (one of GA4's canonical values, not newsletter, which lands in Unassigned), and utm_campaign identifies the send. Three parameters. That is the whole fix for the largest slice of your fake Direct.
The same applies to QR codes. A QR code on a poster or a package carries no referrer whatsoever, so an untagged one is guaranteed Direct. Encode the UTM parameters into the URL before you generate the code, because you cannot retrofit them once the poster is printed.
Fix redirects that drop query strings. Test by clicking a tagged link and watching the address bar. If the parameters vanish on landing, the redirect is the culprit.
Force HTTPS everywhere. Any HTTP page in the funnel is a referrer leak.
Configure cross-domain tracking. If your checkout or payment step sits on another domain, an unconfigured hop creates self-referrals and Direct sessions on return.
Accept the rest. Some Direct is structural and always will be. Chat apps, privacy browsers, and native app clicks will keep arriving anonymous, and no amount of tagging changes that. The goal isn't zero Direct. The goal is Direct you can explain.
One thing not to do: never invent attribution you don't have. I have seen agencies configure GTM to write a default utm_source onto untagged sessions so the Direct number looks smaller. That doesn't recover the lost information. It fabricates a source, poisons the channel report with sessions that never came from that channel, and makes the problem permanently invisible. A large, honest Direct bucket is worth more than a small, fictional one.
What Direct does to your reporting
The damage isn't that a number is wrong. It's that the wrong channel gets the credit.
Last-click attribution gives the conversion to the last known touchpoint. When email arrives as Direct, Direct gets the sale. Email looks like it does nothing. Budget moves away from email toward whatever channel is getting credit, usually paid search, which was already getting credit for demand it didn't create.
You don't just lose visibility. You actively misallocate spend, and the misallocation compounds every quarter you leave it in place.
That's why I treat a high Direct number as a tracking defect rather than a curiosity. It isn't a reporting inconvenience. It's a budget decision built on a false premise.
Frequently asked questions
What does Direct / None mean in GA4? Direct / None means the session arrived with no referrer and no UTM parameters. GA4 has no information about the source, so it labels it Direct. It doesn't mean the user typed your URL.
Is Direct traffic in GA4 good or bad? Neither by itself. A small Direct share from returning users is healthy. A large Direct share on a site with active marketing usually means links are untagged or referrers are being stripped, which means other channels aren't getting credit for work they did.
What percentage of Direct traffic is normal? For most sites with active marketing, 10-20% of sessions is a reasonable range. Above 20% is worth investigating. Above 30% almost always means untagged email, broken redirects, or missing cross-domain configuration.
Is Direct the same as Unassigned in GA4? No. Direct means GA4 knows there was no referrer and no campaign data. Unassigned means GA4 received data it couldn't match to any channel group, usually a non-standard utm_medium. They have different causes and different fixes.
How do I reduce Direct traffic in GA4? Tag every link you control with UTM parameters, fix redirects that drop query strings, force HTTPS across the whole funnel, and configure cross-domain measurement. You can't eliminate Direct, because chat apps and privacy browsers will always strip referrers.
Why is Direct traffic landing on deep pages? Because that traffic isn't really Direct. Nobody types a long article URL from memory. Deep landing pages in the Direct bucket mean the referrer or the campaign parameters were lost somewhere between the click and the pageview.
Next steps
Direct / None is the most misread report in GA4. It looks like loyalty and it usually means leakage.
Start with the landing page test, because it takes two minutes and it settles the argument. Open your Direct sessions, break them down by landing page, and look for deep URLs and first-time users. If you find them, your attribution is leaking, and the size of the leak is the size of the budget decision you're getting wrong.
Then tag everything you own. Most of the fake Direct in a typical business comes from email and documents, and both are entirely within your control.
If you want the tracking layer checked properly, the Free GTM Audit inspects what feeds this data. And if you would rather have it watched monthly than discovered by accident, that's what independent GA4 monitoring is for. €150/month, written report, no calls, cancel anytime. Full pricing here.
Sources and further reading
- GA4 default channel group definitions (Google)
- Referrer-Policy and referrer behaviour (MDN)
- Cross-domain measurement in GA4 (Google)
Is your GA4 attribution telling the truth?
The Free GTM Audit inspects the tracking layer that feeds your channel data: broken tags, consent gaps, and firing order. Enter a URL, get a report in about 10 minutes. No signup.
Start Free GTM Audit