Sale week looks the same in most Shopify shops I’ve talked to. Discount codes loaded. Email campaign written and scheduled. Promo banner up on the homepage. Maybe a few new product photos. Everyone’s focused on getting people to the store.
There’s one step that rarely makes the list: checking whether the store itself is ready for the traffic.
I don’t mean the obvious things — image compression, theme choice, the Shopify speed score in your admin. Most merchants tick those off at some point. I mean the layer underneath, the one that builds up quietly over months and only shows itself when the traffic arrives.
Every Shopify app you install does more than appear in your dashboard. It injects something into your theme. A CSS file for its widget. A JavaScript snippet for tracking. A Liquid block that renders an element on a product page. Sometimes all three. When the app is working, you see the feature, and the code earns its keep.
Then you uninstall the app. The dashboard tile disappears. The billing stops. You move on.
The code, in most cases, stays exactly where it was.
Shopify doesn’t have a clean uninstall hook that walks back through every theme edit an app has made. App developers vary wildly in how thoroughly they clean up — some don’t clean up at all, some leave a comment block, some try and miss the dynamic injections their app made on the fly. The result is that a Shopify theme that’s been live for two or three years often has orphaned code from a dozen apps that aren’t even installed anymore.
You don’t see this in normal conditions. On a quiet Tuesday afternoon, with twenty visitors browsing at their own pace, an extra CSS file and three unused JavaScript libraries don’t cause a problem. Pages load. Carts add. Checkouts complete.
Send an email to your list. Run a paid ad. Post in the right community. Suddenly the store isn’t getting twenty visitors an hour — it’s getting three hundred in twenty minutes. Every single one of them triggers every script on every page they touch. The orphaned files load. The unused libraries get parsed. The tracking pixels from three uninstalled apps phone home to servers that don’t care about you anymore.
Most of this is invisible to the merchant. What you see is a Shopify store that felt fast on the dev side but is sluggish on mobile under load. What customers see is a homepage that takes a second longer to paint, a product page that hangs while a script blocks rendering, a cart that doesn’t quite open when they tap.
A second of delay during a sale costs a different amount than a second of delay on a Tuesday. The merchants who notice this usually notice it after the fact — when the conversion data comes in and the spike traffic converted worse than the baseline traffic. The story is almost always the same: the store felt fine while we were testing it.
A lot of pre-sale speed advice points at the same handful of moves: compress your images, switch to a lightweight theme, remove unused fonts, lazy-load anything below the fold. These are real and worth doing. But they sit in a different layer to the one I’m talking about.
A switched theme imports a fresh slate, true — but only if you rebuild every customisation from scratch. Most merchants migrate their existing customisations across, which brings the orphaned code with them. Compressing images doesn’t touch JavaScript at all. Removing unused fonts addresses one specific thing. None of them ask the harder question: which of the scripts loading right now belongs to an app I still have installed?
That question is the one that’s hard to answer manually. You’d need to know which app every code block came from, then cross-reference that against your current app list. On a theme with two dozen modifications over three years, that’s a developer day at minimum, and most merchants don’t have one to spend the week of a sale.
We built ThemeSweep for this exact gap. It scans your Shopify theme and identifies code that traces back to apps, then cross-references against your current installed app list. Code from apps still installed and active is left alone — those are doing their job. Code from apps you’ve uninstalled gets flagged, with the snippet name, the line range, and what kind of resource it is.
The cross-reference step matters more than the scan itself. A lot of theme-cleanup tools flag anything that looks unused, which produces a list full of false positives — code that’s actually being used dynamically, code from active apps that the tool didn’t recognise, code from your own theme customisations. You then spend half a day verifying each item before you dare remove it.
ThemeSweep doesn’t make that mistake. The default behaviour is conservative: an item only shows up as removable if it traces to an app you’ve already uninstalled. Active apps get a free pass. Theme-native code gets a free pass. What you’re left with is a much shorter, much safer list — the actual dead code.
A first scan takes about a minute. The output is a list you can act on or hand to a developer with one instruction: remove these, leave the rest alone.
If you’re running a sale in the next few weeks, the order I’d suggest:
The cleanup step is the one that gets skipped most often because it’s the least obvious. It’s also the one that compounds across every other thing you’ve already done — a faster baseline makes every other optimisation more effective.
I ran a multi-site retail business for over two decades before building software full-time. I know what it feels like to spend weeks preparing for a big trading window and then watch something small undercut the whole thing. The version of this in physical retail was usually staffing or stock. The version of this in Shopify is usually code that nobody remembers installing.
The fix isn’t complicated. It just needs doing before, not after.
Run a free scan of your Shopify theme → themesweep.com — plans start at $4.99/month with a free trial.
Shopify removes the app from your admin and stops billing, but it doesn’t walk back through every theme edit the app made. App developers vary in how thoroughly they clean up — some don’t bother at all. CSS, JavaScript, and Liquid snippets stay in your theme until you remove them manually.
Yes. Orphaned scripts still fire on every page load. Render-blocking JavaScript from uninstalled apps delays page painting on mobile, and external tracking pixels from dead apps make network requests to servers that no longer serve anything useful. Removing them reduces what the browser has to fetch and parse before the page appears.
Two weeks is ideal. That gives you time to clean, retest, fix anything the retest surfaces, and do a final mobile check before the campaign goes live. Doing it the day before the sale leaves no buffer if something breaks during removal.
Not if you duplicate your live theme first. Go to Online Store → Themes, click the three-dot menu on your live theme, and choose Duplicate. That’s your rollback. If anything looks wrong after a removal, republish the duplicate and you’re back where you started within thirty seconds.
Related reading: 5 Signs of Dead App Code · Hidden Cost of Uninstalling · Remove Dead App Code (Manual Guide) · ThemeSweep.
We build focused software for businesses that off-the-shelf tools don't fit. Get a free, no-pitch review — if buying an app or doing nothing is the right call, we'll say so.