If your Shopify store has got slower over the last year and you can't work out why, this guide is the diagnostic. It walks through how to find exactly which apps, scripts and leftover theme code are weighing your storefront down, using tools you already have.
For the wider strategy — why stores slow down, what it costs in revenue, and what a performance-first build looks like — read our Shopify performance optimisation guide. This article is the hands-on version: how to actually find the culprit in your own store.
The short version: a store can look perfectly fine on the surface while loading hundreds of kilobytes of unnecessary code behind the scenes. Most owners are surprised by what turns up.
What is Shopify app bloat?
Shopify app bloat happens when third-party apps add extra code to your storefront, even when that code isn't needed on the page being viewed.
It shows up as JavaScript files, CSS files, tracking pixels, app embeds, theme snippets, and — most persistently — leftover code from apps you've already uninstalled.
One app rarely causes a serious problem. Five, ten or twenty create a stack of scripts that slows product pages, collection pages and the homepage simultaneously. The result is a store that looks fine visually but does far more work than it needs to on every page load.
Why Shopify stores get slower after installing apps
Most Shopify apps need to load code on the storefront to work. That's normal and expected. The issue is that many load scripts across the entire site even when the feature is only used on one template.
In practice that looks like:
- A review app loading on pages that have no reviews
- A chat widget loading before the customer has interacted with anything
- A pop-up tool loading on every page, even when no campaign is running
- A subscription app loading scripts on products that aren't subscription-based
- A page builder loading generic code for sections that aren't used on that template
Every one of those increases page weight, delays rendering and makes the browser do more work before the customer can interact with anything.
Mobile is where this hurts. Slower networks and less powerful devices make script bloat far more noticeable. A page that loads acceptably on desktop can feel broken on a mid-range Android phone on 4G — and that's the majority of Shopify traffic.
The hidden problem: apps leave code behind after uninstalling
This is the one most store owners don't know about. Uninstalling a Shopify app does not always remove every trace of it from your theme.
Apps commonly leave behind:
- Snippets in the theme's snippets folder
- Script tags in
theme.liquid - App blocks or embeds still referenced in section files
- CSS references and stylesheet links
- Tracking pixels
- Legacy JavaScript files in assets
- Unused metafield definitions
- Duplicate schema markup competing with your theme's own
Your Shopify admin can look completely clean, with zero installed apps in a category, while your theme still loads code from tools you stopped using months ago.
This is one of the most common causes of long-term Shopify performance decline. A store gets slower over months or years simply because nobody cleaned up what older apps left behind. It's also the most satisfying thing to fix, because you're removing pure dead weight with no functional trade-off at all.
Which app categories carry the most weight
Not all apps cost the same. Some load a small tracking call; others render entire interactive interfaces on your product page. Before you audit, it helps to know which categories usually deserve the closest look.
| App category | What it typically loads | Does it need to be sitewide? |
|---|---|---|
| Page builders | Generic layout JS and CSS covering every possible section type | No — only on builder-made pages |
| Review widgets | Rendering scripts, star assets, sometimes its own font | No — product and collection pages only |
| Live chat | A persistent widget plus its own connection handling | No — can load on interaction |
| Pop-ups and email capture | Trigger logic running on every page view | No — campaign pages, or deferred |
| Loyalty and rewards | Account state checks and widget rendering | No — logged-in customers only |
| Product options and variants | Interactive UI on the product page | No — product templates only |
| Filtering and search | Query handling, often re-rendering the whole grid | No — collection and search pages |
| Subscriptions | Selling plan logic and widget rendering | No — subscription products only |
| Analytics and pixels | Small tracking calls, but they multiply fast | Usually yes, but check for duplicates |
The pattern is obvious once you see it laid out: almost nothing genuinely needs to load everywhere. Analytics is the main exception, and even then, most stores are running the same pixel twice through two different tools.
How to diagnose app bloat in your own store
You don't need specialist software for this. Chrome's built-in developer tools will surface most of the problem in about twenty minutes.
Step 1: Measure your JavaScript payload
Open your store in Chrome and press F12 to open DevTools. Go to the Network tab, tick Disable cache, filter by JS, then reload the page.
Look at the transferred total at the bottom of the panel. For a well-optimised Shopify store, total JavaScript should sit under 400KB. If you're seeing 800KB or more, app bloat is almost certainly a significant part of the problem.
Now sort by size, largest first. The Initiator column tells you what requested each file, and the Domain column tells you who it belongs to. Any domain that isn't Shopify's CDN or your own is a third party worth questioning.
Step 2: Find out how much of it goes unused
This is the step that turns a vague suspicion into an argument. In DevTools, open the three-dot menu, choose More tools, then Coverage. Click the reload icon inside the Coverage panel.
You'll get a list of every JS and CSS file with a red-and-green bar showing how much of it actually executed. On a bloated Shopify store it's common for the majority of loaded JavaScript to go unused on any given page — code downloaded, parsed and then never run.
Sort by unused bytes. The files at the top are your priority list, and they're usually app scripts loading on templates where the feature doesn't exist.
Step 3: Identify what's blocking the render
Still in the Network tab, look at the waterfall on the right. Anything loading before your hero image finishes is competing with the content your customer actually came to see.
Run Lighthouse in the same DevTools panel and check two audits specifically: Eliminate render-blocking resources and Reduce unused JavaScript. Both name the offending files directly, which saves you guessing.
Step 4: Test key templates separately
Don't only test the homepage. Shopify stores perform very differently by template because apps load unevenly across the site. Run steps 1 to 3 on:
- Homepage
- A product page
- Your highest-traffic collection page
- Cart
- Any paid-traffic landing pages
A product page that takes five seconds to become interactive will cost you sales regardless of how fast the homepage looks. It's also the page most likely to be carrying review, upsell, options and subscription scripts all at once.
Step 5: Audit your app embeds
In your Shopify admin, go to Online Store, then Themes, then Customise, and open the App embeds panel. This shows every app currently injecting code through the theme editor.
For each one, ask: is the feature still being used, does it need to load on every page, and is there a lighter way to achieve the same result? Toggling an embed off is non-destructive and instantly testable — turn it off, reload, re-run step 1, and see what changes.
Step 6: Inspect your theme files for leftovers
This is where the uninstalled-app problem surfaces. Go to Online Store, then Themes, then Edit code. Duplicate your theme first so you have a rollback.
Work through these in order:
theme.liquid— scan the<head>and the area just before the closing</body>tag for script tags pointing at third-party domains. Apps usually leave a comment naming themselves, which makes them easy to spot.- The snippets folder — look for files named after apps. Cross-reference against your installed apps list; anything that doesn't match a live app is a candidate for removal.
- The assets folder — orphaned JS and CSS files from old installs often sit here untouched for years.
- Section and template files — check product, collection and cart templates for app blocks and render calls referencing snippets that no longer belong to anything.
Before deleting anything, use the code editor's search to confirm nothing else references it. Then remove one item at a time and check the storefront between each change. Slow and reversible beats fast and broken.
How to remove app bloat without breaking your store
The goal isn't to remove every app. It's to remove unnecessary code while keeping the features that genuinely drive results. Go in with that mindset and you'll make better calls.
Remove unused apps first
Start with apps that are no longer active, duplicated by another tool, or delivering no measurable value. Before removing anything, check whether it touches product pages or checkout, tracking and analytics, reviews, subscriptions or recurring billing, email capture, or customer accounts. If the answer is no across the board, it's a strong candidate.
Clean up what they leave behind
After uninstalling, go back into the theme and manually remove the leftovers using step 6 above. This is where most stores lose their gains — removing the app from your admin is not the finish line, and the performance benefit often doesn't arrive until the theme is cleaned too.
Replace simple apps with native theme functionality
A surprising number of app features can be rebuilt directly in the theme with no third-party dependency: tabs and product accordions, size guides, announcement bars, trust badges, basic upsell blocks, delivery messaging and promotional sections.
Native functionality is faster, cleaner and easier to maintain. Built into the theme properly, there's no external script to load and no monthly subscription to pay. This is also the core argument for custom Shopify theme development over an app-heavy setup.
Defer non-critical scripts
Some scripts don't need to load the moment the page opens. Review widgets, chat tools, pop-ups and loyalty tools can usually be deferred or loaded only when the customer needs them. You keep the functionality and lose the initial load cost.
Load scripts only where they're needed
If an app only does something on product pages, it shouldn't load on the homepage, blog or every collection page. Template-specific loading is one of the most straightforward optimisations available and one of the most commonly missed.
When clean-up isn't enough
Sometimes the theme itself has become the problem and no amount of script removal fixes it properly — usually when a page builder underpins most templates, app code is embedded across many files, or Core Web Vitals keep failing despite previous clean-ups.
If your store is failing LCP, INP or CLS specifically, the technical side is covered in our Shopify technical SEO guide. If you'd rather have the whole thing diagnosed and fixed properly, that's what our Shopify app bloat audit is built for.
Shopify app bloat checklist
Work through this in order if your store feels slower than it should:
- Measure total JavaScript payload in DevTools against the 400KB benchmark
- Check the Coverage tab for unused JavaScript and sort by unused bytes
- Run Lighthouse and read the render-blocking and unused-JS audits
- Test homepage, product page and collection page separately
- Audit all app embeds in the theme customiser
- Review installed apps and remove anything unused or duplicated
- Search
theme.liquidfor leftover script tags from old apps - Check the snippets and assets folders for orphaned app files
- Remove duplicate tracking scripts and pixels
- Defer non-critical scripts (reviews, chat, pop-ups, loyalty)
- Replace simple app features with native theme sections
- Re-measure and record the before-and-after
- Monitor Core Web Vitals monthly in Google Search Console
- Re-test after every major app install or campaign launch
Find out what's slowing your store down
If your Shopify store has got slower since you started adding apps, the first step is finding out what's actually loading on your storefront. The diagnostic above will get you most of the way there.
If you'd rather have someone else do it, Futur Media runs performance audits for UK ecommerce brands. We map every app, embed and third-party script across your key templates, check the theme for leftover code, and give you a prioritised fix list with the expected gain for each item — whether or not you build with us.
Get a free Shopify performance audit, or book a strategy call if you'd prefer to talk it through first.



%201.avif)

