Why does my Shopify store feel slower every month, and is it wrecking my SEO?
Leftover app scripts and oversized images can quietly tank your site speed and search rankings. Here's how to find the junk and clean it up using Shopify's own tools before reaching for anything else.
What's going on
You didn't imagine it: your store feels sluggish, and it's not just you. Maybe a customer complained, or Google Search Console started flagging Core Web Vitals issues, or your Lighthouse score is sitting in the red. The trouble is figuring out why, because the cause is rarely one obvious thing. It's usually an accumulation: a script tag from an app you uninstalled months ago that never got removed, a hero image uploaded at full camera resolution instead of resized for the web, or a theme section left over from a redesign that nobody deleted.
This tends to show up gradually rather than all at once, which is exactly why it's easy to miss. Each individual app or image addition seems harmless on its own; it's the pile-up over months or years of running a store that turns into a measurably slower site. And it matters for more than user annoyance: page speed and Core Web Vitals are among the signals Google considers for ranking, so a bloated theme can quietly cost you both conversions and search visibility at the same time.
The good news is that diagnosing this doesn't require guesswork. Shopify gives you a performance report tied to your live theme, and the fixes for the two biggest culprits, leftover app code and oversized images, are both things you can do yourself, for free, without needing to touch custom code in most cases.
Why it happens
The root cause is usually accumulation, not a single bad decision. Every app you install to test a feature, every customization made by a past employee or agency, and every product photo uploaded without resizing adds a small amount of weight. None of it feels significant at the time, but a store that's been live for a few years and cycled through a dozen apps can easily be carrying scripts, stylesheets, and snippets that no longer serve any purpose, because uninstalling an app removes it from your admin but doesn't always remove code it previously wrote into your theme.
Images compound the problem because the failure mode is invisible in the admin: a photo that looks fine in your product gallery can be many times larger in file size than it needs to be if it was uploaded straight from a camera or a supplier's marketing file without resizing first. Shopify can serve a resized, modern-format version of an image on request, but only if your theme's templates are actually asking for a properly sized variant instead of the full original.
There's also a structural reason this is more common on older or agency-built themes: older themes and apps often injected code directly into theme files rather than using the more contained embed system that current Shopify themes support, which makes cleanup after uninstalling an app far less automatic.
5 ways to fix it
Check your theme's speed report first, before touching any code
In your Shopify admin, look for the performance report tied to your live theme, found in the Online Store section. It gives you a score and flags what's actually slowing pages down, whether that's excess JavaScript, oversized images, or a single bloated asset like a hero video or a render-blocking font. Fixing based on a hunch wastes time; fixing based on the report targets the real bottleneck.
Audit your theme code for orphaned app scripts
Use the theme code editor to search your main layout file and any header or footer snippets for script tags, links, or blocks referencing apps you no longer use. Many apps, especially older ones, historically injected code directly into the theme and didn't fully clean up after uninstall. If you don't recognize a snippet's origin, test removing it on a duplicate theme first rather than deleting it outright on your live theme, and consider using Shopify CLI's theme linting tools to flag obviously dead code.
Re-audit installed apps and remove ones you don't actively use
In your admin's apps settings, review every installed app, not just the ones you remember adding. Newer apps typically use a contained embed system that you can toggle on or off from the theme editor, which makes them easier to fully disable without leftover code. For older apps, uninstalling is necessary but not always sufficient. Go back and check your theme code afterward for anything that didn't get removed automatically.
Let Shopify's image handling do the heavy lifting, and size images correctly at upload
Shopify can automatically serve resized, modern-format versions of your images when your theme requests them at appropriate dimensions. The most common mistake is uploading source images far larger than they'll ever display at, for example a photo thousands of pixels wide shown in a small product card. Resize originals before upload so the theme isn't compensating for oversized source files, and spot-check that your product and collection pages are loading reasonably sized images rather than full originals.
For recurring, store-wide bloat, consider a one-time performance audit
If your speed report keeps flagging the same issues release after release, or you're not confident reading the results yourself, a one-time audit, either a paid app that scans your theme and app footprint, or a developer doing a manual pass, can be more efficient than guessing. This is worth paying for mainly when a store has a long app history or an inherited theme that nobody currently on staff fully understands.
Bottom line
Most of this is fixable for free with Shopify's built-in speed report, the app embed toggles in the theme editor, and correct image sizing at upload. The fixes are mechanical, not mysterious, once you know where to look. Paying for help makes sense when bloat has accumulated over years of app churn on a store nobody currently understands the theme code for; in that case a one-time performance audit, whether from an app or a developer, usually pays for itself faster than trial-and-error debugging.
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.