Foundgrove
← All posts

SEO · 9 min read

Direct Traffic in GA4: Where Your Leads Go to Die

Summary

Direct is GA4's junk drawer, and it is packed with the channels that book your jobs. Here is what is hiding in there and how to tag your way out.

By Hyder Shah, Founder & CEO · Published July 13, 2026 · Updated July 13, 2026

Open GA4, look at your channel report, and find the row labeled Direct. If it is a third of your sessions, you do not have a traffic report. You have a guess with a chart on top of it.

This matters more for a service business than for anyone else, because the channels that actually book your jobs are exactly the ones that arrive without a source: the link on your Google Business Profile, the estimate you texted, the QR code on the truck. They all pile into the same bucket, and then someone cuts the budget for the channel that was paying for itself.

What is Direct traffic in GA4, really?

Direct is not a marketing channel. It is the label GA4 applies when a session shows up with zero source information, and the rule is mechanical: a session is Direct when 'Source exactly matches (direct)' AND 'Medium is one of ((not set), (none))', per Google's default channel group documentation.

Google's own explainer says the quiet part out loud: '(direct) / (none)' in Google Analytics 'represents website traffic that doesn't have a clear referral source' (Google Analytics Help). Not traffic that came directly. Traffic Google could not identify.

Its ugly cousin is Unassigned, which Google defines as 'the value Analytics uses when there are no other channel rules that match the event data.' Learn the difference now, because it decides how you tag: Direct means GA4 got no data. Unassigned means GA4 got data it has no rule for (almost always because somebody invented a utm_medium value like gbp or print).

Why is your Direct bucket so large?

There are four causes, and only one of them is the innocent one everybody assumes. Google lists the rest itself: links that lack UTM parameters, redirects (including a secure page sending a visitor to a non-secure one) that strip parameters, URL shorteners like bit.ly that strip referral details, links from offline documents such as PDFs and Word files, and ad blockers interfering with tracking.

  • Genuinely direct — someone typed your URL or used a bookmark. This is the only cause that is fine to leave alone.
  • Untagged channels you own — the GBP website link, your Yelp profile, an emailed invoice, a texted booking link. Real marketing, zero attribution.
  • Technical breakage — a redirect chain, an http hop, a link shortener, or a booking subdomain that eats the parameters on the way through.
  • Referrer stripping — apps, PDFs, and some desktop software hand the browser no referrer at all, so GA4 has nothing to read.

Notice what three of the four have in common. They are fixable in an afternoon, for free, with no new software.

How much Direct traffic is normal for a service business?

There is no credible published benchmark, so ignore the percentage and use a better test: if more than roughly 20% of your Direct sessions land on a page other than your homepage, that traffic is not bookmarks. We use that threshold as a working rule, not an industry stat. People who type your URL land on the homepage. Nobody types /emergency-ac-repair or /free-consultation from memory.

Run it in five minutes. Open Reports, then Landing page, add Session default channel group as a secondary dimension, and filter to Direct. Every deep landing page in that list is a link somebody clicked from somewhere you failed to tag.

One nuance most posts miss: GA4 already tries to save you. Google's own example of session attribution says that when a user returns via a bookmark, 'Because of the last-non-direct-click attribution model, this second session is also attributed to Domain B' (Google Analytics Help). Returning visitors inside the lookback window get credited back to their original source. So a fat Direct bucket is rarely loyal customers. It is sessions with no history at all.

Which revenue channels are hiding inside Direct right now?

For a local service business, the five biggest sources of untagged, high-intent traffic are the Google Business Profile website link, third-party profile links (Yelp, Nextdoor, Angi, Thumbtack), texted links from your own techs and front desk, offline QR codes and printed URLs, and links inside emailed estimates or invoices. Every one of those visitors is further down the funnel than a blog reader, and every one of them is currently anonymous.

GBP is the painful one. It is often the single highest-converting entry point a local business has, and untagged it can land in Direct, in Organic Search, or in Referral depending on device and app. You cannot tell which. If you are investing in Google Business Profile optimization, tagging that one link is the difference between a channel you can defend in a budget meeting and a channel you cannot.

