top of page
owlga4direct (1).webp
London, UK · Serving UK/EU · GBP pricing

Why GA4 shows everything as Direct traffic.

Why GA4 shows everything as Direct traffic and how to fix it.

Direct traffic is supposed to mean people who typed your URL into a browser, or had it bookmarked. In practice, it means something closer to: traffic that arrived without enough information for GA4 to work out where it came from.

​

If your Direct traffic is suspiciously high, sitting at 30%, 40%, 50% or more of total sessions, it almost certainly does not reflect that many people typing your URL from memory.

 

It reflects attribution loss. Traffic from campaigns, emails, social posts, and referral sites that arrived without a readable source, got lumped into Direct because GA4 had nowhere else to put it.

​

This guide covers every common cause, how to diagnose which one you are dealing with, and what to do about it.​​​​

What "Direct" actually means in GA4.

When GA4 receives a session, it looks for two things to determine where the traffic came from: UTM parameters in the URL, and the HTTP referrer header that browsers send automatically when a user navigates from one page to another.

​

If neither is present, no UTM parameters and no referrer, GA4 has no signal to work with. It records the session as Direct with a source of (direct) and a medium of (none).

​

This is correct behaviour. GA4 is not making a mistake. It is accurately reporting that it does not know where this traffic came from.

 

The problem is upstream, somewhere between the user clicking a link and arriving on your site, the attribution information was lost.

​

Understanding why it was lost is the diagnosis. The fix depends entirely on the cause.

Cause 1: Missing UTM parameters on campaign links.

The most common and most fixable cause. If you send an email, publish a social post, or run a campaign without UTM parameters on the links, GA4 has no campaign information to read.

 

If the referrer header also gets stripped, which it frequently does in email clients, messaging apps, and some social platforms, the session arrives as Direct.

​

This is not GA4 failing. It is the campaign links not carrying the information GA4 needs.

​

How to diagnose it: Look at your Direct traffic volume on dates when you know you ran campaigns or sent emails. If Direct spikes on the same day as a send, the campaign links are almost certainly untagged.

 

You can also go to GA4 → Reports → Traffic Acquisition, add Session source / medium as a secondary dimension, and look for (direct) / (none) sessions arriving in volumes that do not match your expectation of actual direct visits.

​

How to fix it: Tag every external link pointing to your site with utm_source, utm_medium, and utm_campaign. Every email, every social post, every partner link, every QR code. Use a URL builder with approved values to ensure consistency.

 

This is the single highest-impact action for reducing unexplained Direct traffic.

For the full guide to UTM parameters, approved values, and naming conventions, see the UTM Parameters guide →.

Cause 2: Referrer stripping in email clients.

Even when UTM parameters are present on email links, the HTTP referrer header is routinely stripped by email clients. This matters because some analytics setups, particularly those relying on referrer rather than UTM parameters, lose attribution at this point.

​

For GA4 specifically, UTM parameters take precedence over the referrer header, so as long as your email links are correctly tagged with UTMs, referrer stripping in email clients should not cause Direct attribution. The UTM values will still be read from the URL on landing.

​

Where this becomes a problem: links in email signatures, auto-generated transactional emails, and PDF documents attached to emails, all of which are frequently untagged and arrive without a referrer. These will appear as Direct.

​

How to fix it: Tag every link in every email, including transactional emails, signatures, and automated sends. Treat email as a zero-referrer environment. UTM parameters are the only reliable attribution signal, and they need to be on every link.

Cause 3: Dark social and messaging apps.

"Dark social" refers to traffic arriving from links shared through channels that do not pass referrer information: WhatsApp, Telegram, Signal, Slack, iMessage, Facebook Messenger, and similar. When someone copies your URL and pastes it into a chat, or clicks a link from within one of these apps, the session typically arrives with no referrer and no UTM parameters.

​

GA4 records this as Direct. There is no way to fully recover this attribution, the referrer is simply not available.

 

But you can get a clearer picture of how much of your Direct traffic is likely dark social by looking at which pages receive it.

​

How to diagnose it: In GA4 Explorations, look at which landing pages receive the most Direct traffic. If your homepage dominates, that is likely a mix of genuine direct visits and dark social.

 

