Loading tutorials…
Loading tutorials…
Shopify killed checkout.liquid in August 2025. If you haven't migrated, your old pixels and order-confirmation customizations are silently broken. Here's the full checkout extensibility migration — pixels, CAPI, and post-purchase logic.
Who this is forShopify Plus or any store that previously customized checkout.liquid, ran ad pixels via the old checkout, or has post-purchase upsell flows. If your conversion data started looking off after August 2025, you almost certainly need this.
What you'll need
Step 1
Before deleting anything, list every pixel, script, and customization that lived in the old checkout. You cannot migrate what you have not catalogued.
If you still have Git history of checkout.liquid, pull the last working version and grep for: 'Meta Pixel,' 'fbq(,' 'gtag(,' 'ttq.track,' 'snaptr,' 'klaviyo,' 'rdt(,' 'tiktok.' Each of those is a pixel that needs migrating.
Also note: order-confirmation HTML/CSS customizations, post-purchase logic (e.g., Shogun blocks), and any line_item attributes that drove downstream automations.
Create a migration spreadsheet: column A = old item, column B = new home (Customer Events / Web Pixels / theme app extension / post-purchase page), column C = status (todo / migrated / validated).
If your store had a heavily-customized checkout.liquid (multiple ad pixels, custom upsells, custom validation), expect 15-25 line items in this audit. Don't underestimate scope.
Step 2
Shopify Admin → Settings → Customer events. This is the new home for Meta Pixel, Google tags, TikTok Pixel, Snap, Reddit, etc.
Open Shopify Admin → Settings → Customer events. You will see two sections: App pixels (installed by apps like Meta, TikTok) and Custom pixels (your own JavaScript).
For each official app pixel (Meta, Google, TikTok, Pinterest), install/upgrade the latest version of the channel app — most now register their pixel automatically via the App pixel sandbox.
For custom pixels (a Reddit pixel, a homegrown analytics tag), click 'Add custom pixel.' Write JavaScript that subscribes to standard events: 'checkout_started,' 'checkout_completed,' 'product_viewed,' 'product_added_to_cart.'
Critical: Custom pixels run in a sandboxed iframe and cannot access the parent DOM. Don't try to read user data via document.querySelector — use the event payload Shopify provides.
Set the permission level: 'Not required' for analytics, 'Required' for things that need explicit consent (most ad pixels in EU). Wrong setting causes silent data loss when Shopify Customer Privacy API rejects the load.
Step 3
Install the latest Meta sales channel app. It registers an App pixel automatically. Verify both browser-side and server-side (CAPI) events fire.
Shopify Admin → Sales channels → Meta. If you have the old "Facebook & Instagram" channel, uninstall it first — the new combined app has different pixel hooks.
In the Meta app → Settings → Data sharing, set the data-sharing level to 'Maximum.' This enables CAPI (server-side events) in addition to browser-side.
Link your Meta Business Manager, Pixel ID, and (for CAPI) generate a long-lived system user token. Without the token, CAPI events won't fire and you'll lose 20-40% of iOS attribution.
Validate in Meta Events Manager → Test events. Add the test event code, run a test purchase, and confirm both 'Browser' and 'Server' columns show the Purchase event.
If only Browser shows, CAPI is not connected. The most common cause is a missing or expired system-user token.
Step 4
Shopify Admin → Settings → Checkout → Customize. The new checkout editor uses Online Store 2.0 sections + theme app extensions, not Liquid.
Click Customize on your live checkout. The right rail has sections: Header, Order Summary, Information, Shipping, Payment.
For text/branding changes (logos, colors, fonts), use the visual editor. Most checkout.liquid CSS hacks have a settings-driven equivalent now.
For HTML blocks that injected trust badges, testimonials, or custom messaging, install a checkout-extensibility-compatible app (e.g., Checkout Plus, Checkout Wiser) or build a Theme App Extension via Shopify CLI.
Theme App Extensions are React/Preact components rendered server-side by Shopify. They run in the checkout sandbox and have access to Shopify's checkout APIs (cart, customer, address).
If you had post-purchase upsells via checkout.liquid, migrate to Shopify Post-Purchase apps (Zipify OCU, AfterSell, Reconvert) — they use the same sandbox.
Step 5
The Thank You / Order Status page also moved to checkout extensibility. Old 'Additional scripts' in Settings → Checkout are deprecated.
If you had custom analytics, survey embeds, or referral widgets on the Thank You page, they likely lived in Settings → Checkout → Additional scripts. That field is gone in checkout extensibility.
Re-implement via Customer Events. Subscribe to the 'checkout_completed' event in a custom pixel and inject your script when that event fires.
For richer Thank You page customizations (one-click upsells, branded experiences), install a post-purchase app that ships with checkout extensibility support.
Test the Thank You page experience end-to-end. The most common bug after migration: the survey/upsell tool that worked for 3 years just silently stops appearing.
Step 6
Run a real test purchase in incognito. Verify every pixel, CAPI event, and Thank You customization fires within 60 seconds.
Open an incognito window. Add a low-price product to cart, complete checkout with a real card (refund yourself after).
Check each platform in parallel:
- Meta Events Manager → Test events: Purchase event with browser + server columns populated.
- Google Ads → Goals → Conversions: Purchase conversion status "Recording."
- GA4 → Reports → Realtime: purchase event with correct value and items array.
- TikTok Events Manager → Test events: CompletePayment fires.
- Klaviyo (if relevant) → Profiles → your test profile: 'Placed Order' event fires within 5 minutes.
Anything missing? Go back to the relevant custom pixel or app config and re-test. Do NOT mark migration done until every channel checks out.
Step 7
Once everything validates, delete old code, old apps, and old 'Additional scripts.' Document the new architecture for the next developer.
In your theme code, delete any references to checkout.liquid (it should already be inactive, but the file may still exist).
Uninstall apps that explicitly required checkout.liquid — they are doing nothing now and slowing down your admin.
In Settings → Checkout → Additional scripts: clear out anything still in there. Shopify ignores it now but it confuses future audits.
Document in your team wiki: 'Pixel X lives in Customer Events / Custom pixel Y. CAPI is via Z. Post-purchase logic is in W app.' The next person — including future-you — will thank you.
Common mistakes
Assuming the old pixels migrated themselves
What goes wrong: Most stores assume that updating the channel apps to their latest version handles migration. It does for the official pixel — but not for any custom scripts you added. 30-50% of attribution silently disappears for weeks before someone notices.
How to avoid: Run an explicit audit (Step 1). Move every custom pixel manually. Validate with test transactions, not assumptions.
Skipping CAPI setup
What goes wrong: Without CAPI (server-side events), iOS 14.5+ and Safari users with ITP are mostly invisible to Meta and TikTok. Ad platforms have nothing to optimize against. Cost-per-acquisition climbs 30-60% over 30 days.
How to avoid: In each ad-platform channel app, set data-sharing level to Maximum and complete the server-side authentication (system-user token, conversions API access token).
Double-counting via duplicate pixels
What goes wrong: You install the new Meta channel app AND leave the old Custom pixel running. Now every Purchase is tracked twice, ROAS in Ads Manager looks 2x better than reality, and bid strategies optimize toward inflated targets.
How to avoid: Audit Customer Events → confirm only ONE source per platform. Remove old custom pixels for Meta, Google, TikTok once their official channel app is verified.
Wrong customer privacy permission level
What goes wrong: Setting a pixel to 'Required permission' when your store doesn't have a consent banner means the pixel never loads. EU traffic generates zero events. You think the migration broke when actually consent was never granted.
How to avoid: If you have a real consent banner (CookieYes, Klaviyo Privacy Center), set Required. If you don't — start with 'Not required' and add a banner later.
Forgetting the Thank You page
What goes wrong: Custom survey, referral, or upsell tools that lived on the order-status page silently stop working. You lose 5-15% of post-purchase opportunities (referrals, repeat-order signals) without realizing for weeks.
How to avoid: Re-implement via 'checkout_completed' event in a custom pixel, or via a post-purchase app that supports checkout extensibility.
Trying to read DOM from inside a custom pixel
What goes wrong: Custom pixels run in a sandboxed iframe and cannot read document.querySelector or the parent page's variables. Old code patterns silently fail. You think the pixel isn't firing when it just can't see the data.
How to avoid: Use the event payload Shopify provides. Every customer event includes cart, checkout, customer, and context data — read from there.
Recap
Done — what's next
Why your Shopify pixels stopped firing (and how to fix it)
Read the next tutorial
Hand it off
Checkout extensibility migrations look simple from the outside and are surprisingly deep once you start. A vetted Shopify marketing specialist can audit, migrate, and validate every pixel in 1-2 weeks at $14-16/hr — typically $600-1,200 total for the migration, with ongoing pixel monitoring at $200-400/mo.
See specialist rates
Yes. Standard plans lost checkout.liquid in 2024. Shopify Plus stores had until August 13, 2025. The file may still exist in some legacy themes but no longer renders or fires pixel events reliably. Migrate now.
App pixels are registered by Shopify apps (Meta, Google, TikTok channels) and managed by those apps. Custom pixels are JavaScript you write yourself in Settings → Customer events. Both run in the same sandboxed iframe and have access to the same Customer Events API.
It can write its own cookies/localStorage inside the sandbox, but it cannot read cookies set by the parent page or other apps. If you need cross-domain or cross-app data, route through your server (e.g., via CAPI events with shared event_id) — not via the browser.
For simple branding (logo, colors, copy), no — the visual editor handles it. For custom HTML blocks, trust badges, or upsells, either install an app or hire a Shopify developer to build a Theme App Extension. DIY is possible but the Shopify CLI learning curve is steep.
In Meta Events Manager → Test events, paste your test event code, then run a test purchase. The Purchase event should appear with BOTH browser and server data sources within 60 seconds. If only browser appears, CAPI is misconfigured — usually a missing system-user token.
Shopify Magic features (AI-generated product descriptions, FAQs, etc.) are unrelated to checkout extensibility. They work on the storefront, not in checkout. You can use Magic in product listings without affecting your checkout migration.
Shopify
Your Meta pixel was firing yesterday. Today, Events Manager shows zero purchases. Welcome to one of the most common Shopify-stack failures — and one of the most expensive if it goes unnoticed. Here's the diagnostic sequence.
Shopify
Shop Pay one-click checkout lifts conversion rate 5-15% for returning shoppers. But misconfigured tracking means you'll attribute those wins to the wrong channel for months. Here's the correct setup.
Shopify
If your store gets traffic but your checkout completion rate is below 50%, you're losing real money to fixable friction. This walkthrough is the diagnostic sequence a Shopify CRO specialist runs in their first week on the account.
Meta Ads
Shopify deprecated the old pixel-in-theme.liquid path. The modern install runs through the Facebook & Instagram by Meta channel app and pulls in CAPI for free. Here's how to do it without double-counting purchases.
Google Analytics 4
Shopify's native Google channel app is now the right way to install GA4 — not the old liquid-snippet hacks that haunt half the tutorials online. Here's the current, supported path.