Conversion Tracking & Tag Management
Most reported conversions are wrong in a way nobody has checked
This is the collection layer: what fires, when, how many times, and whether it survives a consent banner, a checkout on somebody else’s domain and a browser that stopped honouring the cookie. When it is wrong, every report built on top of it is wrong too, quietly, for months at a time.
The test
Four questions any conversion number has to survive
If a reported figure cannot answer all four, it is not measuring what the person reading the report believes it is measuring.
What did you decide to count?
A conversion is a choice, not an observation. Every form submission, or only the ones from a real enquiry form? A quote request and a newsletter sign-up together, or separately? A purchase at order placement or after payment settles? None of these is the correct answer. Whichever you pick has to be written down, because the alternative is a permanent argument about whose number is right.
Does it fire exactly once?
The most common fault we find. A tag on a thank-you page fires again when the visitor refreshes or comes back to it from history. An event is attached both in the container and in the page code by two people who did not talk. A single-page application fires on every route change. The count inflates smoothly and nothing looks broken.
What happens when consent is declined?
A banner that does not actually govern the tags means measurement continues regardless of the choice, which is a compliance problem. A banner that blocks everything means conversions vanish for a share of visitors with no explanation in the report. Consent mode is the mechanism that lets tags adjust their behaviour instead of choosing between those two failures.
Does it survive the journey crossing a domain?
Checkouts, booking engines and payment providers frequently sit on another domain. Without cross-domain measurement the visitor arrives there as a new person from a new source, the session splits, and your own website turns up as a leading referrer in your own reports. It is a configuration problem that looks like a traffic mystery.
How it breaks
The failures that do not look like failures
Every one of these has been running in a client account for months before anybody looked. None produced an error, an alert, or an empty report.
- The conversion count includes page refreshes.
- The tag fires on arrival at a confirmation page. A visitor refreshes, or returns to the page from their history, or leaves the tab open and the page reloads. Each one records another conversion. The inflation is proportional and stable, so nothing about it looks anomalous, and every efficiency number built on it is wrong in the same flattering direction.
- The same event is implemented twice.
- An agency added the conversion in the tag container. A developer added it in the page code during a later release. Both are correct implementations, neither knows about the other, and the number roughly doubles from a specific date nobody has connected to it. Finding this takes minutes if you look at the network requests and never happens if you only look at reports.
- Conversions dropped when the consent banner launched.
- A consent platform went live and began blocking tags before consent was granted, which is the correct behaviour. Reported conversions fell by whatever share of visitors decline, the drop was attributed to seasonality or a campaign change, and budget decisions were made against a number that had changed meaning rather than performance.
- Your own domain is one of your biggest referral sources.
- This is nearly always missing cross-domain configuration. A visitor moves from your site to a booking or checkout system on another domain, and the receiving system records them as a fresh arrival referred by you. Original sources are lost across the whole conversion path, so paid and organic look worse and direct traffic looks unaccountably strong.
- A release quietly removed the trigger.
- The confirmation page URL changed, or a button class was renamed, or a form moved into an embedded frame. Tracking that relied on any of those stops firing without producing an error anywhere. The gap is discovered weeks later during a reporting cycle, and by then the missing period cannot be recovered, only annotated.
Where collection happens
Collecting in the browser, or collecting on a server you control
| Dimension | Client-side collection | Server-side collection |
|---|---|---|
| Where the request is built | In the visitor’s browser, by JavaScript running on your page | On a server endpoint you control, which then forwards on to each destination |
| What you gain | Speed of deployment and compatibility with almost every tag out of the box | Control over exactly what each platform receives, fewer third-party scripts, longer-lived first-party identifiers |
| What it does not change | A declined consent choice still limits what may be collected | A declined consent choice still applies, and a wrongly defined event is still wrong |
| Effect on the page | Every additional tag is more script for the browser to download and run | Less work in the browser, in exchange for infrastructure to run and monitor |
| What it costs | Implementation time, and maintenance when the site changes | Implementation time, plus hosting and ongoing maintenance every month |
| When we recommend it | Most sites, most of the time, done properly | When signal quality to ad platforms, page weight or data control genuinely justify the cost |
What we check
The audit, item by item
Most engagements start here, because it is cheap, it is fast, and it usually explains a discrepancy somebody has been arguing about for a year.
- Every tag, trigger and variable in the container listed, with what it does and whether anything still needs it
- Each conversion traced from the user action to the network request, so the count can be observed rather than assumed
- Duplicate detection: the same event implemented in the container and in page code, or in two containers
- Refresh, back-navigation and repeat-view behaviour tested on every confirmation page
- The consent platform checked against the tags it is supposed to govern, in both the granted and the denied state
- Consent mode configuration verified, and modelled conversions identified separately from observed ones in reporting
- Cross-domain configuration checked wherever a journey leaves the main domain, including payment and booking systems
- Campaign tagging reviewed for consistency, because inconsistent UTMs corrupt attribution before any tag runs
- Ad platform conversion actions checked against analytics definitions and against the CRM record of the same period
- Data retention and thresholding settings reviewed, so nobody is surprised by a report that cannot be produced later
- A written record of what each conversion means, in language sales and finance both accept
Consent
What actually happens to the data when somebody declines
A consent banner is not a decoration and it is not, on its own, a measurement setting. It records a choice. Whether that choice governs anything depends entirely on whether the tags on the page are wired to respect it, and a surprising number are not.
When they are not, two things are true at once: you have a compliance exposure, and your reported numbers describe a population that includes people who asked not to be measured. Neither is a good position, and the second one tends to be the reason it finally gets fixed.
The blunt alternative is to block every tag until consent is granted. That is defensible and it produces a specific, visible cost: for every visitor who declines, you see nothing at all. No source, no journey, no conversion. If a meaningful share of your visitors decline, your reporting quietly becomes a report about the people who agreed to be reported on, and nothing in the interface tells you that.
Consent mode sits between those two. Rather than removing the tags, it changes how they behave according to the consent state. Where the relevant permissions are denied, the Google tags do not read or write the identifiers they normally would and send a limited signal instead, which carries no identifiers of that kind. Google then uses that signal to model a portion of the conversions that were not observed, so the reporting reflects some of the activity that consent removed from view.
Two things follow from that, and both matter more than the configuration itself. Modelled conversions are estimates, not counts, and they should be labelled as such wherever they appear in a report, because the first person to discover the distinction in a budget meeting will lose confidence in everything else on the page. And modelling is not a recovery mechanism: it does not restore individual people, it does not permit remarketing to them, and it should never be presented internally as though the consent choice had no effect.
The commercial reason to get this right is straightforward. Automated bidding on the advertising platforms optimises towards the conversion signal you send it. If that signal is missing a share of your buyers, or double-counting another share, the platform is optimising towards a distorted picture of your customers, and it will do so consistently and expensively for as long as you leave it alone.
How we work
Changing the measurement without losing the history
Document before changing anything
Every tag, every trigger, and what each one currently sends. Nothing is deleted for looking unused, because the tag nobody recognises is occasionally the one feeding a report somebody senior relies on. This step alone often resolves the discrepancy that prompted the call.
You get: A documented map of the current setup with faults marked
Agree the definitions with the people who argue about them
What counts as a conversion, which actions are primary and which are secondary, and how each maps to what sales and finance call a lead or an order. Written down and signed off before implementation, because a definition agreed afterwards never settles anything.
You get: A written conversion definition, agreed across teams
Rebuild on a data layer rather than on the page
Events pushed deliberately by the site, with the parameters that matter, instead of tags guessing from page URLs and button text. It takes longer once and it stops a routine front-end change silently disabling measurement.
You get: A data layer specification, implemented and tested
Run new alongside old, then compare
Where the platforms allow it, the new implementation runs in parallel with the existing one for a period so the two can be compared on the same traffic. Switching over then becomes an evidenced decision rather than an act of faith on a Friday.
You get: A parallel-run comparison and a migration decision
Annotate, monitor and hand over
The change date recorded in the reporting, alerts set for conversions that stop arriving, and documentation written for whoever comes next. A release check is added so that site changes are tested against measurement before they ship rather than after.
You get: Monitoring, annotations and handover documentation
Questions
What teams ask when the numbers stop agreeing
How would we know if our conversion tracking is wrong?
Compare three numbers for the same period: what the analytics property reports, what each advertising platform reports, and what your CRM or order system actually recorded. They will never match exactly, because they count different things over different windows, but the size and direction of the gaps tell you a great deal.
Specific warning signs are worth knowing. Ad platform conversions far exceeding recorded enquiries usually means double-firing or a trigger that fires on a page reload. A sudden step change with no campaign behind it usually means a site release. And a total that has been suspiciously round and stable for months usually means something is firing on every page view.
What does consent mode actually do?
It lets your tags respond to the choice a visitor made in your consent banner instead of ignoring it. When the relevant consent is granted, tags behave normally. When it is denied, Google tags adjust their behaviour so they do not read or write the identifiers they otherwise would, and send a limited signal instead of the full one.
Google then models some of the missing conversions to fill part of that gap in reporting. That is a legitimate approach and it is an estimate rather than a count, so a report that mixes observed and modelled conversions without labelling them will eventually be challenged by somebody in finance who is right to challenge it.
What consent mode is not is a way to keep collecting from people who said no. If a vendor describes it that way, they are describing a compliance problem.
Do we need server-side tagging?
Sometimes, and considerably less often than it is recommended. It genuinely helps with three things: control over exactly what data leaves for each platform, resilience against browser restrictions on how long a client-side cookie survives, and reducing the number of third-party scripts running in your visitors’ browsers.
It does not recover consent-declined data, it does not fix a badly defined event, and it costs money to run every month. We recommend it when the accuracy of the signal you send to advertising platforms is materially affecting bidding, or when page weight or data control is a genuine problem, and not simply because it is available.
Why do our numbers drop when a visitor moves to our booking system?
Because the booking system is usually on a different domain, and without cross-domain measurement configured the browser treats the arrival there as a brand new visit from a new person. The original source is lost, one session becomes two, and the conversion gets credited to a referral from your own website.
The fix is configuration rather than rebuilding anything: the domains have to be declared to each other, the identifier has to be passed across in the link, and the receiving system has to be set up to accept it. The tell-tale sign that it is missing is your own domain appearing as one of your largest referral sources.
Can you fix this without breaking what currently works?
That is the main constraint on how we work. Nothing is deleted on the basis of appearing unused. We document what each tag currently does, run the replacement alongside the existing setup where the platform allows it, and compare the two before anything is switched off.
Where a change is unavoidable, we do it at a defined point, record the date prominently, and annotate the reporting so that six months later nobody mistakes an implementation change for a change in performance.
Our developer set this up. Why would we need anyone else?
Often you do not, and where a developer has implemented a data layer properly we would rather build on that than replace it. The work is faster and better when the underlying implementation is sound.
The gap we usually find is not technical skill but definition. A developer implements what was requested. Whether a form submission on the contact page and a quote request should count as the same conversion, and how either reconciles with what sales calls a lead, is a commercial decision that was rarely made by anybody before the tags were written.
Find out whether your conversions have been wrong all year
Send us access and we will trace your main conversions from the click to the network request, compare the totals against your own records, and tell you what is double-counted, missing or firing on the wrong thing.
If we don't deliver the work we agreed to deliver for reasons within our control, you don't pay for the undelivered work. Read our guarantee
Related
Where to go next
- reading the numbers once they are collectedThat page is about interpretation. This one is about collection.
- the bidding that depends on this signalAutomated bidding optimises towards whatever you tell it a conversion is.
- our campaign tagging toolInconsistent UTMs break attribution before any tag is involved.
- improving the rate itself
- how the site is built underneath
- the rest of the growth work
Last updated · Reviewed by Zubair Afzal