The short version
- Since October 1, 2026, no app can create or update a script tag. This holds on every API version, so pinning an older version buys you nothing.
- Script tags that already exist keep running until March 1, 2027. After that, Shopify stops injecting them into storefronts.
- The replacement is an app embed block (for anything that renders or changes your storefront) or a web pixel (for analytics only).
- Start with an audit. You can't migrate what you haven't found.
Last verified against Shopify's developer changelog on October 8, 2026.
If your store runs more than a few apps, some of them load their code through script tags. Review badges, popups, upsell widgets, chat bubbles, tracking pixels. Most merchants have never seen one, because that is the point: a script tag injects JavaScript into your storefront without touching your theme.
That invisibility is also why Shopify is retiring them. Script tags have been deprecated since 2021, when theme app extensions arrived. The deadlines are now fixed, and a Shopify script tag migration has to happen on your timeline before it happens on Shopify's.
This guide covers what changes and when, how to find the script tags your store depends on, which replacement fits which script, and a phased plan that keeps your Black Friday week untouched.
What is changing with Shopify script tags, and when?
Shopify script tag: a piece of JavaScript that an app loads onto your storefront through the Admin API, with no change to your theme code. Apps used them for popups, widgets, badges and tracking before theme app extensions and web pixels existed.
| Date | What happens | Who feels it |
|---|---|---|
| Already in effect | Script tags no longer run on the Order status page. | Apps and stores that relied on post-purchase scripts |
| October 1, 2026 | The scriptTagCreate and scriptTagUpdate mutations return a user error. The REST ScriptTag resource rejects POST and PUT. This applies to every API version. |
App developers, and any app that still creates script tags |
| October 1, 2026 onward | Merchants who install an app that uses script tags see a dismissible banner warning that part of the app will stop working. | Merchants installing those apps |
| March 1, 2027 | Shopify stops injecting script tags into storefronts. | Every storefront still relying on one |
Two things still work today. The scriptTags query and the scriptTagDelete mutation are unaffected, so you can audit and clean up. The change targets apps that create script tags with a display_scope of online_store, and it applies to every plan, Shopify Plus included.
Shopify's reasoning is fair. Script tags are hard for merchants to see or control, while app embed blocks show up in the theme editor and web pixels run in a sandbox that respects customer privacy permissions. Anyone who has chased a rogue popup through a store with 25 apps knows the problem.
The part to take seriously is what failure looks like. On March 1, 2027 nothing throws an error you will notice. The script stops loading, so the popup, the badge or the tracking event is simply gone from your storefront.
How do you find out which script tags your store still uses?
Merchants and store managers can do this without touching code:
- Check Settings > Customer events. Every web pixel is listed here. Tracking you rely on that is not listed may still be a script tag.
- Check Online Store > Themes > Customize > App embeds. Apps that already ship a theme app extension appear as toggles. If an app is installed but missing here and missing from Customer events, treat it as a script tag until proven otherwise.
- Open your product page with DevTools, Network tab, filtered to JS. List every third-party domain. Each unfamiliar domain maps back to an app.
- Ask every app vendor the same question in writing: "Does your storefront code ship as a script tag, an app embed block, or a web pixel, and what is your plan for March 1, 2027?" A vendor that answers "app embed and web pixel" has nothing for you to migrate.
If you build or maintain apps, query the script tags your app created. Run this per installed store with the read_script_tags scope:
query ListScriptTags {
scriptTags(first: 50) {
edges {
node {
id
src
displayScope
cache
createdAt
updatedAt
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Also search your own codebase for scriptTagCreate, scriptTagUpdate and any call to the REST script_tags.json endpoint. Those are the code paths that now fail.
Audit output you actually want: a simple sheet with one row per script. Columns: script source, owning app, what it does (analytics, UI, behaviour change), replacement type, owner, target date. The classification step decides everything that follows.
Web pixel or app embed block: what replaces a script tag?
Shopify gives you two replacements, and the choice depends on what the script does, not on which one is easier to build.
| What the script does | Replace it with | Merchant action |
|---|---|---|
| Sends analytics or conversion events (ad platforms, attribution, analytics) | Web pixel | None. It runs without the merchant switching anything on. |
| Renders UI on the storefront (popup, badge, widget, chat, banner) | App embed block in a theme app extension | Merchant activates it in the theme editor |
| Changes storefront behaviour (cart logic, DOM edits, form handling) | App embed block, plus theme-level testing | Merchant activates it, and you test per theme |
| Lives in an admin-created custom app | Neither is available. See the section on custom apps below. | Depends on the route you take |
My rule: if the script only listens, use a web pixel. Pixels are sandboxed, so they can subscribe to customer events but cannot reach into your storefront. If the script draws or changes anything on the page, it is an app embed block.
Don't try to squeeze a UI script into a pixel to avoid the theme editor step. It won't work, and it defeats the reason Shopify made the split. For ad platform tags specifically, check whether the vendor's app already ships a current web pixel before building anything. Our marketing app integrations work covers that audit for Google, Meta and TikTok setups.
How do you migrate a script tag to a theme app extension?
This is the path for any script that renders or changes something on the storefront. For an app you own, the sequence looks like this:
- Classify the script. Confirm it needs an app embed block and not a web pixel. Write down which settings the script reads today, because the block will need to expose them.
-
Scaffold a theme app extension. From your app directory, with Shopify CLI:
Pick Theme app extension when prompted.shopify app generate extension -
Move the JavaScript into the extension. Put the file in the extension's
assetsfolder and load it from an app embed block:
Anything the old script fetched from your server for configuration can become a block setting or stay behind an app proxy call.<!-- blocks/storefront-embed.liquid --> <script src="{{ 'storefront.js' | asset_url }}" defer></script> {% schema %} { "name": "Storefront script", "target": "body", "settings": [] } {% endschema %} -
Deploy and release before you ask anyone to activate it. Run
shopify app deployand release the version. - Get the merchant to activate the embed. Send them into the theme editor with the app embed pre-enabled using a deep link, then confirm the embed is active on the published theme.
-
Verify, then delete the old script tag. Once the embed works in production, remove the old tag:
mutation RemoveScriptTag($id: ID!) { scriptTagDelete(id: $id) { deletedScriptTagId userErrors { field message } } }
Three mistakes we'd watch for:
- Running both copies too long. A script tag and its replacement active together means double popups and duplicate events. Keep the overlap to a verification window, not a week.
- Forgetting that embeds are per theme. An app embed block is only active on the theme it was enabled on. When a merchant publishes a new theme, the embed is off until someone switches it on again.
- Losing server-side config. Script tags often hide behaviour that was configured elsewhere. If you move the script without moving its settings, the feature ships but behaves differently.
If you build apps for merchants and need this done across a product line, our bespoke app development team handles extension work inside existing apps.
What if the script lives in an admin-created custom app?
This is the awkward case. Admin-created custom apps cannot use app extensions, which means they cannot use theme app extensions or web pixels either. You have two real options.
- Move the script into your theme code. It works, but Shopify's own guidance is to do this only when the app cannot use extensions, because editing theme code takes the theme off its automatic upgrade path.
- Have the vendor ship a real app. If a third-party service had your store create the app and paste an access token into their dashboard, that service needs to release an app that uses a theme app extension or a web pixel. It is their problem to solve, so put the question to them now.
If you do move a script into the theme, isolate it in one snippet, comment where it came from, and record it in your theme changelog. Six months from now someone will ask why it is there. If the script is more than a few lines or needs configuration, build a proper app instead.
How should you phase the migration around Black Friday?
Existing script tags run until March 1, 2027, so you do have time. The risk is not the migration itself. The risk is changing tracking or storefront scripts during peak trading. This phasing works for a typical store, and heavier-traffic stores will want longer windows.
| Phase | Window | What happens |
|---|---|---|
| 1. Audit | Now to October 23 | Inventory every script, classify it, send the vendor question, assign owners. |
| 2. Pixels | October 26 to November 13 | Move analytics-only scripts to web pixels. These need no merchant action, so risk is low. Verify events in each platform's own debugger. |
| Freeze | November 16 to December 1 | No tracking or theme-script changes through Black Friday (November 27) and Cyber Monday (November 30), unless something is broken. |
| 3. Storefront scripts | December 2 to January 29 | Rebuild UI and behaviour scripts as app embed blocks. Test on a duplicate theme first, then activate on the published theme. |
| 4. Verify and clean up | February 1 to February 19 | Confirm every embed is live, delete the old script tags with scriptTagDelete, and keep about ten days of buffer before March 1. |
If a vendor cannot commit to a replacement date by December, start evaluating alternatives now. Waiting for an answer in February leaves you no room to switch.
Stores on a maintenance retainer can fold phases 2 to 4 into their ongoing app and theme updates. If you are still deciding who should own the work, our guide on how to choose a Shopify development agency covers the questions worth asking before you sign.
Common questions about Shopify script tag migration
Do Shopify script tags still work after October 1, 2026?
Script tags that already exist keep running until March 1, 2027. What changed on October 1 is that apps can no longer create or update them, on any API version. The scriptTags query and the scriptTagDelete mutation still work, so you can audit and clean up.
What happens to my store on March 1, 2027 if I haven't finished my Shopify script tag migration?
Shopify stops injecting script tags into storefronts. Any feature that depends on one, such as a popup, badge, widget or tracking script, stops loading on your storefront. Nothing in your theme changes, so the feature simply disappears.
Should I replace a script tag with a web pixel or a theme app extension?
Use a web pixel if the script only collects analytics or conversion data. Use an app embed block, shipped in a theme app extension, if the script renders anything on the storefront or changes how it behaves. Web pixels need no action from the merchant, while app embed blocks are switched on in the theme editor.
How do I find out if my Shopify apps use script tags?
Check Settings > Customer events for web pixels and Online Store > Themes > Customize > App embeds for apps that ship a theme app extension. Then ask each vendor in writing whether their storefront code is a script tag, an app embed block or a web pixel. Developers can run the scriptTags GraphQL query for apps they own.
How long does a Shopify script tag migration take?
For an analytics-only script moving to a web pixel, plan on 2 to 5 days including testing. A storefront widget moving to an app embed block usually takes 1 to 3 weeks, depending on how much logic and configuration it carries. Add buffer for merchant activation and testing across themes.
Can an agency migrate my Shopify script tags for me?
Yes. BrainBox Infoway provides Shopify development and AI automation for ecommerce from Ahmedabad, India, with ~20 specialists serving merchants and agencies in the US, EU, AUS, and CAN. The team audits which scripts your store loads, classifies each one, and rebuilds them as web pixels or app embed blocks. Agencies can hand the work over under a white-label arrangement, or you can get a free quote for your store.