Everything says Direct
Direct means this visit carried no signal about where it came from. Almost always the signal was lost on the way rather than never existing — and there are five specific places that lose it.
First: is it Direct, or Unassigned?#
Do not treat these as the same thing; they are two completely different faults.
| What you see | What it means | Where it is fixed |
|---|---|---|
Direct, with source (direct) and medium (none) |
AdPix decided this visit carried no attribution signal and deliberately wrote that tuple | This page |
Unassigned |
There is a source and medium, but no channel rule matched them | How each visit's channel is decided |
If the source column is not empty but the channel is Unassigned, your problem is not collection; it is the channel definitions.
The one-minute test#
Before any analysis, generate a campaign visit yourself and see how it is recorded.
utm_* parameters still there?Three possible outcomes, each with a different path:
- The address bar has the parameters and the card shows the right source. Collection is healthy; the problem is probably with that user's later visits — go to the consent section.
- The address bar has lost the parameters. A redirect ate them. Read the second section.
- The parameters are there but the card shows (direct). The event is not being sent, or is arriving late; start with No data is arriving.
The order to check in#
| # | Check | Symptom |
|---|---|---|
| 1 | Do the links carry any signal at all? | Social and newsletter traffic is Direct as a block |
| 2 | Is a redirect eating the query string? | The address bar has no parameters after the load |
| 3 | Was the marketing category declined? | The landing page is recorded correctly, later pages are Direct |
| 4 | Is your second domain missing from the list? | Your own domain sits at the top of the referrer list |
| 5 | A gateway outside the built-in list? | Converting sessions are all bunched under one referrer |
1. The links carry no signal#
AdPix reads attribution signal from the landing URL and the referrer. From the URL it reads:
- the five parameters
utm_source,utm_medium,utm_campaign,utm_contentandutm_term; - and the click IDs
gclid,wbraid,gbraid,fbclid,msclkid,ttclidandli_fat_id.
The precedence is fixed: click ID, then the UTM medium, then the referrer, and if none of the three is present, Direct. So an ad link carrying gclid resolves to Paid Search even with no UTMs at all.
The usual places an untagged link gets published:
- Newsletters and email. Most email tools do not add UTMs unless you switch it on. An untagged email is almost always Direct, because mail clients send no referrer either.
- Messaging apps. A link sent through Telegram or WhatsApp has no referrer. Without UTMs it is Direct.
- Social bios and QR codes. Same story.
- Ads whose final URL was typed by hand. One campaign out of ten is untagged, and that one lands in Direct.
Every link that comes into the site from outside and has money behind it needs at least utm_source and utm_medium. It is the only item on this list AdPix cannot do for you.
2. A redirect eats the query string#
This is the most common technical cause, and it leaves no trace of itself.
The tracker reads the parameters at the moment it runs on the page — that is, after every redirect. If anything in that chain drops the query string, the tracker has nothing to read and the visit is correctly recorded as Direct. The defect is not in AdPix; it is in the chain.
Where it happens:
- an
httptohttpsredirect that carries only the path; - a
wwwto non-wwwredirect (or the reverse) with the same mistake; - a trailing slash added or removed by the web server;
- a redirect to the canonical URL by an SEO plugin;
- link shorteners and ad-network tracking links that resolve to a fixed URL;
- a landing page that immediately forwards the visitor somewhere else.
How to check: open the ad link in a fresh tab and read the address bar once the page settles. If the utm_* parameters are gone, you have your culprit. To see the exact chain, open the network tab in developer tools with "preserve log" on and follow the 301 and 302 responses.
The fix: write the redirects so they preserve the query string, or publish the ad link pointing straight at the final URL — right protocol, right domain form, right trailing slash — so no redirect happens at all.
3. The marketing category was declined#
With the consent banner on, the attribution cookies fall under the marketing category, not statistics. So a visitor who accepts statistics and declines marketing still sends events, but __sov_ft and __sov_lt are never written.
The symptom is specific: the landing page is recorded correctly and the later pages of that same visit turn Direct — because the parameters were only on the first page's URL and nothing carries them forward.
There is a backstop here worth knowing about: alongside the cookies, each visitor's first and last touch is also stored durably on the server. When an event arrives with no signal at all, that stored copy is restored and the campaign is not lost. So declining marketing does not, on its own, kill attribution.
What you do lose is resilience: the durable copy is tied to the visitor ID, so clearing browser storage or moving to another browser starts the history from scratch. The category details are in Consent enforcement in the tracker.
4. A referral from your own domain#
Movement between subdomains of one domain is recognised and demoted automatically; you do not have to do anything. A domain with a different registrable root — a shop on one domain and checkout on another — is not.
The symptom takes two forms, and you should check for both:
- Your own domain sits at the top of the referrer list. The second domain is missing from the stream's domain list, so every internal hop is counted as a fresh acquisition.
- The second domain is full of Direct traffic. The domain is on the list and the hop is demoted correctly, but the visitor is a brand-new person on the second domain with no history for a campaign to be restored from.
The second form is what the cross-domain linker solves: the visitor ID travels with the click so both domains see one person. Both settings live under Admin → Data streams → Configure your domains, and the full path is in Cross-domain and subdomain measurement.
5. The payment-gateway return#
When a customer pays, the gateway redirects them back to your site and the browser reports that return as a referral from the gateway's domain. Left alone, the session that converts is filed under the bank's name and the ad channel looks unprofitable.
AdPix corrects this at collection time:
- The payment-gateway referral is demoted — exactly like a referral from your own domain, because it is a return leg, not an acquisition.
- Then that visitor's durable last touch is restored, so the session is not left with no campaign at all.
The built-in list covers the Shaparak switch, domestic gateways and the global processors, and it matches all of their subdomains.
If you use a local gateway, a payment intermediary or a bank authentication page that is not on the built-in list, its host has to be added to the property's own exclusion list. Until it is, every conversion is credited to that host. There is no console screen for this yet — the list is API-only and gated on the Fraud Protection feature, so on a Free property it is a support request. The endpoints and the confirmation test are in Referral exclusions.
Traffic that really is direct#
After all of that, some of your Direct traffic really is direct and has no fix:
- typed addresses and bookmarks — a large share of it is a sign of brand health;
- a link opened from a desktop application, a PDF or a document;
- mail clients that send no referrer;
- a hop from
httpstohttp, where the browser strips the referrer; - a strict referrer policy on the originating site.
So the goal is not to drive Direct to zero. The goal is that no channel you are paying for is hiding inside Direct — and the test at the top of this page measures exactly that.
After the fix#
Attribution in AdPix is computed at read time, but what is stored is the source and medium as they were at collection. So tagging your links today does not repair yesterday's visits: historical rows stay as they are. Set the report range to start from the date of the fix and compare from there.
Track the effect in Traffic acquisition rather than the acquisition overview — that report is session-scoped and shows the change sooner.
Frequently asked questions#
What is the difference between Direct and `Unassigned`?
Direct means AdPix decided this visit has no attribution and deliberately wrote the (direct)/(none) tuple. Unassigned means there is a source and medium but no channel rule matched them. The first is a collection problem, the second a channel-definition problem.
Does the payment gateway still steal credit for sales?
No. A return from a known payment gateway — the Shaparak switch, domestic gateways and global processors — is demoted at collection time and the visitor's real last touch is restored. A gateway that is not on the built-in list has to be added to the property's own exclusion list, which is API-only today and gated on Fraud Protection.
If a visitor declines the marketing category, do I lose attribution entirely?
Not entirely. The __sov_ft and __sov_lt cookies are not written, but AdPix also keeps a durable server-side copy of each visitor's first and last touch and restores it when an event arrives with no signal. What you lose is resilience — to cleared browser storage and to a switch of browser.
What share of Direct traffic is normal?
It depends on the business; a brand people type into the address bar earns a large Direct share legitimately. What is not normal is a campaign you are paying for right now being invisible in the report. The one-minute test at the top of this page answers exactly that.
Thanks — your feedback helps us improve the docs.