AI assistants are the new entrant. GA4 now ships a dedicated AI Assistants channel for 'users arrive at your site from sources like ChatGPT, Gemini, Deepseek, Copilot, or Grok' — and it fires on the referrer: the medium 'is set to ai-assistant... if the referrer matches a list of AI Assistants.' No referrer, no credit. A link copied out of a desktop app or pasted into a message drops straight into Direct. Worth knowing before you judge your GEO program on a report that cannot see it. (Note that Google counts AI Overviews and AI Mode as Organic Search, not as AI Assistants.)

What is the UTM naming standard you should actually use?

Three rules, and they are all enforced by Google's own documentation. One: lowercase everything. Google states that 'Parameter values are case sensitive, e.g. utm_source=google is different from utm_source=Google,' and its best-practice guidance adds that 'Keywords with different capitalization, such as Meta and meta, are treated as different values. Use lowercase as a standard practice' (Google Analytics Help).

Two: always set utm_source, utm_medium and utm_campaign together. Google is explicit that 'Missing UTM parameters will result in (not set) values being present in reporting.' Half-tagging a link is its own kind of junk drawer.

Three, and this is the one nobody tells you: utm_medium is the load-bearing field. The medium decides which channel bucket you land in. Invent a medium and GA4 has no rule to match, so the session goes to Unassigned. Here is the standard we would put in place on day one.

Link you controlutm_sourceutm_mediumChannel it lands in
GBP website + booking linksgoogle-business-profileorganicOrganic Search
Yelp / Angi / Thumbtack profileyelpreferralReferral
Nextdoor / Facebook page linknextdoorsocialOrganic Social
Emailed estimate or invoiceinvoiceemailEmail
Texted appointment linkfront-desksmsSMS
QR code on truck or flyertruck-wrapofflineUnassigned (build a custom channel group)

The verdict: use the mediums GA4 already recognizes — organic, referral, social, email, sms, cpc — and put the detail in utm_source, where it costs you nothing. The last row is the honest exception. GA4 has no offline medium, so print and QR traffic will sit in Unassigned until you create a custom channel group for it. That is fine. Unassigned-but-labeled beats Direct-and-invisible.

Which links should you never tag with UTMs?

Never tag an internal link. Google defines utm_source as the 'Referrer' — and a link from your own page to your own page has no referrer to record. Tagging your nav, footer, or CTA buttons pollutes source and medium with your own site's values, which is exactly the fragmentation Google's best-practice table tells you to avoid.

  • Internal links — nav, footer, buttons, related posts. Use the Pages report or a click event instead.
  • Google Ads final URLs with invented values — Google's recommended manual values are utm_source=google and utm_medium=cpc. Do not get creative and split your own paid data.
  • Links through a URL shortener that drops parameters — test it once; if the UTMs do not survive the hop, the tag is decorative.
  • Links to your own booking or payment subdomain — that is a cross-domain problem, not a campaign. Set up unwanted referrals instead (GA4 allows a maximum of 50 per data stream).

How do you fix Direct in the right order?

Order matters, and the whole job is about a week of part-time work with no new spend. Do the diagnosis before the tagging, or you will tag the wrong things.

  • Day 1 — prove it is not bookmarks. Direct sessions by landing page. Deep pages mean untagged channels.
  • Day 1 — tag GBP. One link, biggest payoff. Lowercase, all three parameters, medium=organic.
  • Day 2 — tag every other link you own. Profiles, email signatures, invoices, texted links, QR codes.
  • Day 3 — kill the leaks. Walk every redirect and shortener and confirm the parameters survive to the landing page.
  • Day 4 — configure unwanted referrals for your booking and payment domains so a returning visitor is not re-credited to your own scheduler.
  • Day 5 — add a How did you hear about us? field to the form. It is the ground-truth tiebreaker analytics can never give you.

If phone calls are how you actually get booked, pair this with call tracking — a channel report that is honest about clicks but blind to calls is only half fixed. The same logic applies on the paid side, where ad attribution breaks in its own ways.

What does a fixed channel report change about your budget?

Everything downstream of it. If Direct is a third of your sessions, then up to a third of your booked jobs have no channel attached, and every budget decision you make from that report is a coin flip dressed up as data. Cut the channel that looked flat, keep the one that looked strong, and you may have it exactly backwards.

