Last updated on August 28, 2026 at 9:01 PM
How to Use This Guide
This guide is designed for performance marketers, ecommerce operators, analysts, developers, and teams that need to audit tracking installed by an agency, plugin, app, or internal implementation. Run tests in a staging environment or with a cancellable and refundable test order. Do not repeatedly test with real customer orders.
After completing this guide, you should be able to
- Distinguish between code presence, tag firing, request delivery, platform receipt, and a conversion being eligible for bidding.
- Validate critical fields such as order ID, revenue, currency, product ID, and event ID.
- Diagnose duplicate purchases, missing purchases, zero-value conversions, lost cross-domain attribution, and consent configuration problems.
- Choose the right diagnostic approach for Shopify, WordPress, WooCommerce, or a custom ecommerce stack.
- Produce a clear diagnostic report for marketing, development, analytics, or management teams.
Why Installed Tracking Can Still Produce Unreliable Data
When an independent ecommerce store starts advertising on Google Ads, Meta Ads, Microsoft Ads, or TikTok Ads, each platform asks for a tracking tag or pixel. Finding that code in the page source does not prove that conversion tracking works correctly.
- The ad platform shows the tag as unverified, inactive, or without recent activity.
- GA4 records orders, but Google Ads shows no conversions.
- The store backend contains one order, while the ad platform reports two purchases.
- The conversion count looks reasonable, but revenue, currency, or product data is wrong.
- The pixel is detected on the homepage but disappears during checkout or on the order confirmation page.
- Browser and server events are both sent, but they are not deduplicated correctly.
- Advertising tracking is not behaving according to the visitor’s consent choice: advertising storage is still written or read, or advertising identifiers or user data are still sent after marketing consent is denied. In Advanced Consent Mode, cookieless consent pings can still be sent while ad_storage or analytics_storage is denied; that behavior alone is not an implementation failure.
- Tags do not resume after a visitor grants consent.
A complete audit cannot stop at the question, “Is the code present?” Confirm that every real business action reaches the correct platform with the correct event name, parameters, value, currency, and order ID, and that browser and server delivery resolves to one logical conversion after deduplication.
1. What an Advertising Tracking Diagnostic Actually Checks
Advertising tracking can be evaluated in five layers. Data is suitable for performance analysis, ROAS calculation, and automated bidding only when all five layers pass.
| Diagnostic layer | Question to answer | Common problems |
|---|---|---|
| Code loading | Does the base tag load on every required page? | Missing installation, wrong ID, blocked script |
| Event triggering | Does the event fire after the user completes the action? | Incorrect trigger, redirect before firing |
| Parameter delivery | Are value, currency, and order ID correct? | Empty variables, bad formatting, reused order ID |
| Platform receipt | Did the destination platform actually receive the event? | Blocked request, consent restriction, request error |
| Advertising use | Is the event used in reporting and bidding? | Secondary action, duplicated goals, campaign not using the goal |
A “Tag Fired” message in GTM proves only that a trigger condition was met. It does not prove that the conversion is accurate. Continue by checking the data layer, network request, platform test tools, and the corresponding backend order.
2. Build an Ecommerce Event Tracking Plan First
Before troubleshooting, define the customer actions the site genuinely needs to measure. A typical ecommerce implementation should at least cover product views, add-to-cart actions, checkout starts, and purchases.
| Customer action | Recommended GA4 event | Common Meta event | TikTok standard event | Microsoft Ads |
|---|---|---|---|---|
| View product | view_item | ViewContent | ViewContent | Page or custom event |
| Add to cart | add_to_cart | AddToCart | AddToCart | Custom event |
| Begin checkout | begin_checkout | InitiateCheckout | InitiateCheckout | Custom event |
| Complete purchase | purchase | Purchase | Purchase | Conversion goal with variable revenue |
| Submit lead form | generate_lead | Lead | Lead | Custom event |
In the August 2026 version of this guide, TikTok uses Purchase as its standard ecommerce purchase event and Lead for lead submissions. CompletePayment and SubmitForm are compatible legacy names mapped to Purchase and Lead; do not rename a working legacy implementation without a migration plan. Use Contact only for a genuine contact action. GA4 uses purchase and recommends parameters such as transaction_id, value, currency, and an items array.
Minimum data required for a purchase event
| Parameter | Example | What to validate |
|---|---|---|
| Order ID | ORD-10086 | Unique for every order and unchanged when the page refreshes |
| Conversion value | 129.90 | A numeric value – not a formatted string such as $129.90 |
| Currency | USD | The correct three-letter ISO currency code |
| Product ID | SKU-001 | Ideally aligned with the catalog or Merchant Center feed |
| Quantity | 2 | Complete and accurate product quantities in the items array |
| Browser/server deduplication ID (platform-specific) | evt_ORD-10086 | Meta and TikTok use a matching event_id with the same event name or type for browser/server deduplication. GA4 and Google Ads purchase deduplication uses transaction_id. |
3. Prepare the Diagnostic Test
Do not use a real customer order as your primary test. Create a test order that can be cancelled or refunded, then record the details below before you begin.
| Test field | Example |
|---|---|
| Test time | 2026-08-27 10:35 |
| Browser | Chrome Incognito |
| Device | Windows desktop |
| Consent status | Analytics and marketing cookies accepted |
| Test order ID | TEST-ORD-001 |
| Expected value | 49.90 |
| Expected currency | USD |
| Test path | Homepage -> Product -> Cart -> Checkout -> Payment success |
Disable browser ad-blocking extensions for the primary implementation test, but do not disable the site consent banner. Ad-blocking tests and consent tests should be run separately; otherwise, you cannot tell whether the browser extension or the consent configuration blocked the tag.
Test at least three consent scenarios
- A new visitor who has not yet made a cookie choice.
- A visitor who accepts all relevant cookies.
- A visitor who rejects marketing cookies.
For Google Consent Mode, set the default consent state before the relevant tags run, then update it promptly on the same page after the visitor makes a choice. Verify ad_storage, analytics_storage, ad_user_data, and ad_personalization separately. Advanced Consent Mode may send cookieless pings while storage is denied; confirm that no advertising storage, advertising identifiers, or user data are sent contrary to the visitor’s choice.
Diagnostic toolset
1. Google Tag Assistant and GTM Preview
Google Tag Manager Preview shows page events, tags that fired, tags that did not fire, trigger conditions, variables, and consent state. It answers two essential questions: what happened on the site, and why did GTM fire or fail to fire a tag?

