Why broken tracking survives for years
A low number gets investigated. Somebody asks why leads are down, somebody checks the tags, somebody finds the problem. Bad news has a way of prompting its own audit.
A high number gets reported. It goes in the deck. Nobody asks whether the 61% conversion rate is real, because a 61% conversion rate is not a problem, and problems are what get looked at.
This is why broken conversion tracking survives for years. Not because it is hard to detect, but because the direction of the error determines whether anyone looks.
The specific way it usually breaks
I audited an account recently that had recorded 17,359 conversions across nearly four years. The business had taken roughly 4,500 bookings in that time. The full rebuild is written up as a checkout tracking case study; this post is about the pattern, because the pattern is everywhere.
The cause was a single configuration choice made years earlier: a conversion action set to fire on any URL containing the string contact. That matched the contact page. Every visitor to it counted as an enquiry.
That is the most common version, and it is worth being specific about the variants, because they all share the same shape:
- A URL-contains rule matching a substring that appears in normal navigation.
contact,thank,book,checkout,success - A conversion firing on a page load rather than an action, so refreshes and back-button navigation count again
- A tag on a confirmation page reachable without transacting
- A goal imported from analytics that measures engagement rather than a purchase
None of these throw an error. All of them produce numbers that look plausible in a report.
Automated bidding turns a measurement problem into a spending problem
If tracking were only a reporting concern, a broken conversion action would mean bad slides. Annoying, survivable.
But nearly every account now runs some form of automated bidding, and automated bidding consumes the conversion signal directly. It is not reading your report. It is optimising against the thing you told it to optimise against, continuously, on every auction. I have written before about what polluted conversion data does to Smart Bidding; this is the extreme case, where the signal was never connected to the business at all.
The account above was set to maximise conversion value. The values were attached to page views. So the system had spent two years learning which searches, times of day, devices and audiences produced the most contact-page visits, and buying more of them.
It worked. That is the uncomfortable part. The bid strategy was not malfunctioning. It hit its target with reasonable efficiency. The target was wrong.
Value-based bidding with unreliable values is not a partially working system. It is a system optimising a random variable. If you are not confident that your conversion values reflect real money, switch to conversion-count bidding until you are. Fewer inputs, fewer ways to be confidently wrong.
Silent failure is the one that gets you
Two defects turned up during that rebuild that neither the client nor I could see from the front end.
The session identifier was being parsed wrong, so events arrived unattached to any session. And consent flags were hardcoded to denied, so events were transmitted and then discarded on receipt.
No console error. No failed request. No alert. From the browser everything looked correct: the checkout worked, the confirmation page rendered, the tag fired.
Systems that fail loudly get fixed within the hour. Systems that fail quietly get budget for two years.
That asymmetry is worth designing around. When you build tracking, build the check that proves the value arrived, not just the check that proves the tag fired.
How to actually verify it
Debug tools tell you a tag fired. That is the first hop of four or five. What you want to know is whether the value arrived, matched, and got attributed.
The only reliable method is to follow a real transaction end to end.
- Put a genuine transaction through, with a real payment. Not a test-mode order, not a simulated event. Test modes take different code paths and that is exactly where these defects live.
- Check each hop, not just the endpoints. Did the event leave with a valid session identifier? Did consent flags allow it? Did the receiving system return a success response? Did it show up in the reporting interface?
- Compare the value to the source of truth. Not roughly. To the penny. Your booking system or order table has the real figure. If the advertising platform disagrees, something is transforming it in between and you want to know what.
- Wait for a natural conversion, from a genuine click, and trace that one too. A manual test proves the pipe works. A real customer proves it works under the conditions customers actually create.
That last one paid off in this case: it confirmed the platform had backfilled a conversion that occurred before the import was configured, which is useful behaviour to know about and is not something you would discover by reasoning about it.
The check that costs two minutes
Before anything else, open your conversion actions and look at the trigger condition. Not the name of the action, which reflects what somebody intended. The rule that fires it.
Then compare your platform's conversion count against a number from outside the platform. Invoices raised. Bookings taken. Rows in the orders table.
If those disagree by more than a rounding error, your reporting is not describing your business, and every automated decision the platform has made has been made against a number you did not intend.
In the account above, the ratio was almost four to one. Six months of reporting showed 177 conversions while the business took 512 bookings. Both numbers were wrong in different directions, for different reasons, which is what happens when nobody has ever compared them.
What you get back
The rebuild in that case did not improve short-term performance. Worth saying plainly, because the honest outcome of fixing measurement is usually not a chart going up.
What it produced was a first accurate cost per booking, an average order value nobody in the business had to hand, and the discovery that advertising was running at 18.3% of revenue. Comfortable, and profitable the whole time. But unknowable beforehand, and every decision taken in those two years had been taken blind.
It also settled arguments that no amount of discussion would have resolved. Which product they actually sell, established by a median booking length of 15 days rather than by opinion. Which searches were wasting money, established by matching search terms against booking behaviour. Which language performs, established by comparing the terms that describe the business honestly against the terms with more volume. The honest description won on both cost and conversion.
None of that is available to an account that cannot count a sale.