Run this 90-second triage first, then fix the 7 most common failure modes across tag layer, data layer, and attribution layer.
If your Google Ads conversion tracking is broken, four checks resolve roughly 60% of cases before you touch any code. Run them in order.
Still broken after these four? The issue is in one of three layers below. Work top-down. Tag layer issues are the most common and the easiest to verify.
Conversion tracking is not one system. It is three stacked layers, and a failure in any one looks the same from the Google Ads UI: missing conversions.
Identify your layer, jump to the fix. If you are not sure, start with Fix 1 and walk down. Tag layer breaks more often than data layer, and data layer more often than attribution.
Most conversion tracking issues live here. Either the tag is not on the page, not loading, or firing on the wrong event. Each fix below includes a five-minute verification step.
The classic. Tag is deployed across the site, but the confirmation page was added later by a developer who did not redeploy the container. Or the checkout flow was updated and the tag did not move with it.
Verification: Install Google Tag Assistant (Chrome extension). Visit your purchase confirmation URL. Look for the Google Ads conversion tag in the fired tags panel. If you see no AW-XXXXXXXX tag, the snippet is missing on that page.
Fix paths:
Tag fires. Reports show "1 conversion, $0 revenue" on every line. This usually means the value and currency parameters are missing or hardcoded to zero.
Verification: in Tag Assistant, click the firing conversion tag, switch to the Variables panel. Check that value has a non-zero number and currency is set (USD, EUR, etc.). If value shows 0 or undefined, the issue is data, not the tag.
Fix: in GTM, open the Google Ads Conversion Tracking tag and scroll to the Conversion Value field. Replace any hardcoded value with a dataLayer variable like {{DLV - ecommerce.purchase.value}}. If your site does not push ecommerce purchase data to the dataLayer at all, you need a developer to add a purchase event on the confirmation page with revenue and currency.
Why this matters specifically: Target ROAS bidding needs a value to optimize against. Zero-value conversions tell Smart Bidding to treat all purchases as equal, which collapses your tROAS strategy within days. We have seen accounts where this single bug cost 25 to 30% ROAS for three weeks before anyone noticed the dollar signs were all blank. Performance Max is especially sensitive here - low signal density turns the campaign into a budget-burner overnight. If pMax is the campaign type going dark, the Performance Max diagnostic playbook walks through the asset-group and Final URL expansion checks tracking alone won't catch.
The silent killer. Trigger is set to "All Pages" or "Page View" instead of the actual purchase event. Every page view becomes a conversion. Numbers look incredible (CTR 4%, conv rate 12%) until someone checks revenue.
Verification: in Google Ads, open the conversion action and look at "Conversions per click." For a non-form-fill action it should be well under 1.0, usually 0.05 to 0.20. Above 1.0 means duplicate fires. Then compare 7-day reported conversions to 7-day actual Shopify or Stripe orders. Off by 10x or more = wrong trigger.
Fix: in GTM, re-check the trigger. It should be "Custom Event - purchase" or "Page View - Page Path contains /thank-you", NEVER "All Pages." gtag.js users: ensure the conversion call lives inside the purchase confirmation handler, not in a global script loaded on every page.
The tag fires. Tag Assistant shows green. Something still does not add up. Either the data leaving the page is wrong, or two systems are sending the same conversion.
Common after teams enable GA4 conversion import to Google Ads but forget to disable the original direct Google Ads conversion tag. Both fire on the same purchase. The reported conversion count doubles. Smart Bidding optimizes against the inflated number.
Verification: in Google Ads, Goals, Conversions, Summary, look at the Source column. If you see two actions tied to the same purchase event (one source "Google Analytics 4 (GA4) property", one source "Website"), and both are "Include in ‘Conversions’", you have duplicates feeding bidding.
Fix: pick one source. The cleaner setup for ecommerce is GA4-imported because it brings richer ecommerce context (item IDs, categories, coupon codes). Disable the legacy direct Google Ads tag, or change one of the actions to "Secondary" so it does not feed Smart Bidding.
| Property | Direct Google Ads gtag | GA4 import to Google Ads |
|---|---|---|
| Setup complexity | Lower (one tag) | Higher (GA4 ecommerce required) |
| Latency | 5-15 minutes | 30-60 minutes |
| Ecommerce context (items, coupons) | Limited | Rich (full GA4 schema) |
| Match rate with enhanced conversions | Strong | Strong |
| Risk of duplicate-fire bug | Low (one source) | High if direct gtag stays on |
| Recommended for | Lead-gen, simple ecom | Full ecommerce, multi-funnel |
Caveat: Smart Bidding has been optimizing against the inflated number. After deduplication, expect a 20 to 30% drop in reported conversions and a temporary "Learning Limited" status for 2 to 3 weeks while the algorithm recalibrates.
Enhanced conversions require hashed user identifiers (email, phone, name, address) sent alongside each conversion. If those fields are missing, the tag still fires fine, but enhanced conversions silently fail. You see "Recording" in the diagnostics with a yellow warning, and your match rate never improves.
Verification: Google Ads, Tools, Conversions, click your action, open the Diagnostics tab. Look for "Enhanced conversions status: Recording" with a yellow warning detail like "user-provided data is missing."
Fix: in GTM, open the Google Ads Conversion Tracking tag, scroll to "Include user-provided data from your website" and set to True. Then map each field. The most important: email from {{DLV - user.email}} on the confirmation page. If your dataLayer does not include user.email at purchase, a developer needs to add it. Email is the highest-match-rate field, especially on iOS Safari where cookies are restricted. Full setup spec is at the Google Ads Help page for enhanced conversions.
This is where smart operators get stuck. Tag fires correctly. Tag Assistant shows green. dataLayer is populated. But Google Ads still shows fewer conversions than your Shopify or CRM. The cause is upstream of the tag in the attribution settings.
Google Ads splits conversion actions into "Primary" (feeds Smart Bidding) and "Secondary" (observe-only). A common mistake: agency creates a new "Purchase" action but leaves it as Secondary while an older "Lead form submit" stays Primary. Smart Bidding optimizes for lead forms, and reports show purchases as if they do not count.
Verification: Google Ads, Goals, Conversions, Summary. Each action has a "Conversion goal" column. Primary actions are part of an Account-default goal or a campaign-specific goal. Secondary actions show "Secondary action."
Fix: change the correct action to Primary inside the goal. If you have multiple Primary actions (e.g. Purchase + Lead), use the "Account-default" goal at the goal level so all campaigns optimize against both unless overridden.
Caveat: changing the primary action mid-flight resets Smart Bidding learning for affected campaigns. Plan the change for the start of a new week, not Friday afternoon, and budget 7 to 10 days for re-stabilization.
Subtle but common in headless storefronts, third-party checkouts, and Shopify Plus with custom checkout extensions. The user clicks an ad (gclid in the URL), navigates to checkout, and somewhere in the redirect chain the URL parameters get stripped. The conversion fires on the confirmation page WITHOUT gclid attached. Google Ads cannot attribute it back to the click.
Verification: open Chrome DevTools, Network tab, preserve log. Click a Google Ads ad in a test session and walk through the entire checkout. Trace the URL through each redirect. If gclid=... is present on the landing page but missing by the time you hit the confirmation page, it has been stripped.
Fix: persist gclid in a first-party cookie on landing. Read it back on the confirmation page and pass it to the conversion tag as a custom parameter. If your CRM stores gclid at lead capture, use the offline conversion import flow with CRM IDs instead.
In our audit data, this issue typically hides 15 to 25% of conversions in Shopify Plus and headless DTC stores. It is the most likely culprit when your Shopify dashboard shows 100 orders and Google Ads shows 75.
Not every "missing conversion" is a tracking bug. Sometimes the tracking is correct and the gap is real, for reasons that have nothing to do with your tag setup.
Cross-device delay. Google Ads cross-device conversions can take up to 7 days to appear. Daily reports under-count on the most recent days. Open the "Days to conversion" report in Google Ads. If you see meaningful conversion volume in the 1 to 7 day bucket, your daily numbers are always behind reality.
Modeled conversions. Since iOS 14.5 and increasingly restrictive cookie policies, Google models a percentage of conversions where direct measurement is blocked. These appear with a small delay and are aggregated. If you compare ad-platform numbers to CRM line-by-line, you will always see a gap of roughly 5 to 15%.
View-through conversion window. Default is 30 days for view-through. If set to 1 day (a common over-conservative setting after the 2023 attribution updates), you lose view-through conversions where the user saw the ad on Display or YouTube and converted days later via direct or organic.
Cross-channel cannibalization. A conversion attributed to "Direct" in GA4 may have been driven by a Google Ads click. This is an attribution model question, not a tracking bug. Switching to data-driven attribution in Google Ads (already the default for most accounts since 2023) usually surfaces 10 to 20% more credit than last-click.
The pattern is consistent across every account we have audited. Tracking breaks silently. Smart Bidding degrades within 3 to 7 days. Two weeks of spend underperforms. Then someone notices the reported conversions look wrong and goes looking for the cause. By then, 2 to 3 weeks of bidding recovery is also on the bill.
The fix is daily auditing, not annual setup. Most accounts get a clean tracking implementation once, then nobody checks it again until something breaks visibly.
This is what Aegis (the audit agent in B6) does. Daily scan across all conversion actions in your account. Flags: zero-fire-but-was-firing within 48 hours, duplicate-fire rate above baseline, primary/secondary misclassification, GA4 conversions imported but not active, enhanced conversions recording with missing user data. On a typical 12-conversion-action account we see 3 to 4 issues surfaced on the first audit run.
Scan your account in 60 seconds. We are not selling a tracking setup service (that is a one-time agency job). We are the always-on auditor that catches what humans miss on day 8.
Aegis also re-runs an audit after every detected change in your account, so when someone edits a conversion action or adds a new one, the re-check happens within minutes instead of next month. See how Aegis works and the rest of the seven B6 agents.
Why does my Google Ads conversion count differ from GA4? Different attribution models (Google Ads is moving to data-driven, GA4 defaults to data-driven), different conversion windows, and different de-duplication rules. A 10 to 20% gap is normal. A gap above 30% means investigate, usually starting with duplicate import (Fix 4 above).
What does "Recently a conversion has not been recorded" mean? An active conversion action had fires in the past but has logged zero fires in the past 7 days. Cause is either the tag broke or you genuinely had zero conversions for that action in 7 days. Check both, starting with Tag Assistant on the relevant page.
How long does Smart Bidding take to recover after tracking is fixed? 7 to 21 days. The algorithm needs to re-accumulate enough signal to leave "Learning Limited." During recovery, expect lower spend, lower impression share, and conservative bidding. Do not change other settings during this window. Related: what to do when Google Ads ROAS drops suddenly (most ROAS drops are downstream of tracking).
Does enhanced conversions help if my regular conversions are working? Yes. Enhanced conversions improve match rate by 5 to 15%, with the biggest gains on Safari and Firefox where third-party cookies are blocked or restricted. Even on a clean setup, the bump is worth the 20-minute configuration.
Should I use Google Ads gtag or import from GA4? Pick one. GA4 import gives richer ecommerce context. Direct gtag is simpler and has lower latency. Never run both for the same event (see Fix 4). For most accounts we recommend GA4 import once GA4 ecommerce events are clean.
Connect your Google Ads account to B6 in read-only Co-pilot mode at $99/month. Within 60 seconds, Aegis audits every conversion action: tag fires, duplicate flags, primary/secondary classification, enhanced conversion match rate, GA4 import status. You see a scorecard that lists each issue with the specific fix path, in the same structure as this article.
If you fix tracking once and check it once a quarter, you accept three weeks of degraded Smart Bidding every time something breaks. Daily auditing turns three weeks of damage into 24 hours.
Scan your account in 60 seconds or see how the seven B6 agents work.