Why is my dynamic checkout button showing up twice after I disabled a payment app?

A leftover app embed or hard-coded snippet from a payment app you disabled is almost always the culprit. Here's how to find and remove it.

dynamic checkout buttonaccelerated checkoutpayment apptheme app embedduplicate button

What's going on

You disabled or uninstalled a payment app, maybe you switched providers, or you were just testing something, and now the product page shows two accelerated checkout buttons stacked on top of each other: the normal Shopify dynamic checkout button (labeled something like "Buy it now" or showing a Shop Pay or PayPal-style logo) plus a second, near-identical button underneath or beside it. Removing the app from your admin didn't make the second button go away.

The duplication isn't random and isn't limited to one theme. If you switch themes or install a fresh one, the same double button often reappears. That's the biggest clue: the extra button isn't coming from a per-theme customizer setting, it's coming from something injected into the store more broadly, whether a leftover app embed toggle, a manually pasted snippet the app's install instructions had you add to your theme, or in rarer cases a leftover script from an older integration.

Why it happens

Shopify's dynamic checkout button, the accelerated "Buy it now" or Shop Pay-style button under Add to cart, can end up on a page two different ways: natively through the theme's built-in setting or a payment button tag in the product form, and separately through a third-party app adding its own button, either via a theme app embed block or, for older apps, a snippet the merchant pasted into the theme by hand during setup.

Disabling or uninstalling an app reliably removes what Shopify's platform can track and clean up automatically, mainly modern app embeds and blocks. It does not remove code that was manually copied into your theme files, and an embed toggle doesn't always update immediately if the app was disabled rather than fully uninstalled. That's why the second button can survive the very action meant to remove it, and why it shows up on any theme built from the same underlying files.

5 ways to fix it

1

Check theme app embeds first — a leftover one is the most common cause

Go to Online Store, Themes, Customize, then open the App embeds panel in the left sidebar. Any toggle still switched on there for the payment app you disabled or uninstalled is a strong suspect: some payment and checkout apps add their own accelerated-checkout button through an app embed block, and if the app was disabled rather than fully uninstalled, or the uninstall didn't clean up the embed, that block keeps rendering its own button next to Shopify's native dynamic checkout button. Turn off or remove any embed you don't recognize or no longer need, then reload the product page in a private or incognito window to confirm the duplicate is gone.

2

If the duplicate follows you across every theme, look for a hard-coded snippet, not just an embed

Modern app embeds and blocks are usually removed automatically when Shopify detects an app has been uninstalled, but older-style apps, including some Buy Button or buy-now-pay-later integrations, instead had merchants manually paste a Liquid snippet into product.liquid or a related product template during setup. Disabling or uninstalling the app does not remove code like that. Open Online Store, Themes, Edit code, and search your product template and product-form snippets for the app's name or for a duplicated payment button tag, then delete the leftover include. Because the code lives in the theme file itself, it reappears on every theme built from that same file, which matches a duplicate that follows you across themes.

3

Rule out a native Shopify setting duplicating the button before assuming it's an app

Confirm you don't have the dynamic checkout button coming from two native sources on the same page, for example a manually added payment button tag in the product form plus the theme's own 'show dynamic checkout button' setting also switched on for the same product block. This is a genuine free fix with no app involved: in the theme customizer, select the product template, open the buy-box or price block settings, and make sure only one source is producing the button. It's worth checking especially after a theme update, since an update can introduce a native toggle in a spot where a snippet was previously added by hand.

4

Check for a script injected outside the theme itself

Some apps use Shopify's script tag mechanism to inject JavaScript onto storefront pages independently of your theme files or app embeds. If an app added a button this way, the script can keep running even after the app is disabled, since it isn't necessarily tied to the app's active status and isn't always removed cleanly on uninstall. Check Settings, Apps and sales channels for any leftover custom or legacy apps with storefront access, and if you don't find the source in the theme editor or code, ask Shopify Support or a developer to check for an orphaned script via the Admin API.

5

When in doubt, use your browser's inspector to pinpoint the exact source

Right-click the duplicate button and choose Inspect to see which element it belongs to and what classes or data attributes surround it. Shopify's native button renders inside standard product-form markup, while an app-injected button usually carries the app's own class prefix or a distinct data attribute. That fingerprint tells you immediately whether you're chasing an app embed, a hard-coded snippet, or a genuine theme setting, so you're not guessing your way through the fixes above.

Bottom line

This is almost always a leftover app embed or manually pasted snippet that outlived the app it came from, not a bug in Shopify's own dynamic checkout feature, so check app embeds and your theme code before assuming you need another app to fix it. If your store frequently swaps payment or checkout apps, the more durable habit is fully uninstalling apps rather than just disabling them, and reviewing app embeds right after.

Still Stuck?

Browse the rest of the problem library, run a free storefront scan to catch issues like this automatically, or email us and we'll work out a custom solution for it.