2. GA4 DebugView
GA4 DebugView confirms whether GA4 actually received the event and shows its parameters. It helps separate a GTM implementation problem from a delivery or GA4 collection problem.
3. Chrome DevTools Network panel
The Network panel shows the requests the browser really sends. You can filter by platform domain, request type, file name, tag ID, or measurement ID. It is the key tool for answering, “Did the browser send the data?”
4. Platform-specific test tools
Use Test Events and Diagnostics in Meta Events Manager; Pixel Helper, Test Events, and Diagnostics for TikTok; UET Tag Helper for Microsoft Advertising; and Shopify Pixel Helper for Shopify custom pixels.
4. Complete Advertising Tracking Diagnostic Workflow
Step 1: Inventory every tracking implementation
Duplicate conversions often come from multiple installations of the same platform rather than a single broken tag.
- GTM is installed once in the theme and again through a plugin.
- The official Shopify Meta app installs a pixel, and a separate custom Meta pixel is also present.
- A WordPress plugin sends Purchase while GTM sends the same Purchase again.
- A native Google Ads purchase action and an imported GA4 purchase action are both set as primary goals.
- Meta Pixel and Conversions API send the same purchase without working deduplication.
- A TikTok app, GTM, and theme code each install the same pixel.
Create an implementation inventory. For readability, combine the installation method, base-tag location, purchase-event source, and server-event status in one implementation-notes field.
| Platform | Tag or pixel ID | Implementation notes |
|---|---|---|
| GA4 | G-XXXXXXX | Loaded sitewide through GTM; purchase triggered from the data layer; no server event |
| Google Ads | AW-XXXXXXX | Loaded through GTM; purchase conversion fires after confirmed payment |
| Meta | Pixel ID | Installed through Shopify app / Customer Events; app sends browser and server events |
| TikTok | Pixel ID | Loaded sitewide through GTM; purchase triggered from the data layer |
Search for each ID in the page source, GTM tag list, WordPress plugins, theme custom-code areas, Shopify Customer Events, Shopify apps, Cloudflare Zaraz, server-side GTM, and any custom backend integrations.
Step 2: Confirm that the base tag loads correctly
For GTM, do not begin by opening the order confirmation page directly. Connect Preview from the homepage or advertising landing page, then follow the real customer journey through product view, cart, checkout, and payment.

