Skip to content
Analytics

What Does (direct) / (none) Mean in Google Analytics?

TL;DR
  • (direct) / (none) means the visit reached Analytics with no referrer and no campaign tag attached.
  • It does not mean the person typed your address. Most of it is links whose referrer never arrived.
  • Browsers default to strict-origin-when-cross-origin, which trims what gets passed along, and many apps send nothing.
  • ChatGPT appends utm_source=chatgpt.com to the links in its answers, so those visits are not direct if your tool reads the tag.
  • On one of our own sites, 360 visits in 30 days (5.3%) carried utm_source=chatgpt.com and no referrer at all.

The source is (direct) and the medium is (none) or (not set), which means no referrer and no campaign tag reached Analytics for that visit.

That is the whole definition. Everything else people read into the label is guesswork. The name describes a missing piece of data. It does not describe a type of person.

What GA4 means by Direct

Google's definition is narrower than most people assume. The Direct channel is source exactly (direct) and medium (not set) or (none), as set out in Google Analytics 4 default channel groups. Google describes Direct as users arriving via a saved link or by entering your URL. Unassigned is the value Analytics uses when no other channel rule matches the event data.

Read that again and notice what it does not say. Direct is a fallback. It fills in when the incoming data has nothing else to work with. Bookmark clicks land there. Links from apps that strip the referrer land there. Any visit where your UTM tag got lost on the way lands there too.

Why the referrer goes missing so often

The browser decides how much referrer information to pass along, and the default is restrictive. According to MDN's Referrer-Policy reference, strict-origin-when-cross-origin is the policy applied when a site sets nothing. On a same-origin request it sends the origin, path and query string. On a cross-origin request it sends the origin only, and only while the protocol stays HTTPS to HTTPS. It sends no Referer header at all from HTTPS to HTTP. A link marked rel=noreferrer sends no referrer, full stop.

SituationReferer header sent
Click to another page on the same siteOrigin, path and query string
Cross-origin click, HTTPS to HTTPSOrigin only
Cross-origin click, HTTPS to HTTPNothing
Link marked rel=noreferrerNothing
Links opened by many email clients, chat apps and native mobile appsOften nothing

That last row matters most. Many apps open links in a way that drops the referrer entirely. Not all of them, and not every time, but often enough that a large share of your real traffic arrives anonymous. The browser did not fail. The app simply never sent a header.

The label says nothing about whether the person typed your address

This is where the (direct) row earns its bad reputation. People look at it and picture a customer carefully typing their domain into the address bar. The data does not support that picture.

On one of our own sites, over 7 days, we recorded 5,774 pageviews and 1,628 visits. A visit here means a run of pageviews with gaps of 30 minutes or less. Counted by pageview, 3,841 pageviews (66.5%) had no outside referrer, because clicking from one page to another on the same site carries none. Counted by visit, 856 visits (53%) arrived with no referrer and no campaign tag. The pageview figure is inflated by internal navigation. The visit figure is the one to reason about.

Of those 856 visits, 798 (93%) started on a page other than the homepage. Only 58 started on the homepage. People rarely type a deep address by hand. If nearly all of your direct visits begin somewhere other than your front door, most of that traffic is a link whose referrer went missing. A saved link to a bookmark, a shared URL in a group chat, a newsletter click that lost its tags. The landing page is a clue. It is never a name for the source.

ChatGPT visits are sitting in your direct row

ChatGPT appends utm_source=chatgpt.com to the links in its answers. That single detail changes the math. A visit that arrives with that tag and no referrer is not direct traffic, provided your tool reads utm_source at all.

Over 30 days on the same site, 360 visits (5.3%) carried utm_source=chatgpt.com and no referrer. A tool that reads only the referrer would have counted every one of them as direct. They would have vanished into the same anonymous bucket as your bookmarks and your dark social shares. If you want a practical way to find out whether this is happening to you, Does My Business Show Up in ChatGPT? How to Find Out walks through it.

You cannot find AI visits by timing them either

We tried the obvious workaround. Match a direct visit to an AI assistant's read of the same page in the 10 minutes before it, and call that an AI-sent visit. It found only 1 to 2% more matches than chance, with no peak in the first two minutes. Timing cannot tell you which direct visits came from AI. Anyone selling you that method is selling you noise.

What to measure instead

Measure the two things you can actually observe: which AI crawlers read your pages, and which visits arrive with tags that identify their source.

Kymo's server-side receiver classifies crawler user agents into three categories. ai_answer covers a live fetch made for one person's question, such as ChatGPT-User, Claude-User or Perplexity-User. indexing covers crawlers building a search index for later answers, including OAI-SearchBot, Claude-SearchBot and PerplexityBot. training covers bulk crawls such as ClaudeBot (Anthropic's training crawler) and GPTBot. The bot taxonomy explains the split, and the AI crawler directory lists every agent Kymo recognises. Worth knowing: tokens like Applebot-Extended (a robots.txt control token, not a crawler) never show up in a log, so they are tracked separately from real crawlers.

The AI Traffic page then shows, per page, how often AI engines read it, how many people AI answers sent there, and which of those people completed a goal. Crawler activity does not count against your event limit. You can see the whole thing without an account on the live Kymo demo dashboard.

Plans start at $9 a month for Solo, up to 10,000 events a month, or $90 a year. Studio is $29 a month or $290 a year, up to 100,000 events a month. Both include every feature. The difference is event volume.

If you want the writing side, The Small Business Guide to AEO covers the basics, and AEO Content: What to Write So AI Engines Quote You goes deeper on structure. For a monitoring approach that starts from your own server logs rather than a list of prompts, read AI Search Monitoring From Your Own Site, Not a Prompt List.

Stop guessing. Watch

Point your analytics at what AI engines actually do on your site: which pages they read, how many people their answers send you, and which of those people buy. Start tracking it and compare that with tools that ask a chatbot and report a guess. If you want a look first, the free AI visibility check reads a URL from public signals, so your site does not need Kymo installed, and the report arrives by email.

Start free → 14-day free trial. No card required.

Published Oct 21, 2026·All posts·The AEO guide