CheckoutWorks Shopify Partner

We fix Shopify bugs at a flat $49 per fix. Most fixes within 24 hours.

Fix My Bug →

Shopify Script Tags Are Deprecated: What Breaks and How to Migrate

·Johnny Chen Founder & Shopify Developer at CheckoutWorks
Shopify Script Tags migration cover showing creation and updates failing on October 1, 2026 and script tags stopping on March 1, 2027, beside the headline “What breaks & how to migrate.”

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:

  1. 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.
  2. 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.
  3. 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.

Shopify theme editor showing the App embeds panel with one app embed disabled and another enabled

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.

  1. Open the storefront homepage in Chrome. If the store is password-protected, enter the storefront password first.
  2. Open the page source with Cmd + Option + U on Mac or Ctrl + U on Windows.
  3. Search the source for asyncLoad with Cmd + F or Ctrl + F.
  4. 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.

Timeline showing Shopify ScriptTag creation and updates stopping on October 1, 2026 and storefront injection stopping on March 1, 2027

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

Decision tree for replacing a Shopify ScriptTag with a web pixel, app embed block, or app block

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:

  1. Activate the web pixel, app embed block, or app block while the old ScriptTag still works.
  2. Run the agreed test and confirm that the replacement produces the expected result.
  3. Check specifically for duplicate events, requests, widgets, and side effects.
  4. Delete the old record with scriptTagDelete, or remove it through the vendor’s supported process.
  5. 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.

Get Shopify help _

Still relying on Shopify script tags?

We’ll migrate and test them.

$99 USD

SCRIPT TAG MIGRATION · 30-DAY GUARANTEE

Migrate my script tags