- Confirm that Preview is connected to the correct domain.
- Confirm that the expected GTM container appears when the page loads.
- Verify that the container ID matches the active account and environment.
- Confirm that the base Google tag loads on all required pages.
- Check whether the payment-success page remains in the same debug session.
- Check whether the session breaks after a redirect or cross-domain transition.
- Review Consent Initialization and any consent state that blocks the tag.
At the same time, open Chrome DevTools and search the Network panel for the GTM container ID, GA4 measurement ID, Google Ads conversion ID, Meta pixel ID, TikTok pixel ID, or Microsoft UET tag ID. Searching the actual ID is more reliable than relying on one fixed endpoint because request paths can change.
When no request appears at all, check these first
- The code is missing or the configured ID is wrong.
- The GTM container was not published or the wrong environment is loaded.
- Consent settings prevent the tag from running.
- Content Security Policy blocks the external script or endpoint.
- An ad blocker or browser privacy setting blocks the request.
- A JavaScript error occurs before the tracking code executes.
- A cache or CDN still serves an older version of the site code.
Step 3: Validate the data layer or customer event
The data layer is the bridge between ecommerce activity and advertising tags. Google Tag Manager and gtag.js read events and variables from this structured layer. Use predictable, structured data rather than forcing tags to scrape values from unrelated page elements.
A simplified GA4-style purchase event can look like this:
<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "ORD-10086",
value: 129.90,
currency: "USD",
tax: 8.20,
shipping: 0,
items: [
{
item_id: "SKU-001",
item_name: "Portable Coffee Grinder",
price: 64.95,
quantity: 2
}
]
}
});
</script>For GA4 ecommerce, the event-level value should normally equal the sum of price multiplied by quantity for the items array and should not include shipping or tax unless your documented reporting definition and destination platform explicitly require a different value.
Use the following command in Chrome Console for an initial inspection:
window.dataLayerTo display purchase events only:
window.dataLayer?.filter(item => item.event === "purchase")Validate these six points
- The event occurs at the correct time: Purchase should be generated after the order is genuinely successful, not merely when the customer clicks Pay now or Submit order.
- The order ID is unique: The same order should retain the same ID after a refresh, while different orders must never share the same ID.
- The value is numeric: Use 129.90, not “$129.90”, “USD 129.90”, or a string containing a thousands separator.
- The currency matches the order: On multi-currency stores, compare the displayed currency, settlement currency, and the currency sent to the platform.
- The items array is complete: Product IDs, prices, quantities, and discounts should reconcile with the backend order.
- Old values are not retained: Single-page applications, cart drawers, and AJAX checkouts can accidentally reuse data from a previous event.
Step 4: Inspect GTM triggers and variables
Complete a real test journey in GTM Preview, select the purchase event, and inspect Tags Fired, Tags Not Fired, Variables, Data Layer, and Consent.


