Shopify is retiring script tags, an older way for an app to inject JavaScript into your storefront without editing the theme. The right replacement depends on what the script does.
For a merchant, the risk is not the API name. It is a conversion event that stops reaching an ad platform, or a popup, chat tool, badge, or product-page component that disappears. Apps that still rely on ScriptTags can also fail during installation, setup, or updates after the API cutoff.
Status as of September 2026: Shopify stops apps from creating or updating storefront script tags on October 1, 2026; existing storefront script tags keep running until March 1, 2027.
Check whether your store is affected
After October 1, 2026, Shopify Admin shows a dismissible install banner when an app uses script tags but provides neither an app embed block nor a web pixel. That banner is strong evidence that the app needs attention.
An app install, setup, or update can also fail at the point where it calls scriptTagCreate or scriptTagUpdate. Shopify documents a permission error from the mutations, but it does not publish one universal merchant-facing error message. A generic app error might have another cause.
Use this two-minute check:
- List your third-party apps. Start with apps that affect tracking or visible storefront features: analytics, advertising, affiliate tracking, popups, chat, reviews, badges, recommendations, and custom widgets.
- Check the published theme’s App embeds. Go to Online Store → Themes → Customize → Theme settings → App embeds. Record which relevant embeds are enabled. An absent embed is not proof of a problem because a tracking-only app might use a web pixel.
-
Inventory custom code sources. Note code in
theme.liquid, Custom Liquid blocks, Shopify Customer Events, tag managers, and handover notes from previous developers. Theme code is not automatically a ScriptTag; the goal is to identify every possible source before removing anything.

The App embeds panel shows which theme app extensions are active on the current theme. It does not, by itself, prove whether an app still uses a legacy ScriptTag.
If you maintain the app, the scriptTags query returns that app’s tags. Shopify Admin gives a merchant no single list covering every installed app, but the storefront page source shows which app script URLs Shopify currently injects.
Find script tags in the page source
You can check any Shopify storefront for active script tags without admin access. Shopify injects them through its own header code, which every theme outputs with {{ content_for_header }}. In our September 2026 checks of live storefronts, that code contained a function named asyncLoad that loads a list of app script URLs.
- Open the storefront homepage in Chrome. If the store is password-protected, enter the storefront password first.
- Open the page source with Cmd + Option + U on Mac or Ctrl + U on Windows.
- Search the source for
asyncLoadwith Cmd + F or Ctrl + F. - Read the
var urls = [...]line inside that function. Each URL is one injected script.
function asyncLoad() {
if (isLoaded) return;
isLoaded = true;
var urls = ["https:\/\/reviews.example.com\/widget.js?shop=your-store.myshopify.com","https:\/\/popup.example.com\/loader.js?shop=your-store.myshopify.com"];
for (var i = 0; i < urls.length; i++) {
var s = document.createElement('script');
s.async = true;
s.src = urls[i];
…
}
};
The source escapes each slash as \/, so read https:\/\/ as https://. Each URL ends with ?shop= and the store’s myshopify.com domain. The host name usually identifies the vendor. When it does not, search for the domain or ask the developer who manages the store’s apps.
If the source has no asyncLoad function, Shopify is not injecting app scripts on that page through this path. Repeat the check on a product page before you conclude that the store is clear.
Keep these limits in mind:
- Shopify does not document this markup. It is a strong diagnostic signal, and Shopify can change it without notice.
- Scripts added through theme code, Custom Liquid blocks, app embeds, or web pixels load elsewhere and do not appear in this list. The ScriptTag cutoff does not affect them.
- The list identifies scripts. Match each URL to an installed app to learn which feature it powers, then confirm the replacement plan with the vendor using the question later in this article.
Understand what each date breaks
October 1, 2026 breaks creation and updates. Shopify’s August 24, 2026 developer changelog says scriptTagCreate and scriptTagUpdate return a user error. The current migration guide describes it as a permission error. The REST Admin API also rejects equivalent POST and PUT requests. This applies to every API version, so version pinning does not defer the change.
Existing storefront script tags continue to run through February 2027. This creates an awkward period in which an old installation may still work while a fresh install or an update path cannot create the tag it expects.
March 1, 2027 breaks execution. Shopify stops injecting script tags into storefront pages. The JavaScript no longer loads, so any storefront feature that still depends on it stops working for that store.
The change covers tags with display_scope: online_store. The storefront portion of an older display_scope: all tag is affected too. Read and cleanup remain available: scriptTags can audit an app’s records, and scriptTagDelete can remove a legacy record after migration.

