Skip to content
Analytics

What Is Unassigned Traffic in Google Analytics 4?

TL;DR
  • Unassigned traffic is what Google Analytics 4 reports when a source exists but no channel rule matches the event data.
  • Direct is narrower: source exactly (direct) and medium (not set) or (none).
  • On a site we run, 856 visits (53%) over 7 days arrived with no referrer and no campaign tag, and 798 of those started on a page other than the homepage.
  • A link tagged utm_source=chatgpt.com lands in a named source. The same link untagged lands in Direct.
  • Matching direct visits to AI reads by timing found only 1 to 2% more matches than chance.

Unassigned traffic in Google Analytics 4 is the value Analytics uses when no other channel rule matches the event data. Something in the event carried a source, and that source fit none of the rules in the default channel group.

Direct is a different case, and the two get confused constantly.

Direct means the browser sent nothing to match

Google's default channel group defines Direct as source exactly (direct) and medium (not set) or (none). The help page describes those users as arriving via a saved link or by entering your URL. No referrer, no campaign parameter, nothing for a rule to read.

Unassigned is what happens when data did arrive and still matched nothing. A source was present. It was just unreadable to the ruleset.

DirectUnassigned
What the event carriessource (direct), medium (not set) or (none)a source that matches no channel rule
What it usually meansa saved link, a typed URL, or a link whose referrer was missinga tag Analytics could not place
What you can changethe link, or your page's referrer policythe campaign tag itself

The practical difference: unassigned is usually fixable at the link. Direct is a record of an absence. You cannot add a tag to a visit after the fact.

Referrer behaviour explains a lot of it. MDN documents strict-origin-when-cross-origin as the default policy when a site sets none. On a same-origin request the browser sends the origin, path and query string. On a cross-origin request over HTTPS it sends the origin only. From HTTPS to HTTP it sends no Referer header. A link marked rel=noreferrer sends no referrer at all.

Many apps open links with no referrer. Email clients and chat apps often send none.

That leaves the visit looking typed.

We see it in our own numbers. On a site we run, over 7 days, there were 5,774 pageviews and 1,628 visits (a visit is a run of pageviews with gaps of 30 minutes or less). Counted by pageview, 3,841 pageviews (66.5%) had no outside referrer, because a click 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.

Of those 856, 798 (93%) started on a page other than the homepage. 58 started on the homepage. People rarely type a deep address by hand, so most of that so-called direct traffic was a link whose referrer was missing.

The 30 day window tells the same story. Of 6,745 visits, 3,035 (45%) arrived with no referrer and no tag. 2,802 of those (92%) started on a page other than the homepage, and 233 started on the homepage.

How Kymo counts visits and their sources goes through the method if you want the detail.

A campaign tag moves the visit to a named source

ChatGPT adds utm_source=chatgpt.com to links in its answers. Over 30 days on the same site, 360 visits (5.3%) carried that tag and no referrer. A tool that reads only the referrer would have filed every one of them as Direct. A tool that reads utm_source puts them under ChatGPT.

That is the whole mechanism. The tag changes where the visit lands. The referrer, or its absence, does not.

Most unassigned traffic comes from a small set of causes. An unrecognised utm_medium value is one: you write utm_medium=newsletter and no channel rule claims it. A misspelled tag is another: utm_sorce=chatgpt.com sends a parameter nothing reads, and the visit falls through. Fix either at the source and the next visit lands where you expect.

ChatGPT-User (OpenAI's live fetcher) is the agent OpenAI uses when a person asks for a page in the moment. It is a separate entry from OAI-SearchBot, and the two do different jobs.

Timing cannot separate AI visits from direct traffic

The question people actually ask is which of these direct visits came from an AI assistant. One tempting method: match a direct visit to an AI assistant's read of the same page in the 10 minutes before. We tested it. It found only 1 to 2% more matches than chance, with no peak in the first 2 minutes.

Timing does not work. Do not build a report on it.

Crawler hits and AI-referred visitors are two different measurements

A crawler hit is a server-side event. Kymo counts those with its own receiver, which classifies crawler user agents into three groups: live fetches made for one person's question, indexing crawlers building a search index, and training crawls. ChatGPT-User, Claude-User and Perplexity-User are live fetchers. OAI-SearchBot, Claude-SearchBot and PerplexityBot are indexers. GPTBot, ClaudeBot, Bytespider and CCBot (Common Crawl) are training crawlers, and they send no traffic.

Not every robots.txt line is a crawler. Applebot-Extended (a robots.txt control token, not a crawler) has no user-agent and will never appear in a log. Treating it as a visitor is a common mistake.

The full set is in Every AI Crawler That Might Visit Your Site in 2026, and the ongoing series lives under AI crawlers.

The humans AI sends you are the other half. Many of those visits arrive with no referrer and no tag, which parks them in the same bucket you have been calling Direct. Reading the AI report shows what Kymo does with them: per page, how often AI engines read it, how many people AI answers sent there, and which of those people completed a goal.

What to do about it

Fix the tags you control. Add utm_source to links you place yourself. Check your Referrer-Policy. Then measure the result rather than guessing.

Publishing an llms.txt file is a cheap bet. Adoption is partial, no major operator has publicly committed to honouring it, and publishing the file is not the same as a crawler fetching it. Only your own server sees which one happened. It is not a ranking lever and not a requirement.

If you are weighing tools, Before You Buy an LLM Visibility Tool, Ask These 8 Questions will save you a month. You can see the shape of the dashboard in the live Kymo demo dashboard with no login. The wider playbook is in The Small Business Guide to AEO.

Fix your campaign tags and your referrer policy if you're running links you control. Start watching your own logs if you're the one who has to explain where the traffic went.

Stop guessing. Watch.

Start tracking it on your own site and you can see which pages AI engines read, how many people AI answers send there, and which of those people complete a goal. That comes from your own server and page data, not from a chatbot asked to guess at your visibility. If you want the lighter option 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