rytisbalys.com / troubleshooting

Shopify's checkout upgrade silently breaks tracking. Here's what dies and how to migrate without losing your data

Shopify is finishing its move from the old checkout stack (checkout.liquid, Scripts, "additional scripts" boxes) to Checkout Extensibility. The platform migrates you whether you act or not - and when it does, whatever tracking lived in the old places simply stops. No error, no email that mentions your pixels. Your ads keep spending; the reporting quietly goes dark.

THE TRAP - the store keeps working after the auto-upgrade. Orders come in, checkout looks fine. Only your Purchase events, affiliate postbacks and survey scripts are gone - and most merchants notice weeks later, when ROAS "mysteriously" collapses.

01What actually dies

Anything pasted into the legacy surfaces: checkout.liquid customizations (Plus), order status / thank-you page "additional scripts" - Meta Pixel purchase snippets, GA4/gtag calls, Google Ads conversion tags, affiliate pixels, post-purchase surveys, TikTok/Snap tags. Shopify's replacement surfaces are Web Pixels (app pixels + custom pixels running in a sandbox) and Checkout UI extensions - and they have different capabilities, a different event model (analytics.subscribe), and stricter data access.

02Why a copy-paste migration fails

The old scripts had full page access; the new sandbox does not. Three things break in almost every migration I've seen:

1. Deduplication: the old thank-you snippet fired fbq('track','Purchase') with an event ID your server-side CAPI deduped against. The new custom pixel must reproduce the SAME event_id logic or you start double-counting the day it goes live.
2. Consent wiring: Web Pixels respect Shopify's Customer Privacy API. If your consent state doesn't map correctly, the pixel either fires for nobody (data gap) or for everybody (compliance problem).
3. Value and currency: sandbox events expose checkout data differently; miswired mapping sends Purchase events with no value - your ROAS and value-based bidding go blind even though events "fire".

03The migration that doesn't lose data

The order of operations matters more than the code:

1. Inventory every tag on the legacy surfaces (you'll find ones nobody remembers adding).
2. Rebuild them as a custom Web Pixel / UI extension with the same event names, event_id scheme and value mapping.
3. Run both in parallel on a test store or short window, comparing counts per event.
4. Verify end to end: browser network tab, platform test tools (Meta Test Events, GA4 DebugView), and most importantly - monthly totals against real paid orders.
5. Only then let the old surface die.

VERIFY - after migration, pick one real order and trace it: did exactly ONE Purchase reach Meta (browser or server, deduped)? Did GA4 record it with the right value? Does the affiliate platform see it? If you can't answer all three, the migration isn't done.

04If you run server-side tracking, you're half-safe (only half)

Conversions API events sent from your backend don't care what Shopify does to the checkout UI - they survive the upgrade untouched. But the BROWSER half of the pair dies with the old surface, which means dedup pairs break and match quality drops. Post-upgrade, your Events Manager will show server-only events; that's survivable, but it's a degraded state you should fix, not a final one.

The honest deadline note

Shopify has been rolling these retirements out in stages through 2025-2026 (Scripts, then checkout.liquid, then legacy thank-you / order status scripts). If your store still has anything in the old boxes, assume the clock is running - the auto-upgrade date for your store is shown in your Shopify admin notifications, and after it passes, migration becomes forensics.

Want it migrated without the data gap? I do Shopify checkout tracking migrations end to end - inventory, rebuild as Web Pixels with proper event_id dedup, parallel-run verification against real orders. I run my own Shopify stores, so this isn't theory.

work@rytisbalys.com