Insights / Measurement
Attribution begins before the dashboard.
Most attribution problems are collection problems wearing a reporting costume. That is why changing the attribution model so rarely fixes them.
When a business cannot explain where its conversions came from, the instinct is to look at the reporting tool. Someone opens the attribution settings, switches from last click to data driven, compares the two, and finds that the numbers move without becoming more believable. A few weeks later the question is still open.
The reason is structural. A reporting tool can only distribute credit among the things it was told about. Everything that decides whether a conversion can be connected to a source happens earlier, in a chain of steps that runs from the moment somebody clicks a link to the moment a value is recorded. By the time data arrives in an interface, that chain has already either held or broken.
The chain that actually determines attribution
It helps to be concrete about the links, because each one fails in its own way and each one is separately checkable.
- The link carries a source. A campaign identifier is attached to the destination URL, or the platform appends its own click identifier.
- The landing page receives it intact. Nothing between the click and the page strips the query string.
- A session is established and holds. The visitor is given a session that survives navigation, including navigation onto other hostnames you own.
- The conversion produces an event. The action that matters fires something, with a name and parameters the reporting tool understands.
- The event is joined back to the session. The conversion is associated with the same visitor identity that carried the source.
- A value is attached and reconciles. The recorded amount matches the system that actually took the money.
Attribution is the product of all six. A break anywhere makes the conversion orphaned, and an orphaned conversion does not announce itself. It appears under direct traffic, or unassigned, or simply as a smaller total, and no error is raised anywhere.
Where it breaks, in practice
Redirects that drop the query string
Vanity URLs, link shorteners, marketing redirects and some consent or geolocation gateways rebuild the destination URL rather than forwarding it. The visitor lands correctly and the campaign identifier is gone. This is one of the most common causes of an inflated direct channel, and it is invisible unless somebody clicks a live campaign link and reads the address bar at the other end.
Cross-domain journeys treated as two visits
A booking engine, a payment provider, a scheduler or a portal on a different hostname will start a fresh session unless the measurement is explicitly configured to carry identity across. The conversion then belongs to a visit that began at the checkout, whose source is the site the visitor came from, which is you. Traffic appears to convert from a self-referral, and the campaign that paid for it shows nothing.
Conversions that complete somewhere you do not measure
A phone call, a form that posts into a third-party system, an application finished by email, a purchase completed in a partner's basket. The business records the revenue. The measurement layer never sees it. Nothing is broken in the sense of throwing an error, and the reporting is simply describing a smaller business than the one that exists.
Consent handled as an on-off switch
Where consent is implemented by blocking tags outright, declined consent produces no signal at all, and the visitors who decline are not a random sample. Handled properly, a declined state still permits a modeled or aggregated contribution. Handled as a switch, an entire segment silently leaves the dataset and the remaining numbers look clean.
Identity that does not survive the gap between sessions
Long consideration cycles outlive the mechanisms used to recognize a returning visitor. For any purchase that takes weeks, a meaningful share of conversions arrive after the original identifier has expired, and the first touch that created the demand has no way to be connected to the outcome it produced.
A reporting tool cannot attribute a conversion it was never told about, and it cannot tell you that it was not told.
Why the dashboard cannot rescue this
Attribution modeling redistributes credit among recorded touchpoints. It is a reasonable thing to do once the record is complete. What it cannot do is invent a touchpoint that was never captured, or repair the link between a conversion and a session that were never joined. Applied to an incomplete dataset, a more sophisticated model produces a more sophisticated description of the wrong thing.
This is why switching models tends to move numbers without resolving arguments. The disagreement is not about how to divide credit. It is about which events are in the dataset at all, and that was decided upstream.
Click one live campaign link and read the landing URL to confirm the identifier survived. Complete one conversion yourself and confirm the event arrives with the parameters you expect. Walk any journey that crosses onto another hostname and confirm it is still one session. Compare one week of recorded conversion value against the system that took the money. Four checks, and most of what is wrong will be in one of them.
What correct looks like
The specification comes before the implementation. You decide which actions matter, what each one is called, which parameters travel with it, which hostnames belong to one journey, and how consent states are handled, and only then is anything built. That document is what makes the setup testable, because a test needs a statement of expected behavior to test against.
It is unglamorous work and it does not demonstrate well in a meeting. It is also the difference between a reporting layer that informs decisions and one that merely accompanies them.