Direct is not a traffic source. It is the absence of one. When a confirmed sale is labelled Direct, the honest reading is not that the customer typed your name into a browser. It is that the measurement lost the thread somewhere between the advertisement and the money, and the most common place to lose it is the boundary between two domains.
Answer first
If your checkout, booking engine or scheduler lives on a different domain from your marketing site, the browser treats it as a different website. The session restarts, the campaign information is left behind, and the sale is recorded as Direct or as a referral from your own site. The fix is three settings and one verification: list every domain in the journey under cross-domain measurement, add those same domains as unwanted referrals, confirm the link decoration survives the hand-off, and capture the click identifier first-party in case the destination strips it. Most accounts recover the majority of their missing evidence from that alone.
What actually happens at the boundary
Analytics identifies a returning visitor with a first-party cookie, which by design can only be read by the domain that set it. When somebody moves from your site to a booking engine on another domain, the destination cannot read the cookie your site wrote. It has no idea this is the same person, so it starts a new session with a new identifier.
The campaign that brought the visitor in is attached to the session that just ended. The new session has nothing, so it is recorded as Direct. If the destination can see where the visitor came from, it records your own site as a referrer instead, which is the same break wearing a different label. Analytics people call that a self-referral, and it is one of the clearest fingerprints of this problem.
Cross-domain measurement solves it by having the first site append a parameter to the outgoing link, carrying the identifier across. The second site reads it, adopts the identifier, and continues the session. Nothing is inferred; the thread is physically handed over.
The two symptoms
A large Direct share on money pages. Look only at your confirmation, thank-you or receipt page. On a site with healthy measurement, Direct on that page is small. If it is a third or more of your sales, the hand-off is leaking.
Your own domain in the referral report. If your marketing site appears as a source of traffic to your own booking system, sessions are being restarted at the boundary. Nobody arrives at your checkout from a foreign site called your own homepage.
Confirm it in ten minutes
- Open your analytics and filter to the page shown after a purchase or booking. Look at session source and medium. Note the Direct share.
- Open the referral report for the same period and look for your own domains.
- Click one of your own ads, complete the journey to the point where the domain changes, and read the address bar. If the destination URL carries no linker parameter, the hand-off is not configured.
- Do the same on a phone. Mobile browsers are stricter about cookies, and some breaks only appear there.
If checks one and two both look wrong, you have confirmed it. You do not need a tool for this.
The fix, in the order it pays
Configure cross-domain measurement. In GA4, open Admin, then the data stream, then Configure tag settings, then Configure your domains. List every domain in the journey, including the one you do not own. This is the setting that makes the linker parameter appear.
Add unwanted referrals. In the same tag settings, list those domains again as unwanted referrals so arriving from them does not start a fresh session. Cross-domain measurement and referral exclusion are two different settings that solve two halves of the same problem, and doing only the first is the usual reason a fix half works.
Verify the decoration survives. This is the step most people skip and the one that decides whether the fix holds. Click an ad, cross the boundary, and read the final URL. Some third-party systems strip query parameters they do not recognise, which quietly removes both the linker and the click identifier. If that is happening, no amount of configuration in your analytics will help, because the information is being discarded on arrival.
Capture the click identifier first-party. When the destination cannot be trusted to carry parameters, stop relying on it. The moment a visitor lands on your own site, read the click identifier from the URL and store it. Send it with the enquiry or the reservation to your own backend, so the identifier travels through your systems rather than through somebody else’s URL bar.
Import the confirmed outcomes back. Once a sale carries the click identifier, send those confirmed sales back into the advertising platform. That is what turns repaired measurement into better bidding, rather than just a tidier report.
What this fixes, and what it does not
Repairing the hand-off restores session continuity. It does not, by itself, prove that a specific advertisement produced a specific paying customer. Analytics will now say a booking came from a campaign, but analytics is still describing sessions, and your money lives in a different system.
In one luxury vacation rental account, the advertising platform reported $173,555 in revenue over a two-month window while $100,646 could be traced to a confirmed booking. Repairing the hand-off is what closed most of that distance. Proving the rest needed the click identifier joined to the reservation record itself, which is a different piece of work.
There is also a floor you cannot cross. In that same account, 27 percent of bookings arrived through online travel agents, where no advertising click exists to find. Measurement work should stop at the point where the evidence genuinely is not there, and say so, rather than modelling over it.
Why we treat this as a chain
This is the first of the three places a chain of custody breaks between an advertisement and the money it produced. The other two are the conversations that happen on the phone, which the platform never sees, and the missing join between a click identifier and the record of the sale.
The order matters. Repair the hand-off first, because it is the largest and the cheapest. Everything downstream gets easier once the thread survives the boundary.