Direct traffic is not a measurement channel. Stop reporting it like one.
What GA4 actually puts in the direct bucket, how to test the claims made about it, and the two metrics that should take its place in your monthly report.
It happens in almost every monthly review. Direct traffic is up forty percent. The brand lead reads it as awareness finally landing. The analytics lead says the tags are probably broken. The media agency says their flight is in market. All three are plausible, none can prove it, and the meeting moves to the next slide.
The reason it never resolves is that the report contains a category error. Direct sits in the channel table next to Paid Search as though it were a peer. It is not.
Direct is a residual, not a source
Every session runs through a provenance test. GA4 looks for a referrer header, then UTM parameters, then a click identifier, then a cross-domain linker parameter. If one resolves, the session gets assigned. If none do, it is recorded as direct / none.
Direct is not a description of how someone arrived. It is a record that GA4 could not determine how they arrived.
Every other row in the table has one shared cause. Direct has four, moving in different directions, in proportions that change monthly without anyone touching a campaign.
The four populations inside it
| Population | What it is | Direction |
|---|---|---|
| Brand demand | Typed URL, bookmark, HCP returning to a saved portal | The part worth reporting |
| Stripped provenance | AI assistants, in-app browsers, PDF viewers, Teams and Slack | Growing structurally |
| Tagging failure | The link existed but carried no parameters, or lost them in transit | Fixable, usually larger than expected |
| Internal traffic | MLR reviewers mid-cycle, agency QA, field teams, unfiltered corporate ranges | Noise. Exclude it, do not explain it |
The third row is heavier in biopharma than in most verticals. Approved email frequently ships without campaign parameters. Field-shared links get copied out of a system and pasted into a message. QR codes on leave-behinds and ISI cards point at a clean vanity URL nobody thought to tag. A television spot drives a vanity domain that redirects twice, and the parameters do not survive the second hop. Cross-domain movement between a branded site and a separate support hub breaks when the linker is misconfigured, and each of those sessions restarts as direct.
Three checks that decompose it
Landing page distribution. Real type-in traffic concentrates on the homepage and a few memorable entry points. Direct landing on deep pages, a locator, or a PDF is stripped provenance or a redirect problem, not someone typing from memory.
Timing correlation. Overlay direct volume against media flighting, print and conference drops, and MLR review windows. Review traffic produces sharp spikes that align with submission dates and vanish afterward. If nobody has checked this, it is usually the fastest win in the account.
Redirect chain testing. Follow the actual QR code, the actual vanity URL from the actual spot, with a header inspector. Test what shipped, not what was specified. Parameter loss on the second hop is common and invisible from inside GA4.
Where the AI traffic went
Much of what has been added to direct buckets recently arrived from AI assistants, and GA4 structurally cannot see most of it.
This is not new, which matters for anyone inclined to dismiss it as hype. SparkToro ran a controlled experiment in 2023 across 1,113 visits and sixteen platforms and found every visit from TikTok, Slack, Discord, Mastodon, and WhatsApp was misattributed as direct. The referrer has been leaking for years. Assistants are the first source large enough that people noticed.
For a biopharma brand the shape is specific. Assistants are well suited to synthesizing exactly what sits on your site: indication, dosing, safety, coverage, and where to get treated. Gated HCP portals are invisible to the crawlers feeding those systems, so the assistant answers from an unbranded source and the branded site receives a click with no provenance attached.
The case for direct as a real signal
None of this makes direct meaningless. In biopharma it is often the closest thing to a live awareness signal a brand team has, because upper-funnel spend has almost no clean digital linkage.
A Video Advertising Bureau analysis of sixteen pharma DTC television advertisers found 88 percent recorded their highest branded search volume once the television campaign launched. Ozempic more than doubled branded query volume in the week its first spot aired. Navigational demand responds to awareness spend, fast enough to be useful.
The mistake is not using direct as a demand proxy. It is reading that proxy off a row that also contains three populations moving for unrelated reasons. A tagging fix and a media flight produce identical shapes on that chart.
Testing the claim that media drove it
The most common explanation offered for a direct surge is that media went in market. Sometimes that is correct. The problem is that it is almost always asserted rather than tested, and it is asserted in only one direction. When direct rises during a flight, media is credited. When direct falls during a flight, nobody claims it. An attribution argument that only runs one way is not measurement.
The claim is testable with data you already have. Six checks, each independent. Any one of them failing should end the discussion.
| What is being claimed | What would have to be true | What kills it |
|---|---|---|
| Awareness drove people to the site | Branded search moved in the same window and direction | Branded search flat while direct rose |
| Media exposure caused it | Lift concentrated in exposed markets | Lift uniform across exposed and unexposed geographies |
| New people discovered the brand | The lift is new users | The lift is returning users |
| Media weight produced it | The curve builds and decays with flighting | Step change on a single date, then flat |
| People saw the ad and came direct | The lift lands on the homepage and brand entry points | The lift lands on campaign landing pages |
| Media drove incremental sessions | Platform clicks reconcile to measured sessions | Large click-to-session gap on that campaign |
Start with branded search. Awareness does not produce direct-only lift. People who encounter an ad overwhelmingly search rather than type a URL from memory, so a genuine awareness effect appears in branded query volume and direct together. If direct is up forty percent and branded search is flat across the same window, the conversation is finished in one slide. This is the cheapest test in the set and the one most likely to settle it.
Then run the geographic control. Media is nearly always geo-targeted or at minimum geo-weighted, which gives you a natural experiment nobody had to design. Split direct sessions by region into exposed and unexposed markets and compare the rate of change. Uniform lift across both is not a media effect. National broadcast complicates this, since there is no true unexposed control, but even national buys carry market weighting, and digital layers almost always vary geographically.
Read the shape, not just the direction. Awareness effects build, peak, and decay with weight. Tagging changes and technical events produce step functions that begin on an exact date and hold flat afterward. A square step starting on day one of the flight is not consumer behavior. It is a system change.
Which raises the confounder almost nobody controls for. Media launches ship new landing pages, new redirect rules, and new vanity URLs. The flight date and the site change date are frequently the same date. The correlation is real and the causal story is backwards, and no amount of staring at the trendline will separate the two. Only the geographic control and the landing page signature will.
One result gets misread as agreement. If the direct lift landed on campaign landing pages rather than the homepage, that traffic probably is the media’s traffic. It arrived without parameters. That is not brand lift, it is a tagging defect, and it means the platform-side numbers are also wrong. The correct conclusion is to fix the tagging, not to celebrate the awareness. Those two conclusions lead to opposite budget decisions.
Finally, reconcile the arithmetic. If the platform reports a click volume the property never recorded as sessions, the gap has to be somewhere, and direct is usually where. That is not inference, it is subtraction, and it is the least arguable evidence in the set.
What to report instead
Brand Demand Index. Direct plus branded organic, deduplicated, indexed to a pre-flight baseline, reported weekly and lag-correlated against media flighting. A leading indicator of awareness. Never attach a cost per acquisition to it, and never let it into an efficiency comparison against paid search.
Unattributed Rate. Direct plus unassigned as a share of sessions. A data quality metric, not a performance metric. Give it a threshold and an owner, and review it the way you would review a tag firing rate. When it moves, the response is an investigation rather than an interpretation.
Two metrics, two questions, no ambiguity about which one a change belongs to. It takes an afternoon of configuration.
What happens next
The share of sessions arriving with no usable provenance is going up, not down. Consent enforcement removes some, referrer policies remove more, in-app browsers strip headers by design, and assistants are adding volume faster than the fixes are landing.
Frameworks that assume every session can eventually be attributed will keep degrading, and that monthly argument will keep happening. The ones that hold up separate the demand signal from the data quality problem and report each honestly. That is a smaller change than it sounds like. It is mostly a decision to stop pretending a residual is a channel.
Interested in reconciling your GA4 data? Turning direct — and the rest of the channel table — into numbers you can defend is the core of our Analytics & Measurement work.
See how we can help →More from Thinking: The 76% conversion rate that wasn’t · You can rank #1 on Google and still be invisible in AI search