Choose the replacement by what the script does
| What the old script does | Use this replacement | What the merchant controls |
|---|---|---|
| Collects analytics, conversion, or customer-behavior data only | Web pixel | No App embed activation is required |
| Loads a popup, chat bubble, floating button, badge, or other overlay | App embed block inside a theme app extension | Enable the App embed on the published theme |
| Places inline content in a specific page position, such as a product review or product-page module | App block inside a theme app extension | Add and position the block in a compatible theme section |

This split follows Shopify’s storefront migration guide. Shopify recommends a web pixel when the script only collects data. App embed blocks cover storefront JavaScript and floating or overlaid UI. App blocks give merchants precise placement inside compatible theme sections.
Ask the app vendor one question in writing:
Does your storefront code currently use a ScriptTag, a theme app extension, or a web pixel, and what is your plan for March 1, 2027?
Ask for the answer in a support ticket or email so you have a record. A useful response identifies the current delivery method, the replacement, any theme-editor step, and how the vendor expects you to verify it.
If the vendor has disappeared or offers no migration path, do not copy its JavaScript blindly. First document the business function: which pages use it, what customers see, what event or data it sends, and which system receives it. Then replace the function with a maintained app or a scoped custom implementation.
Keep the legacy feature running while you build and test the replacement. If the old app owns the ScriptTag, another app cannot simply take over that record. After the replacement passes, follow the old app’s supported removal process or uninstall it. If a store-controlled custom app created the tag, the developer who controls that app can audit and delete its records.
There is one important exception. Apps created directly in Shopify Admin cannot use app extensions. Shopify’s documented fallback is to move the script into the theme, preferably through a Custom Liquid block, or use theme code when necessary. That approach needs an explicit owner and a theme-upgrade plan because the code remains after the app is gone.
Avoid duplicate tracking during migration
Shopify warns that a legacy tag and its replacement can load the same script twice. Analytics events can be counted twice, and UI can render twice. For tracking, that may look like duplicate purchase or add_to_cart events rather than a clean migration.
Use a short, controlled overlap:
- Activate the web pixel, app embed block, or app block while the old ScriptTag still works.
- Run the agreed test and confirm that the replacement produces the expected result.
- Check specifically for duplicate events, requests, widgets, and side effects.
- Delete the old record with
scriptTagDelete, or remove it through the vendor’s supported process. - Repeat the test with only the replacement active.
Do not leave both paths running as a long-term safety measure. Also do not delete the old tag before the new path is active; Shopify’s guide warns that this creates a gap where neither implementation works.
Verify the replacement before and after cleanup
Write down one expected result before changing anything. Use the same page, action, consent state, browser conditions, event name, and destination account after the migration. That makes the comparison meaningful.
- GA4: enable debug mode and use DebugView to watch the relevant event and its parameters arrive in real time. Google notes that consent and client-side privacy controls can prevent events from appearing, so test the consent states your store supports.
- Meta: use the browser extension formerly called Meta Pixel Helper, now listed as Meta Ads Data Advisor, to inspect browser-side events and warnings. Compare the event name and key parameters before and after. A browser helper does not by itself prove final attribution, so also confirm the event in the destination account.
- Google Ads: use Tag Assistant for the controlled action, then review the conversion action’s status and tag diagnostics in Google Ads. The dashboard can take time to update, so do not use it as the only immediate check. For purchase tracking, preserve a unique transaction ID so the same order is not counted twice.
For visible storefront features, compare the UI as well: correct pages, desktop and mobile behavior, interactions, and the absence of duplicate widgets. For an app embed, confirm it is enabled on the published theme. Activation is theme-specific, so recheck it whenever another theme is published.
Repeat the purchase check before a sales peak. Our Shopify BFCM checklist uses a test order and a temporary custom pixel to confirm the checkout_completed event still fires.
Know what this article does not cover
- This article covers storefront script tags. Order status page script tags follow a separate, earlier schedule.
- It does not prove that every app install or update error is caused by this deprecation. Confirm the failed mutation or ask the vendor.
- It does not assume that any named third-party app is affected or safe. Only the app vendor can confirm its current implementation and release plan.
- An app block requires a theme with JSON templates and a section that supports app blocks. Check theme compatibility before choosing it.
- Verification tools show different parts of the data path and may be affected by consent, processing delay, server-side delivery, or account configuration. No single green status proves the full customer journey.
The practical fix is to identify the feature behind the ScriptTag, migrate it to the supported delivery method, test both function and data quality, remove the legacy path, and test again.