Why your store is still slow after ‘optimising’ it
Compressed every image and your store still feels slow? What actually slows a Shopify store, the code old apps leave behind, and how to measure real speed.
- Published
- Reading time
- 8 min read
- Written by
- Shalom

You compressed every image. You maybe installed a speed app too. Your score barely moved, and the store still feels slow on your phone.
That's a common place to end up, because a lot of speed advice goes after the wrong things. Image file sizes matter, but they're often not what makes a store feel slow. Shoppers usually wait on three other things: scripts that load on every page, the first big image they see, and anything that pops up and moves the page around.
So the short answer: stop chasing the test score, find what's loading on your pages, clear out what old apps left behind, and judge every fix by how fast the store is for real visitors. Here's how, in that order.
What actually slows a store
Google measures how a page feels to a shopper with three numbers, called Core Web Vitals. Shopify uses the same three in its own speed reports:
- Loading (LCP): how long the biggest thing in the first screen takes to appear.
- Responsiveness (INP): how quickly the page reacts when someone taps or clicks.
- Visual stability (CLS): how much the page jumps around while it loads.
Compressing photos further down the page barely moves these. The three things below do.
Third-party scripts
Every app that shows something on your storefront, every tracking pixel, chat widget and tag in a tag manager, adds code that the shopper's phone has to download and run. JavaScript runs on the browser's main thread, the same one that responds to taps. Google's web.dev guide calls any task that takes longer than 50 milliseconds a long task, and those are what make a page feel stuck when someone taps "Add to cart".
Shopify's own help page on store speed says it directly: too many apps loading assets on your storefront can slow performance. It recommends reviewing your apps and removing any that aren't essential, and auditing your tag manager for unused or low-value tags. Our guide to Shopify app costs walks through that audit app by app.
To see what's actually loading:
- Open your store in Chrome on a computer, right-click and choose Inspect, then open the Network tab.
- Reload the page and filter by JS.
- Look at the domains. Anything that isn't your store or Shopify is a third party. Write down which app or service each one belongs to.
- For each one, ask: do we still use this, and does it need to load on every page?
A review widget only needs to run on product pages. A chat tool you stopped answering last year doesn't need to run at all.
The hero image
On many store home pages, the biggest thing in the first screen is the hero image or slideshow. That makes it the element your loading score (LCP) is measured on. If it's slow, the whole page is rated slow, however small your other images are.
What to check:
- One image, not a slideshow or video. Shopify lists carousels among the theme features that can affect performance. A single, well-chosen image is lighter and easier for the browser to load first.
- Sized for where it's shown. Shopify's advice is to resize images to match their display size and use JPG for photos.
- Never lazy-loaded. Lazy loading tells the browser to wait before fetching an image. Google's guidance is blunt: never lazy-load the image that's your LCP element. Most current themes handle this for you, but a customised or older theme may not. If you're not sure, ask whoever built the theme to check that the first image doesn't use
loading="lazy".
Popups and bars that push the page around
Email popups, announcement bars, cookie banners and "someone in Ohio just bought this" notifications usually come from apps. Each one adds its own script, and many of them appear a moment after the page loads.
When something appears at the top of the page and pushes everything down, that's a layout shift, and it counts against your visual stability score (CLS). Google's guide on layout shifts names content that pops in at the top or bottom of the screen as a cause, and suggests two fixes: reserve the space in advance, or show it as an overlay so it doesn't push the page.
In practice:
- Keep one popup, not three. Check your popup app, email app and theme settings, because it's common for two of them to show a signup form.
- If your announcement bar comes from an app, see whether your theme has its own. Theme sections are part of the page from the start, so they don't push it down.
- If a popup stays, set it to appear after a delay or on scroll, as an overlay.
Code left behind by apps you uninstalled
This is the part most speed advice misses. Uninstalling an app stops the bill. It doesn't always remove the app's code.
Shopify's help page on uninstalling apps says some apps add code to your theme that isn't automatically removed when you uninstall. Its store speed page repeats it: uninstalling an app doesn't automatically remove its code from your theme. That leftover code can keep loading scripts on every page for a service you no longer use.
How it got there matters, because it changes where you look:
- App embeds and app blocks. Newer apps connect through theme app extensions. Shopify's developer docs say these don't edit your theme's code. They show up in the theme editor, where you can switch them off.
- Code pasted into the theme. Older apps, and some setup guides, add code straight into your theme files. That's where leftovers hide.
How to find and remove it
- Check app embeds first. Go to Online Store and click Edit theme. In the sidebar, click the App embeds icon. Switch off anything from an app you no longer use, then save.
- Ask before you uninstall. For apps you're about to remove, go to Settings → Apps, choose the app and use Get support to ask the developer how to remove its code. Shopify suggests checking with the developer before you uninstall.
- Work on a copy. Duplicate your live theme from the theme's menu in Online Store before touching any code.
- Search the code. On the copy, open Edit code and search for the old app's name. Start with
theme.liquid, then look through snippets and sections. - Remove only what you're sure of. If a snippet clearly belongs to an app you've uninstalled, remove it and the line that includes it, then preview the copy on your phone. If you're unsure, leave it and ask a developer.
- Check your tag manager. If you use one, remove tags for tools you've stopped using.
Publish the copy only once it looks and works the same as your live theme.
Real-user speed versus the test score
This is why "optimising" so often feels pointless. The number most owners chase isn't the number that measures their shoppers.
What the test score measures
When you run your store through PageSpeed Insights, the big Performance score comes from a lab test. Google's documentation says the mobile test simulates a mid-range phone on a mobile network, loading your page once. The score changes from run to run, because network and hardware conditions vary. A lab test is useful for finding problems. It isn't how your customers experienced the store.
The same report also shows real-user data, collected from Chrome users over the previous 28 days, where your store has enough visitors. That's the part that decides whether you pass the Core Web Vitals assessment, at the top of the report. You pass when the 75th percentile of visits is rated good on all three numbers.
Where Shopify shows your real speed
Shopify measures this for you, from real visits to your store:
- Go to Online Store. The Themes page shows a summary of loading, responsiveness and visual stability, based on real user data from the past 30 days.
- For the full reports, go to Analytics → Reports and search for "contentful" (loading), "next" (responsiveness) or "cumulative" (visual stability).
- Filter by device type and look at mobile first.
Each number is rated good, moderate or poor. The good lines are the same as Google's:
- Loading (LCP): 2.5 seconds or less
- Responsiveness (INP): 200 milliseconds or less
- Visual stability (CLS): 0.1 or less
Two things to know. Your store needs to be out of password-protected mode for the reports to fill up. And data can lag by up to 36 hours.
Watch out for fake speed fixes
If a speed app pushed your test score up and nothing else changed, be suspicious. Shopify's performance team looked at apps and extensions that promised one-click optimisation and found that almost 15% of them were gaming the test tools. Some spotted when a testing tool was loading the page and served it a stripped-down version, while real shoppers still got the slow one.
Shopify's advice is to trust real-user data over test scores. If your real-user numbers are worse than the test results, something may be faking the test.
How to judge a fix
- Write down your mobile numbers from the web performance reports before you change anything.
- Make one change at a time, such as removing an app or replacing the slideshow.
- Check the over-time reports. Shopify marks events like app installs and theme changes as numbered lines on the graph, so you can see what happened after each one.
- Give it a couple of weeks of real visits before you decide it worked.
Speed is one of six checks in our store review checklist. It's worth fixing, but it's rarely the only reason a store isn't selling. If your pages are fast and orders still aren't coming, work through traffic but no sales next.
What to do next
- Open Online Store, check the web performance summary on mobile, and note which of the three numbers is moderate or poor.
- List every third-party script on your home and product pages, and remove the ones you don't use.
- Replace a slideshow or video hero with one correctly sized image, and make sure it isn't lazy-loaded.
- Turn off app embeds for old apps, then search a copy of your theme for leftover app code.
- Judge every change by the real-user reports, not the test score.
If you've done all that and the store is still slow, send us your store link and we'll tell you the first thing we'd fix.