The trigger is too broad
A rule such as Page URL contains thank-you can fire again whenever the visitor refreshes, bookmarks, or revisits the confirmation page. Ecommerce purchases should preferably use a genuine order-completion event and a unique order ID.
The trigger is too restrictive
The actual URL might be /en/checkout/success while the trigger permits only /checkout/success. Language folders, query strings, and alternate checkout paths can break an overly strict rule.
The custom event names do not match
The data layer sends event: “checkout_completed”, but GTM listens for purchase. Event names must match exactly, including capitalization and underscores.
The tag fires before the data arrives
The tag runs during page load, but value, currency, and order ID enter the data layer several hundred milliseconds later. The tag appears to fire successfully while sending empty parameters.
AJAX or a single-page application produces no traditional page load
Cart drawers, modal checkouts, and React or Vue applications may not generate a normal page view. Trigger tracking from business events rather than relying only on page loads or URL changes.
Step 5: Use Network to confirm that a request was sent
Open Chrome DevTools -> Network, enable Preserve log, and repeat the complete test. Filter by platform ID or domain. Open the matching request and inspect Headers and Payload.
- Verify the destination platform and tag or pixel ID.
- Verify the event name, value, currency, and order ID.
- Confirm that product IDs, quantities, and the items array are present.
- Confirm that browser and server events share the platform-specific deduplication identifiers: Meta and TikTok require a matching event name or type plus event_id, while GA4 and Google Ads purchases use transaction_id.
- Check whether the request was cancelled, blocked, or returned an error.
- Check whether the request occurred before or after the page redirect.
An observed request with a plausible payload proves only that the browser attempted delivery or that an endpoint accepted a request. It does not prove platform processing, attribution, bidding eligibility, or business-data accuracy. A Purchase request with a value of 0 can still be transmitted successfully.
GTM reports that the tag fired, but Network shows no request
- Consent state and built-in consent checks.
- Ad-blocking or browser privacy settings.
- Content Security Policy restrictions.
- A broken tag template or JavaScript runtime error.
- A request cancelled by immediate navigation.
- Shopify Pixel Sandbox limitations.
Step 6: Confirm receipt inside each advertising platform
GA4
Open DebugView, select the test device, and confirm that the event sequence is reasonable:
page_view
view_item
add_to_cart
begin_checkout
purchaseOpen purchase and verify transaction_id, value, currency, and items.

Google Ads
Open Goals -> Conversions -> Summary and review the tracking status of the relevant action. For Unverified, Tag inactive, or Needs attention, launch Tag Assistant from the conversion action. Account status can take time to refresh after a fix, so use Tag Assistant and the actual request as the immediate validation layer.

Meta Ads
In Events Manager, select the correct data source and review Overview, Test Events, Diagnostics, Event Deduplication, and Event Match Quality. Test Events confirms browser and server delivery; Diagnostics identifies duplicate events, invalid parameters, or data-quality problems.
TikTok Ads
Use TikTok Pixel Helper to inspect browser tags, events, and parameters; Events Manager -> Test Events for real-time receipt; and Events Manager -> Diagnostics for persistent implementation errors.
Microsoft Advertising
Use UET Tag Helper to validate the UET tag ID, page-load event, custom events, variable revenue, currency, and the conversion-goal conditions. The UET status in Microsoft Advertising may take additional time to update. If Microsoft Advertising Conversions API is also used, verify its event_id and confirm that browser and server delivery does not create duplicate reporting. For variable revenue, preserve revenue_value and currency exactly as required by the destination.
5. Diagnose Duplicate Conversions and Event Deduplication
Duplicate purchases inflate reported ROAS and feed incorrect signals into automated bidding. Review the browser, server, plugins, apps, GTM, and imported goals together rather than auditing only one layer.
Google Ads deduplication
Google Ads recommends sending a unique transaction ID with every purchase. If the confirmation page refreshes and the same order is sent again to the same conversion action, Google Ads can use the matching transaction ID to identify the duplicate. A transaction ID does not automatically deduplicate separate Purchase conversion actions.
- Different orders must not share the same transaction ID.
- The transaction ID must not be empty.
- Do not use a customer email address or phone number as the order ID.
- Browser tags and backend uploads should use the same order ID for the same transaction.
Meta Pixel and Conversions API deduplication
When the same Purchase is sent through Meta Pixel and Conversions API, the browser and server events must share the same event_name and event_id. Different orders must use different event_id values. Otherwise, a single order may be counted as two events.
- Do the browser and server events use the same event_name?
- Do both versions of the same order use the same event_id?
- Does each different order receive a different event ID?
- Does a server retry create a new event ID and accidentally generate a second event?
- Are a Shopify app and a custom CAPI implementation both sending the same purchase?
TikTok Pixel and Events API deduplication
When TikTok Pixel and Events API send the same event, both sides must use the same event name or type and the same event_id so TikTok can recognize the pair and retain one logical event.
Order-confirmation page refreshes
Using only a confirmation-page page view to trigger Purchase is high risk. Refreshing, bookmarking, or reopening the page can fire the event again. Use a unique order ID and, where possible, trigger from a genuine order-completion event rather than an ordinary page load.
6. Review Conversion Goals, Cross-Domain Checkout, and Attribution
Primary versus secondary conversion actions
In Google Ads, primary conversion actions normally appear in the Conversions column and can be used for bidding when the campaign uses the relevant goal. Secondary actions are mainly for observation and usually appear in All conversions. However, a secondary action can be used for bidding when it is included in a custom goal that the campaign actively uses.
When the event appears in the account but the campaign does not optimize toward it, verify that the action is primary and that the campaign is using the corresponding goal.
Every versus One
Purchase actions generally need to count every transaction. Lead forms often use One because repeated submissions from the same ad click may not represent multiple valuable leads. For sales, use a unique transaction ID to remove duplicate orders.