If specific content pages, blog posts, guides, or product pages receive significant Direct traffic disproportionate to their overall traffic share, that is a strong signal of dark social sharing.

​

What you can do about it: You cannot retroactively attribute dark social traffic, but you can reduce its future impact by adding UTM parameters to links you share yourself, in your own Slack messages, LinkedIn DMs, and email threads.

 

For content that circulates in private channels, consider adding a visible share mechanism with pre-built UTM-tagged URLs, which at least captures some of the sharing chain.

Cause 4: HTTPS to HTTP referrer loss.

When a user navigates from an HTTPS page to an HTTP page, browsers do not pass the referrer header. This is a browser security behaviour: HTTPS pages are considered secure, and browsers do not expose where a secure-origin user came from when they navigate to a non-secure destination.

​

If any pages on your site are still served over HTTP, which should be rare in 2026 but does still happen on subdomains, staging environments, and older microsites, traffic arriving from HTTPS sources will lose its referrer in transit and appear as Direct.

​

How to diagnose it: Check whether any entry points to your site are HTTP rather than HTTPS. In GA4, look at which landing pages receive high Direct traffic. If an HTTP page is receiving a disproportionate share, referrer loss on the HTTPS-to-HTTP transition is a likely cause.

​

How to fix it: Ensure your entire site is served over HTTPS, including subdomains and any redirect chains. If you are sending traffic to a staging or test environment over HTTP, do not tag those links with production UTMs. The referrer loss will inflate Direct in your live property.

Cause 5: Redirect chains stripping UTM parameters.

Redirect chains are a common cause of UTM parameter loss that is rarely diagnosed correctly. When a UTM-tagged URL goes through one or more redirects before reaching the final destination, UTM parameters can be dropped depending on how the redirect is configured.

​

The most common scenario: a marketing team tags a shortened URL or a redirect link, the redirect passes the user through to the final destination without preserving the query string, and GA4 reads the final URL with no UTM parameters and records the session as Direct.

​

How to diagnose it: Click your own UTM-tagged links and check the URL in the browser address bar once you land on the final page. If the UTM parameters are gone from the URL, a redirect is stripping them. You can also use a tool like Redirect Detective or follow the redirect chain manually.

​

How to fix it: Ensure any redirect passes the full query string to the destination URL. If you are using a URL shortener, use one that preserves query parameters. If you are using a redirect configured on your own server or CMS, check that it is a 301 redirect that passes the query string rather than a redirect that hardcodes the destination URL without parameters.

Cause 6: Safari Intelligent Tracking Prevention and Link Tracking Protection.

Safari's privacy features, Intelligent Tracking Prevention (ITP) and more recently Link Tracking Protection (LTP), can interfere with attribution in ways that inflate Direct traffic, particularly for iOS and macOS users.

​

Link Tracking Protection specifically targets certain URL parameters that Safari identifies as tracking-related. While Google's UTM parameters (utm_source, utm_medium, utm_campaign) are generally recognised as campaign-attribution parameters and allowed through, some third-party click IDs and tracking parameters are stripped before the user arrives on the destination page.

​

Beyond parameter stripping, Safari also hides the referrer header in certain cross-site navigation scenarios, particularly in Private Browsing mode. If a meaningful proportion of your audience uses Safari, typical for consumer brands, luxury goods, and any site with high iOS traffic, this can contribute measurably to Direct inflation.

​

How to diagnose it: In GA4 Explorations, create a segment filtering for Direct traffic and break it down by browser. If Safari shows a disproportionately high share of Direct compared to Chrome or Firefox for the same type of traffic, Safari's privacy features are likely contributing.

​

What you can do: Standard UTM parameters should survive Link Tracking Protection in most cases. Server-side tracking via GTM is the most robust solution for environments where client-side attribution is unreliable. It moves the attribution capture to the server before browser privacy features can interfere. For a full treatment of this issue, see the Link Tracking Protection article →.

Cause 7: Cross-domain tracking not configured.

If your site spans multiple domains, a main site and a booking platform, a marketing site and a checkout on a payment gateway, a main domain and a subdomain with a separate cookie scope, sessions can break at the domain crossing and restart as Direct on the second domain.

​

