Why does my checkout button just spin forever after I duplicated my theme?
A theme duplicate can leave app embeds, cached assets, or hardcoded element IDs out of sync with the original — and that mismatch shows up as an endlessly spinning checkout button, not a checkout settings problem.
What's going on
You duplicated your theme to test some changes safely, published or previewed it, and now clicking the checkout (or sometimes even add-to-cart) button just spins forever. No error message, no redirect, nothing in the storefront UI to explain what's wrong. Your checkout settings haven't changed, and the original theme still works fine — so it feels like it should be an easy fix, but there's no obvious place in Shopify admin that points at the cause.
This is a genuinely common pattern: merchants report it happens specifically after duplicating a theme (not after any deliberate settings change), which is the tell that the problem lives in the cart/theme layer — JavaScript, app embeds, or cached assets tied to that specific theme copy — rather than in your checkout configuration. Shopify's hosted checkout itself doesn't change based on which theme is active, so if only the duplicate misbehaves, something in that theme's files or app setup is different from the original, even though duplication is supposed to produce an identical copy.
Why it happens
Duplicating a theme copies its template and settings files, but it doesn't always leave every app embed or app block in the exact same on/off state as the original — especially for apps that inject cart drawers, upsells, or trust-badge widgets. If an embed the checkout flow quietly depends on ends up disabled or misconfigured in the copy, its script can throw an error that stops the click handler from ever running the redirect, with no visible message to the shopper.
Theme duplication can also regenerate internal section and block IDs. If any script (yours or an installed app's) locates the checkout button or cart form by a hardcoded ID or class rather than a stable data attribute, that lookup can silently fail in the copy even though the visible markup looks identical.
Less commonly, a stale cached asset — an old JS or CSS bundle served from the browser or an intermediary cache right after publishing the duplicate — can be out of sync with the current theme code until it's force-refreshed.
5 ways to fix it
Compare Network and Console output side by side on both themes
Open your browser's dev tools (F12), go to the Network and Console tabs, and click Checkout on the duplicated theme's preview while watching both. Look for a request that never completes, one that returns a 4xx/5xx, or a red JavaScript error at the moment the button starts spinning. Then repeat the exact same click on the original theme and compare. Whatever request or script appears on one side and not the other is almost always your culprit — this turns a vague 'it just spins' into a specific broken file or blocked call you can act on.
Check that every app embed is actually turned on in the copy
Go to the theme editor for the duplicated theme and open App embeds in the left panel. Duplicating a theme copies its settings data, but it does not guarantee that every app embed toggle ends up in the same on/off state as the original, especially if the duplicate was made a while ago or across a theme update. A cart drawer, upsell, or trust-badge app with a disabled or half-loaded embed can throw a silent script error that blocks the checkout button's click handler from ever firing the redirect. Re-enable anything that's off and test again.
Hard-refresh and test in an incognito window
Shopify serves theme assets from a CDN with cache-busting fingerprints, but browsers and some proxies can still hang onto an old cached copy of a script or stylesheet, particularly right after a duplicate-and-publish. Force-reload (Ctrl/Cmd+Shift+R) and re-test in a private/incognito window with no extensions. This costs nothing and rules out a stale-cache false alarm before you spend time diffing code.
Diff the theme code between the original and the duplicate
In Online Store > Themes > Actions > Edit code, compare assets/global.js (or your theme's main JS file) and any snippet tied to the cart form between the two themes. Section and block IDs can regenerate when a theme is duplicated, and if any script queries the DOM by a hardcoded ID or class that shifted, the click handler attaches to nothing (or throws) and the button just spins with no visible error to the shopper. This is a theme/cart-layer bug, not a checkout settings problem, which matches what merchants dealing with this usually find.
Isolate the offending app by disabling installed apps one at a time
If dev tools don't point at an obvious file, temporarily disable your installed apps one by one (starting with anything that touches the cart drawer, cart page, or add-to-cart flow) and retest the duplicated theme's checkout button after each. Once the spinning stops, you've found the app whose script is misbehaving on the copy, and you can re-enable it and dig into its embed/script settings specifically, or contact that app's support with a precise reproduction.
Bottom line
This is a theme/cart-layer bug, not a checkout configuration issue — checkout settings themselves rarely need to change. Start with dev-tools comparison (free, five minutes) before touching any code or installing anything; most cases trace back to a mismatched app embed or a stale cached asset. If you find yourself doing this kind of before/after script and network comparison across theme copies often, a general script-auditing tool can save time, but it's not required to fix a one-off case like this.
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.