When a store suddenly breaks — the cart drawer won’t open, the variant picker freezes, checkout misbehaves — an app conflict is one of the most likely causes. The fix is not to guess. First, reproduce the bug reliably. Then isolate it on a duplicate theme: open the browser console to catch JavaScript errors, and disable app embeds and app blocks one at a time (or bisect them in halves), re-testing after each change. The moment the bug disappears, the last thing you turned off is your culprit. Only then do you decide whether to fix, replace or remove it — with the live store untouched the whole time.
Signs you have an app conflict
A conflict is when two apps (or an app and your theme) fight over the same part of the page and one of them loses. Tell-tale signs:
- The bug appeared right after installing or updating an app. Timing is the single strongest clue.
- JavaScript errors in the browser console —
undefined is not a function,Cannot read properties of null, or a script from one app’s domain throwing on every page. - Something interactive stopped working: the cart drawer, a quantity selector, a variant swatch, an “add to cart” button, a sticky bar.
- Double behavior — two cart drawers, two discount banners, an event firing twice in analytics.
- Checkout behaves differently from the cart, or a discount shows on the product page but not at checkout.
If the problem tracks with an app change and the console is throwing errors, you’re almost certainly looking at a conflict — not a random Shopify outage.
Why it matters (and why guessing is dangerous)
A broken cart or checkout is not a cosmetic bug — it’s lost sales for every session it’s live. Shoppers don’t email you; they leave. So there’s real urgency to fix it fast.
That urgency is exactly what makes people careless. The two worst reactions are editing the live theme while customers are shopping, and uninstalling apps at random hoping one of them was the problem. Both can make things worse: a half-finished edit ships to real traffic, and an uninstalled app can leave leftover code behind in your theme that keeps causing the bug even after the app is “gone.” Isolation is slower for the first ten minutes and far faster overall, because it tells you which app is responsible instead of leaving you to keep guessing.
The safe isolation procedure
Work on a duplicate of your live theme so nothing you do touches shoppers. In the theme editor, disabling an app embed or app block on the duplicate doesn’t affect the published store.
- Duplicate the live theme. Online Store → Themes → Actions → Duplicate. Do all testing on the copy; never on the published theme.
- Reproduce the bug reliably first. Find the exact steps that trigger it (which page, which action, mobile vs desktop). If you can’t reproduce it on demand, you can’t tell whether a change fixed it.
- Open the browser console and keep it open. Right-click → Inspect → Console. Note the exact errors and which script/domain they come from — that often names the culprit before you touch anything.
- Preview the duplicate and confirm the bug still reproduces there. This proves the duplicate is a fair test.
- Disable app embeds and app blocks one at a time. In the theme editor, open App embeds (bottom of the left panel) and the app blocks placed in sections. Turn one off, save, re-test the exact steps, and check the console. With many apps, bisect instead: disable half, test; if the bug clears, the culprit is in that half — halve again until one app remains.
- Re-test after every single change. Change one thing, test, record the result. Changing several at once destroys the signal.
- Identify the culprit. When the bug disappears, the last embed/block you disabled — or the app whose script stopped erroring — is your conflict. Re-enable it once to confirm the bug returns; that’s your proof.
- Decide: fix, replace, or remove. Now that you know which app, choose deliberately — don’t just delete and hope.
Common conflict zones
Some parts of the page attract conflicts because several apps all want to touch them:
- Cart drawers. A theme’s native drawer plus an upsell or free-gift app that also renders a drawer is the classic clash — two drawers, or one that won’t re-render after an app adds an item.
- Offer, discount and bundle apps. Two apps modifying the cart or both applying discounts can double-count or fight over the line items — and the price the shopper sees can end up different from checkout.
- Checkout. Checkout is locked down, but Functions, checkout UI extensions and post-purchase apps can still collide. Two discount Functions competing, or an extension that errors, breaks the most important step in the funnel.
- Analytics and tracking. Two apps injecting pixels, or an app plus your own GTM, can double-fire or block events — so numbers look wrong even when sales are fine.
- Variant and product-page scripts. Swatch apps, “sold out” logic and sticky add-to-cart bars all rewrite the same DOM; whichever runs last wins, and the other breaks.
How to fix it once you’ve found the app
- Update it. If the app is behind, a newer version may already fix the conflict.
- Reconfigure it. Many conflicts come from two apps doing the same job — e.g. two cart drawers. Turn one off, or switch the app to a mode that defers to the theme.
- Ask the app’s support. Give them the console error and the name of the other app; good developers ship a targeted fix or a settings workaround.
- Replace it. If it’s abandoned or the fix never comes, swap it for an app that plays nicely with your stack — and remove the old one cleanly, checking for leftover snippets.
- Get it patched in the theme. Sometimes the real fix is a small change in theme code so the two apps load in the right order or stop overwriting each other. That’s Shopify development work, and it’s usually an hour, not a rebuild.
If your store is simply carrying more apps than it needs, the durable fix is trimming the stack — fewer apps touching the same code means fewer conflicts to chase.
Common mistakes
- Editing the live theme. Always work on a duplicate. A mid-fix theme in front of real traffic is its own outage.
- Disabling everything at once. If the bug clears, you’ve learned nothing — you still don’t know which app. Change one thing at a time (or bisect methodically).
- Uninstalling instead of isolating. Uninstalling can leave code behind and destroys your evidence. Disable and test first; uninstall only once you’ve confirmed the culprit.
- Ignoring the console. The error text usually names the offending script. Skipping it means troubleshooting blind.
- Blaming the app when it’s the funnel. Not every “broken store” is a conflict — sometimes traffic converts poorly for other reasons. If the mechanics work but sales don’t, that’s a different diagnosis: add-to-cart clicks but no sales.
When to get a developer
Isolate it yourself when the bug is reproducible and toggling embeds narrows it down. Bring in a developer when the conflict lives in checkout, Functions or analytics (harder to test safely), when two apps you need both break each other, or when the fix requires theme code changes to control load order. A developer can also read the network and console properly and confirm the fix on a duplicate before it ever reaches shoppers.
At Profit Flow we isolate conflicts on a duplicate theme, tell you exactly which app is responsible, and fix it — patch, reconfigure or replace — without taking the store down. Start with a free profit audit.
An app breaking your store? Send us your store URL and what’s going wrong — we’ll isolate the conflict safely, tell you which app is responsible, and how to fix it without downtime. Get a free profit audit.