Why does Add to Cart stop working on just one of my Shopify products or stores?
If Add to Cart works on your other products or dev store but fails on one live storefront, the cause is usually a script conflict, a duplicate product form, or an out-of-stock variant — not a Shopify outage.
What's going on
A merchant reported that Add to Cart simply stopped working on their storefront — no error toast, no cart update, sometimes not even a visible response when the button is clicked. The frustrating part is that it's isolated: it might work fine on a duplicate/dev theme, on most products but not one specific product, or in one browser but not another. That inconsistency is the biggest clue, because it rules out a Shopify platform-wide outage and points to something local to that theme, that template, or an installed app.
Because the /cart/add.js endpoint and the underlying product form markup are standard across all Shopify themes, a working store shouldn't fail unless one of a few things has gone wrong: a JavaScript error elsewhere on the page is breaking script execution before the Add to Cart click handler ever gets attached, an app has injected a second product form or overridden the button's behavior, the specific variant selected is unavailable for purchase, or a recent theme code edit changed how the form submits. Each of these has a different fix, which is why isolating the exact cause first — rather than guessing — saves the most time.
Why it happens
Shopify's core cart mechanics (the product form and the /cart/add.js or /cart/add.json endpoints) are stable and shared by every theme, so an isolated failure almost always traces back to something layered on top: theme customizations, third-party app scripts, or a specific product/variant's configuration — not a bug in Shopify itself.
Themes built on Online Store 2.0 assemble a page from many independently-rendered sections, blocks, and app embeds. If any one of those throws a JavaScript error while the page loads, browsers stop executing the rest of the script queue on that page, which can silently prevent the Add to Cart button's click listener from ever being attached — even though the button still looks normal.
Apps that add their own 'buy box', upsell widget, quick-view modal, or cart drawer sometimes render a second product form on the same page, intercept the submit event to run their own logic first, or load a script that assumes it's the only form on the page. When two forms share the same field names or ids, the browser can submit the wrong one, which either fails silently or adds an unintended variant.
5 ways to fix it
Open the page in an incognito window with only default apps active
Duplicate the storefront theme (or use a preview/incognito session) and disable third-party apps one at a time — especially cart drawers, upsell/bundle apps, currency converters, and page builders — until the Add to Cart button works again. This isolates whether an app's injected script is throwing a JavaScript error or hijacking the form submit event. Once you find the culprit, you can either reconfigure it, ask the app's support team for a fix, or remove it if it's not essential.
Check the browser console for JavaScript errors on that specific product page
Open Chrome/Firefox DevTools (F12), go to the Console tab, and reload the product page before clicking Add to Cart. A single uncaught JS error anywhere on the page (often from an app's script tag or a theme app embed) can stop all other scripts, including the one that binds the click handler to the product form's submit button. Note the file and line number in the error and cross-reference it against your theme's custom code or an app's embed block in Theme Editor > App embeds.
Look for a duplicate or malformed product form on that template
If the product uses a different template, section group, or has extra blocks (e.g., a second buy-box, a quick-view snippet, or an app block rendering its own {% form 'product' %}), you can end up with two forms with the same id or name="id" input on the page. Browsers will submit the first matching form, which may not have a valid variant ID selected, so the request silently fails or adds the wrong variant. Compare the product's template/section settings against a working product and remove or rename any duplicate form markup.
Verify the variant is actually available and priced (not sold out or missing a price)
A greyed-out or non-functional Add to Cart button is also commonly caused by the selected variant being out of stock with 'Continue selling when out of stock' disabled, or a variant missing a price. Check Products > [product] > Variants in Shopify Admin for that specific product and confirm inventory and pricing are set correctly for every variant combination customers can select.
Roll back recent theme code changes to product-form.js or the product template
If this started after a theme customization (yours or a developer's), use Online Store > Themes > Actions > Edit code, check the version history/backup of assets/product-form.js (or equivalent) and the product section, and compare against the last known-working version. A common cause is a custom script that re-queries the DOM before the form has rendered, or a modified event listener that calls preventDefault() without resubmitting the fetch/cart request.
Bottom line
Add-to-cart failures on a single storefront are almost always caused by something specific to that store's setup — a JS error thrown by an app embed, a duplicate product form on a non-standard template, or an out-of-stock/missing-price variant — rather than a platform-wide Shopify bug, so the fix is systematic isolation (console errors, app-by-app disabling, template comparison) rather than guesswork. Start with the free checks above; if the root cause turns out to be a genuine script conflict between multiple apps that neither vendor will resolve, a targeted theme code review or a lightweight cart/app-conflict audit tool is the next practical step rather than uninstalling working apps.
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.