Duplicate primary purchase goals
An account may contain a native Google Ads Purchase, an imported GA4 Purchase, and a Purchase created by a Shopify app. If all three are primary and used by the campaign, the Conversions column may contain multiple purchase signals for one order.
Enhanced Conversions
After enabling Enhanced Conversions, confirm that eligible first-party customer data is actually sent in the required format. A working base Purchase tag does not prove that Enhanced Conversions is healthy.
Cross-domain checkout and payment redirects
Some stores move visitors from the main domain to a separate checkout domain, third-party payment provider, booking system, form service, subdomain, or regional site. Incorrect cross-domain configuration can cause:
- A single customer session to split into multiple sessions.
- The original advertising source to disappear.
- The payment provider to become the reported referral source.
- The click ID to be lost before checkout.
- Events on the storefront but no events after payment succeeds.
Use GA4 cross-domain measurement only between domains you control and on which the same GA4 tag can be deployed. For third-party payment domains where you cannot deploy that tag, review List unwanted referrals so the provider does not replace the original source; this is not a substitute for cross-domain measurement. Test the entire redirect from a landing page instead of opening the success page directly.

7. Shopify-Specific Tracking Diagnostics
Shopify Customer Events pixels run in sandboxed environments. App pixels use a Strict sandbox, while custom pixels use a Lax sandbox; their capabilities are not identical. Both should rely on Shopify Customer Events and the Web Pixels API instead of traditional DOM scraping.
1. Do not rely on Google Tag Assistant alone
Google Tag Assistant is not compatible with GTM custom pixels in Shopify. Use Shopify Pixel Helper to confirm that customer events enter the sandbox, then validate the resulting Network request and the destination platform’s Test Events or diagnostics.
Shopify Pixel Helper -> Custom Pixel dataLayer -> GTM tag -> Network request -> Advertising platform Test Events
2. Avoid DOM scraping inside the sandbox
Shopify Web Pixels operate in a sandbox. Implementations that read or modify the storefront DOM may fail or behave inconsistently. Prefer data supplied by Shopify Customer Events and the Web Pixels API instead of scraping product prices, buttons, or order details with CSS selectors.
- A click trigger that listens directly to a theme button.
- A DOM Element Variable that scrapes the displayed product price.
- Direct use of document.querySelector.
- Using the sandbox URL as though it were the storefront URL.
- Assuming GA4 enhanced measurement can discover every sandboxed interaction automatically.
3. Check whether the pixel is awaiting consent
Open Shopify Settings -> Customer events -> Custom pixels and start a test. If Pixel Helper reports Pixel is awaiting consent, review:
- The customer-privacy permissions assigned to the custom pixel.
- Cookie banner configuration for the active market.
- Whether the visitor granted Analytics or Marketing consent.
- Whether the consent management platform integrates with Shopify Customer Privacy API.
4. Use checkout_completed correctly
Shopify checkout_completed normally fires once per checkout and is often observed on the Thank You page. With a post-purchase upsell, it can fire on the first upsell page rather than again on the Thank You page. It may also fail to fire when the expected page does not load successfully.
Test standard card checkout, Shop Pay or accelerated checkout, discounted orders, free orders, post-purchase upsells, multi-currency orders, and cases where the Thank You page does not fully load.
8. Common WordPress and WooCommerce Diagnostic Issues
The most common WordPress problem is not an inability to install tracking; it is installing the same tracking in too many places. Review the following locations in order:
- GTM installation plugins.
- GA4 or advertising conversion plugins.
- Separate Meta, TikTok, or Microsoft Advertising plugins.
- Theme header and footer custom-code areas.
- Page-builder custom code.
- WooCommerce Thank You page customizations.
- CDN, caching, script-combination, and JavaScript delay settings.
WooCommerce add-to-cart, checkout, and payment flows are frequently modified by AJAX or third-party plugins. Do not assume that a standard button-click rule or default confirmation-page rule still works. Use the real data layer and order-completion event as the source of truth.
Extra checks for performance and caching plugins
- Do they delay GTM or pixel loading?
- Do combined scripts change execution order?
- Is an order confirmation page containing order data being cached?
- Does the consent update occur after advertising tags have already run?
- Are third-party tracking requests blocked or proxied incorrectly?
- Does the issue appear only when the administrator is logged out?
9. Troubleshooting Matrix
| Symptom | Check first |
|---|---|
| GTM says Fired, but GA4 has no event | Measurement ID, consent state, Network request, ad blocker |
| GA4 has Purchase, but Google Ads has no conversion | Ads conversion ID / label, import settings, primary status, attribution |
| One order produces two Purchase events | Duplicate plugin, automatic plus manual event, browser/server deduplication |
| Purchase value is 0 | Data-layer path, variable read timing, numeric formatting |
| Every order uses the same value | Hard-coded GTM variable or retained test value |
| Currency is always USD | Multi-currency mapping or store-default currency |
| Product events work, but checkout events do not | Cross-domain flow, Shopify sandbox, missing tag on checkout |
| Payment provider becomes the GA4 source | Cross-domain measurement and Unwanted Referrals |
| Advertising storage or identifiers continue after consent is rejected | Late default consent state, missing consent checks, or advertising identifiers or user data sent contrary to the visitor’s choice |
| Tags do not resume after consent is accepted | CMP fails to send consent update or update occurs after redirect |
| Meta reports roughly twice the backend orders | Pixel/CAPI deduplication or Shopify app plus manual implementation |
| Microsoft tag is active, but revenue is missing | Goal conditions, variable revenue, currency parameters |
| TikTok has Page View but no Purchase | Purchase trigger, event name, required parameters |
| Shopify Tag Assistant cannot detect GTM | GTM is in the custom-pixel sandbox; use Shopify Pixel Helper |
10. Acceptance Criteria for a Reliable Implementation
A successful test purchase should meet all of the following conditions:
- Purchase fires only after the order is genuinely successful.
- One test order resolves to one logical conversion after deduplication.
- The order ID matches the commerce backend.
- The conversion value follows the agreed definition and the currency is correct.
- Product IDs, prices, and quantities are accurate.
- GTM Preview shows the complete event and populated variables.
- The corresponding request exists in Network.
- The destination platform recognizes the event in its test tool.
- Browser and server events are deduplicated.
- Accepted and rejected consent states produce the intended behavior.
- Google Ads Primary, Secondary, and Count settings are correct.
- Cross-domain checkout preserves the original source.
- Refreshing the confirmation page does not create another independent conversion.
Final acceptance standard One real business order -> one logical advertising conversion after deduplication -> correct order ID, value, currency, and product data -> verified in the platform -> reconcilable with the commerce backend.
11. Advertising Tracking Diagnostic Report Template
Use the structure below to record the audit. Save screenshots of the test path, Network payload, platform Test Events, and backend order as evidence attachments.
1. Website and environment
2. Tracking installation inventory
3. Test order
4. Diagnostic results
5. Issue and remediation
6. Regression testing
Complete evidence chain
Business action -> Customer Event / Data Layer -> GTM Trigger -> Advertising Tag -> Network Request -> Platform Test Event -> Conversion Goal -> Backend Reconciliation
Only when every layer of this chain is correct should the conversion data be used for campaign evaluation, ROAS reporting, and automated bidding.