We run a 90-day kill switch: a channel with no qualified leads in 90 days gets cut. That rule is only defensible when the data is clean. Killing a channel on the strength of a report where a third of the sessions are unlabeled is not discipline, it is a guess with a spreadsheet. Fix the tagging first, then start counting. And count booked calls, not sessions — the SEO program that wins is the one whose report you can actually defend.

Want a second pair of eyes on where your leads are really coming from? We will pull your channel report apart, show you what is buried in Direct, and hand you the tagging plan. Get my free audit.

Where does this fit in your stack?

If you're running a US service business, the playbook in this post pairs with our full services lineup and applies cleanly across our supported industries and US locations. If you want help implementing it, book a free strategy call — we'll review your current setup and prioritize the next three moves.

For the deeper engagement details, see our SEO service. New to the terminology here? Our SEO & marketing glossary defines every acronym in this post.

What are the most common questions about this topic?

Common questions readers send us about this topic.

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

It means GA4 received no source information for that session. Google's rule is that Direct is assigned when the source exactly matches (direct) and the medium is (none) or (not set). Google's own help page describes it as traffic that 'doesn't have a clear referral source.' It is not a claim that the person came to you directly — it is an admission that Analytics could not tell where they came from.

Why is my direct traffic so high in Google Analytics?

Usually because links you own are untagged. Google lists the causes: links without UTM parameters, redirects that strip parameters (including a secure page sending traffic to a non-secure one), URL shorteners that drop referral details, links inside offline documents like PDFs, people typing your URL, and ad blockers interfering with tracking. For a service business the untagged Google Business Profile link is the single most common culprit.

How much direct traffic is normal for a local business?

There is no credible published benchmark, so stop chasing a percentage. Use a diagnostic instead: segment your Direct sessions by landing page. Anyone who typed your URL or used a bookmark lands on the homepage. If a meaningful share of Direct sessions are landing on deep pages like a service page or a booking page, those are untagged channels, not loyal customers, and they can be recovered with tagging.

Does Google Business Profile traffic show up as Direct?

It can, and that is the problem — an untagged GBP website click may land in Direct, in Organic Search, or in Referral depending on the device and the app the person used, and you cannot tell which from the report. The fix is not to guess. Tag the website link on your profile with UTM parameters so the traffic lands in a bucket you chose deliberately, every time.

How do I tag my GBP website link with UTMs?

Edit the website field on your Business Profile and append three lowercase parameters, for example utm_source=google-business-profile, utm_medium=organic and utm_campaign=gbp. Medium=organic maps to GA4's Organic Search channel rule, so your channel totals stay honest while utm_source lets you segment GBP out. Use the same tagging on the booking or appointment link. Google warns that missing parameters produce (not set) values, so always set all three.

Should I put UTM parameters on internal links?

No. Google defines utm_source as the referrer, and a link from your own page to your own page has no referrer. Tagging internal navigation, buttons or footer links overwrites the real source of that visit with your own site's values and fragments your reporting. If you want to know which internal links get clicked, use the Pages report or a click event. UTMs are only for traffic arriving from off your site.

Why do AI assistants send traffic that lands in Direct?

GA4's AI Assistants channel is referrer-based: Google sets the medium to ai-assistant when the referrer matches its list of AI assistants such as ChatGPT, Gemini, Copilot or Grok. When there is no referrer — a link copied out of a desktop app, or pasted into a message — GA4 has nothing to match, so the session falls into Direct. Note that Google counts AI Overviews and AI Mode as Organic Search, not as AI Assistants.

What is 'unassigned' traffic in GA4?

Unassigned is, in Google's words, 'the value Analytics uses when there are no other channel rules that match the event data.' In practice it means someone invented a utm_medium — gbp, print, local, flyer — that matches none of GA4's channel rules. Direct means GA4 got no data. Unassigned means GA4 got data it has no rule for. The fix is to use mediums GA4 already recognizes, or build a custom channel group.

About the author

Hyder Shah

Founder & CEO, Foundgrove

Hyder Shah is the founder of Foundgrove, an SEO and GEO agency for US service businesses. See our editorial policy for how these guides are researched and reviewed.

Want help applying this to your business?

Book a free 30-minute call. We'll review your current acquisition stack and show you the three highest-leverage moves for your industry and state. Or read how our SEO service works.

Free SEO & AI visibility auditGet my free audit