When a user arrives on your main site from a Google Ads campaign, browses, then clicks through to checkout on a separate domain, the checkout domain receives a new session. With no referrer and no UTM parameters visible on that page load, it records as Direct. If you measure conversions on the checkout domain, they are attributed to Direct regardless of the actual campaign that drove the user.

​

How to diagnose it: Look at Direct traffic on your confirmation or thank-you pages. If a significant share of conversions are attributed to Direct, particularly if that share is higher than the Direct share for entry pages, cross-domain attribution loss is the likely cause.

​

How to fix it: Configure cross-domain tracking in GA4 so that the _gl parameter is appended to links crossing domain boundaries, allowing GA4 to stitch the session together across domains. For the full configuration guide, see the Cross-Domain Tracking guide →.

Cause 8: Session timeout.

GA4 sessions expire after 30 minutes of inactivity by default. When a user returns to an open tab after the session has expired, GA4 starts a new session. With no new referrer and no new UTM parameters, the user did not click a new link, they simply came back to an existing tab, the new session records as Direct.

​

This is why long-consideration purchases, research-heavy products, and content that people read in stages often show inflated Direct traffic. The user may have originally arrived from a paid campaign, but by the time they convert, they are on their third or fourth session, all of which appear as Direct because they were tab returns after timeout.

​

How to fix it: Extend the GA4 session timeout to 2 to 4 hours in Admin → Data Streams → Configure tag settings → Adjust session timeout. This reduces the frequency of timeout-driven session restarts without materially distorting session counts. For more detail on this, see the Unassigned Traffic guide →.

Cause 9: Bot and automated traffic.

Some Direct traffic is not human at all. Automated crawlers, monitoring tools, uptime checkers, and security scanners visit pages without carrying referrer information or UTM parameters, and record as Direct unless filtered.

​

GA4 applies some bot filtering automatically, but it does not catch everything, particularly internal tools and custom monitoring scripts that are not in Google's bot database.

​

How to diagnose it: Look at your Direct traffic for unusual patterns: very short session durations, very high sessions on pages that humans rarely visit directly, or traffic spikes at regular intervals that correspond to monitoring schedules.

​

How to fix it: In GA4 → Admin → Data Streams → Configure tag settings, ensure bot filtering is active. For internal monitoring tools, either configure them to avoid your live GA4 property or add IP-based filters. If you use a known monitoring service, check whether it can be configured to send a custom user agent that GA4 can filter.

How to diagnose your Direct traffic systematically.

Rather than guessing, run this diagnostic in GA4 before deciding which fix to prioritise.

​

Go to Explore → Blank exploration. Add the following dimensions: Landing page, Session source / medium, Browser, Device category. Add Sessions as your metric. Filter to show only (direct) / (none) sessions.

​

This gives you a breakdown of your Direct traffic by landing page and browser. From there:

​

If the Direct traffic is concentrated on the homepage and a handful of popular pages, with a normal browser distribution, a significant portion may be genuine direct visits, bookmarks, and dark social. Focus on UTM tagging of your own outbound links to reduce the portion you can control.

​

If Direct traffic is concentrated on specific campaign landing pages, conversion confirmation pages, or pages that should never receive direct visits, that is a strong signal of UTM parameter loss, cross-domain issues, or redirect chain problems, all of which are fixable.

​

If Safari shows a disproportionate share, ITP and Link Tracking Protection are contributing. Consider server-side tracking.

​

If Direct traffic spikes on campaign send dates, UTM tagging is missing from campaign links.

Summary.

Direct traffic in GA4 is rarely what it looks like. In most cases, high Direct is a measurement problem, attribution information that existed but was lost somewhere between the user clicking a link and GA4 recording the session.

​

The most common cause by far is missing UTM parameters. If every campaign link, email, social post, and partner referral is consistently tagged, a large portion of unexplained Direct will disappear.

 

The remaining causes, redirects, cross-domain gaps, session timeouts, Safari privacy features, each have specific fixes that can be applied once the diagnosis is clear.

​

Start with the diagnostic exploration above. Identify which pages and which traffic patterns are driving your Direct volume. Then apply the fix that matches the cause, rather than trying to fix everything at once and not knowing which change made the difference.

Related services

​

​

​

bottom of page