Problem
Google Ads conversion tracking not working: how to fix it
Broken conversion tracking has three shapes, and they are fixed differently. Either nothing is recorded, or too much is recorded, or conversions are recorded but not credited to the click that caused them. Work out which shape you have by comparing a fixed week of store orders with the same week in Google Ads, then follow the tag from the click through to the order confirmation.
By CartKernel · Last reviewed 2026-09-07
Does this look familiar?
- A conversion action shows no recent conversions or an inactive status
- Google Ads reports far more purchases than the store recorded for the same period
- Conversion values are missing, always identical, or in the wrong currency
- Smart bidding cannot leave the learning period because conversion volume is erratic
- Conversions stopped on the day a theme, checkout or tag manager change went live
- Orders are recorded but almost none are attributed to any campaign
Causes, ranked
Why it happens, most common first
Check them in this order. The first two account for most cases we open.
- most common
The tag is not present on the page that confirms the order
The conversion snippet has to run where the purchase completes. Theme updates, a move to a new checkout, or a tag added only to the storefront and not the confirmation page all break this quietly. On Shopify the checkout is a controlled environment, so tags belong in the app integration or a customer event rather than pasted into a template.
- most common
The linker between click and conversion is missing
Google Ads matches a conversion to a click through a stored identifier. If the tag that writes that identifier is absent, the checkout runs on a different domain without cross domain measurement, or cookies are cleared by a consent banner before the tag loads, the order is recorded without a campaign attached.
- common
The conversion action counts every event rather than one per order
A purchase action set to count every conversion, combined with a confirmation page a customer can reload or return to, records the same order repeatedly. Duplicate tags from an app and a tag manager container produce the same inflation from a different direction.
- common
Consent settings block the tag before it fires
With consent mode in place, tags wait for a signal. If the default is set to denied for advertising storage and the update never arrives, or the banner blocks scripts outright rather than signalling, conversions are lost rather than modelled. Region specific defaults make this appear in some markets only.
- occasional
Values and currency are not passed correctly
A conversion that fires without an order value, or with a value that includes tax and shipping when the goal is product revenue, gives value based bidding the wrong instruction. A hardcoded value from a template example is a common leftover from initial setup.
- occasional
The wrong conversion identifiers are in place
A conversion ID and label from a different account, a test account or a previous agency will fire and record nothing you can see. Multiple accounts managed under one manager account make this easy to do and hard to notice.
The fix
In this order
Each step is something you can do today. Do them in sequence; skipping ahead is how a review fails twice.
Prevent it next time
- Reconcile store orders against reported conversions once a month and keep the record
- Treat any checkout, theme or consent tool change as a release that requires a tracking test
- Keep one owner and one implementation for each conversion action, documented
- Set an automated alert for a day with zero recorded conversions on a spending account
Establish which shape of failure you have
Take one complete week, count store orders, and compare with conversions in Google Ads using a click based attribution view. Far fewer means the tag is missing or blocked, far more means duplication, roughly equal but unattributed means the linker.
Check the conversion action status and settings
Open the conversion action and confirm it is set to purchase, primary, counting one per conversion for a sale, with a value taken from the transaction rather than a fixed number. Note the reported status, which will say whether any tag activity has been seen recently.
Watch the tag fire on a real order path
Use the tag debugging tools in your browser to walk from an ad click through to order confirmation, and confirm the conversion request is sent once, with the right identifiers, an order value and a transaction identifier. Repeat on mobile, where consent behaviour often differs.
Repair the click identifier chain
Make sure the Google tag and its linking behaviour load on every storefront page before the checkout, and configure cross domain measurement if payment happens on another hostname. Confirm the ad click parameter survives any redirect between the ad and the landing page.
Remove duplicate sources of the same conversion
Inventory every place a conversion could be sent: the platform app, a tag manager container, a theme snippet and any marketing app. Keep exactly one. Then set counting to one per order and add a transaction identifier so repeat page loads are ignored.
Fix the consent configuration rather than removing it
Set sensible defaults for the regions you sell in, make sure the consent tool sends an update as soon as a choice is made, and confirm the tag loads in a waiting state rather than being blocked entirely. Then verify a granted and a denied journey separately.
Turn on enhanced conversions for the purchase action
Pass hashed customer data from the order confirmation so conversions can be matched when cookies are unavailable. On most platforms this is a setting in the official integration rather than custom code. Accept the terms in the account and verify the diagnostic reports data arriving.
Recheck the reconciliation a week later
Repeat the order count comparison on a fresh week. Expect ads to report slightly differently from the store because of attribution windows and modelling, but the two should now move together. Record the normal gap so future breaks are obvious.
When to get help
Bring in help when the checkout runs on a separate domain, when the store uses a headless front end, or when tracking has to satisfy consent rules across several regions, because those cases need a measurement design rather than a tag fix. It is also worth help when smart bidding has been running on inaccurate data for a while, since the bidding models need a deliberate reset once the tracking is correct rather than being left to recover on their own.
Free. We reply within one business day.
Why does Google Ads show conversions that GA4 does not?
They count differently. Google Ads credits a conversion to the date and campaign of the click, includes modelled conversions and uses its own attribution window. GA4 credits by session and channel using its own model. Both can be configured correctly and still disagree, so reconcile each against store orders rather than against each other.
Should conversion tracking use the store integration or a tag manager?
Either works, but not both for the same conversion. The official platform integration is simpler and survives theme changes. A tag manager container gives more control over consent and event data. Choose one, document it, and remove the other so nothing is counted twice.
Do I need to pass a transaction identifier?
Yes for purchases. It lets the platform ignore repeated fires of the same order when a customer reloads or revisits the confirmation page, and it makes reconciliation against store orders possible. Without it, duplication is difficult to detect and difficult to prove.
Will fixing tracking change my historical reports?
No. Past conversions stay as they were recorded, so the before and after periods are not directly comparable. Note the date of the fix in the account, and compare performance from that day forward rather than trying to reinterpret earlier data.
Services that fix it for good
Related problems, answers and terms
Stop the leak.
A free Growth Analysis finds what is broken and ranks it by the revenue it costs you.