Most guides on how to optimize Shopify speed start with the same list: compress images, remove apps, use a fast theme. That advice is not wrong. But it doesn’t tell you which fix matters for your store, why your store got slow in the first place, or how to stop it getting slow again.
So we started somewhere else: with data. We measured the mobile homepage of 26 Shopify stores we work with, and we looked closely at one Ayurveda D2C brand where four targeted changes cut mobile Largest Contentful Paint (LCP) on the product page from 28.4 seconds to 6.4 seconds. No redesign, no “speed booster” app.
This guide covers what that data showed, what actually slows Shopify stores down in 2026, the fixes in the order we apply them, and the routine that keeps a store fast after the cleanup is done.
What we found across 26 Shopify stores
In June 2026 our team collected Core Web Vitals for the mobile homepage of 26 Shopify stores across jewelry, supplements, food, fashion and home categories. It’s a portfolio snapshot, not a scientific study, but five patterns stood out.
- Only 11 of the 26 stores had real-user data. Google only reports field data (from real Chrome visitors) when a store has enough traffic. The other 15 stores, with a median of about 1,400 sessions a month, only had lab data from a simulated slow phone.
- Lab numbers looked five times worse than reality. The median LCP for the low-traffic stores (lab data) was 13.0 seconds. For stores with real-user data it was 2.5 seconds. If your PageSpeed report shows a scary number and no “real users” section, don’t panic; use it to find problems, not to judge your store.
- Only 4 of 11 stores passed all three Core Web Vitals. Five failed LCP, five failed INP (responsiveness), and two failed CLS (layout shift). INP is now as much of a problem as loading speed.
- The 0–100 speed score barely tracked real speed. The store with the fastest real LCP (1.5s) had a score of 33. A store with a score of 21 loaded in 2.6s, about as fast as one scoring 76. Across stores with real-user data, score and LCP showed almost no relationship.
- App count tracked responsiveness more closely than anything else. Stores that passed INP had a median of 15 installed apps. Stores that failed had a median of 28.
One more honest finding: speed alone didn’t explain why one store converted better than another. Category, price point and traffic mix matter more in a cross-store comparison. Where speed shows its value is within a store, before and after a fix, which is exactly how you should measure your own work.
Stop chasing a 90+ score
The score at the top of a PageSpeed report is a weighted summary of lab tests. It changes from run to run, and as our data shows, it can disagree with what real customers experience. Google ranks pages, and customers judge them, on three Core Web Vitals measured from real visits:
| Metric | What it measures | “Good” target |
|---|---|---|
| LCP (Largest Contentful Paint) | How long until the main content, usually the hero or product image, appears | 2.5 seconds or less |
| INP (Interaction to Next Paint) | How quickly the page responds when a shopper taps a variant, button or menu | 200 milliseconds or less |
| CLS (Cumulative Layout Shift) | How much the layout jumps around while loading | 0.1 or less |
Check them in two places: the “real users” section of PageSpeed Insights, and the Web performance report in your Shopify admin. Use lab tests to diagnose, run them three to five times and take the middle result, and always test on mobile, where most of your traffic and most of the slowness is.
What Shopify already handles (so you can ignore those warnings)
Generic speed scanners flag things that don’t apply to Shopify. Shopify already serves your store through a global CDN, handles caching and compression, minifies theme files, and converts images loaded through its image filters to modern formats like WebP. Shopify’s own guidance says server, CDN and compression recommendations from third-party tools generally don’t apply.
That leaves the things you control: your theme, your apps, your images, your scripts and your tags. When you optimize Shopify speed, that’s where every real gain comes from, and it’s where every fix in this guide lives.
Why Shopify stores get slow: the four performance taxes
Stores rarely launch slow. They get slow one change at a time. Every app, banner, tracking tag and section you add carries a cost, and we group those costs into four “taxes”:
- Render-blocking tax. Scripts and stylesheets in the page head that must load before anything appears. Installing one app often costs more than any code your developer writes.
- Main-thread tax. JavaScript has to be downloaded, parsed and run. On a mid-range Android phone, heavy scripts make taps feel sluggish, which is what fails INP.
- Layout-shift tax. Images without set dimensions, late-loading promo bars, cookie banners and font swaps push content around and hurt CLS.
- Request tax. Every extra file is another connection and another chance to block something more important.
Thinking in taxes changes the question from “does this new feature work?” to “what does it cost, and can the store afford it?”
Diagnose before you fix: follow the LCP chain
LCP is usually the hero image on your homepage or the main image on a product page. Slow LCP is rarely just about file size. It’s about the chain of steps the browser goes through before that image appears. PageSpeed Insights breaks LCP into four phases, and each one points to a different fix:
| If this phase is slow… | It usually means… | Fix it by… |
|---|---|---|
| Time to first byte | Heavy theme rendering or too many sections and apps on the page | Trimming sections, removing unused apps, simplifying Liquid loops |
| Load delay | The browser finds the image late (lazy-loaded, injected by a slider, or set as a CSS background) | Loading the image eagerly with high priority, or preloading it |
| Load time | The image file is too big for the screen it’s shown on | Serving the right size with a responsive srcset and a modern format |
| Render delay | The image has arrived but scripts or styles are blocking it from painting | Deferring non-critical JavaScript and app scripts |
Read the phase, then attack that phase. It saves hours of trying fixes that can’t help.
How to optimize Shopify speed: the fixes in the order we apply them
1. Load the hero image first, never lazily
Many themes add loading="lazy" to every image. On your hero or main product image, that tells the browser to wait, which is the opposite of what you want. The image above the fold should load eagerly, with high priority and fixed dimensions. Shopify’s image_tag filter makes this simple:
{{ section.settings.image
| image_url: width: 1500
| image_tag: loading: 'eager', fetchpriority: 'high', preload: true,
sizes: '100vw', widths: '600, 900, 1200, 1500' }}
The filter adds width and height automatically, which also prevents layout shift. Keep preload and fetchpriority="high" for that one image only. Prioritizing several images means none of them is a priority.
Where this goes wrong: many themes and page builders render the hero through their own code, so the setting has to be changed in the right template, and slideshows need special handling for the first slide.
2. Lazy-load everything below the fold
Once the hero is prioritized, lazy-load the rest: product grids further down, Instagram feeds, review photos and footer images. The browser’s built-in lazy loading is usually enough; a separate lazy-loading app adds the very script weight you’re trying to remove.
3. Defer sliders and other non-critical scripts
Carousel libraries are one of the most common hidden blockers on Shopify product pages. Scripts that aren’t needed for the first paint should wait until the page is drawn, instead of holding up everything above them.
Where this goes wrong: scripts often depend on each other. Defer the wrong one and your product gallery, variant picker or add-to-cart button can silently stop working, sometimes only on certain devices.
4. Remove duplicate and leftover app code
This is the fix almost nobody talks about, and it was one of the biggest wins in our case study. Two problems are common:
- Duplicate widgets. An app is installed through a theme app embed and through an older manual snippet, so it loads twice. Reviews, wishlists and chat widgets are common culprits.
- Leftover code. Uninstalling an app doesn’t always remove code it added to your theme. Older apps often leave snippets behind that keep loading scripts long after you stopped paying for them.
Where this goes wrong: leftover code is sometimes shared with other features or apps, so deleting the wrong snippet can break something unrelated. This needs a careful review on a duplicate theme, not a quick delete.
5. Clean up tracking tags and pixels
Stores pick up tags over time: old ad pixels, abandoned heatmap tools, duplicated analytics. Each one costs main-thread time on every page view, and duplicated pixels also inflate your reported conversions.
Where this goes wrong: a tag clean-up is one of the easiest ways to quietly break GA4 or Meta conversion tracking, and you may not notice until your ad performance looks wrong a week later. Every event needs to be verified afterwards.
6. Stop the layout from jumping
For CLS, give every image and embed dimensions or an aspect ratio, reserve space for announcement bars and app banners instead of letting them push content down, and limit custom fonts to the weights you actually use.
DIY or get help?
- Usually safe to try yourself: resizing and compressing images, lazy-loading below-the-fold content, removing apps you no longer use, and reserving space for banners.
- Best done by a Shopify developer: deferring scripts, removing duplicate or leftover app code, tag and pixel clean-ups, and theme-level changes. These need testing across devices, checkout and tracking, on a duplicate theme, before anything goes live.
INP: the metric most Shopify stores struggle with in 2026
INP replaced First Input Delay as a Core Web Vital in 2024, and it’s harder to pass because it measures every tap, not just the first. When a shopper taps a size, opens the cart or changes a variant, and the page takes a moment to react, that’s INP.
The cause is almost always too much JavaScript, which matches our finding that app count tracked INP more closely than anything else. To find the worst offenders, open Chrome DevTools, go to the Performance panel, interact with your product page, and look at which scripts produce long tasks. Then ask the same question for each one: is this app earning its cost? Removing one or two heavy apps usually does more for INP than any amount of code tuning.
Case study: how an Ayurveda D2C brand cut mobile LCP by 77%
An Ayurveda D2C brand asked us to optimize the new design of its product page before launch. The page looked great but loaded slowly, especially on mobile. Here’s what four changes did:
| Metric | Before | After | Change |
|---|---|---|---|
| Mobile LCP | 28.4s | 6.4s | −77% |
| Mobile Total Blocking Time | 590ms | 250ms | −58% |
| Mobile CLS | 0.043 | 0.018 | −58% |
| Desktop LCP | 4.5s | 1.3s | −71% |
| Performance score (mobile / desktop) | 42 / 37 | 55 / 57 | +31% / +54% |
The four changes:
- Re-encoded product imagery to WebP, cutting file sizes on the heaviest images.
- Deferred the Swiper.js slider, so the carousel stopped blocking the first paint.
- Set eager loading on above-the-fold images and lazy loading on the rest, so the browser fetched what shoppers see first.
- Removed a duplicate reviews widget that was loading twice and doubling its script work.
Two honest notes. These are lab measurements on the new design’s preview, which vary slightly between runs. And a 6.4-second mobile LCP is still above Google’s 2.5-second target, so the work continues. But notice what moved: the score rose a modest 13 points while the thing customers actually wait for got four times faster. That’s why we optimize the metrics, not the score.
Not sure which of these is slowing your store? Every store has a different bottleneck. Our free Shopify audit pinpoints the one holding yours back, so you fix the right thing first.
Are Shopify “speed booster” apps worth it?
Usually not as a first step. Many booster apps preload pages when a shopper hovers over a link, which can make navigation feel faster, but they do it by adding their own JavaScript to every page. Some mainly change how a speed test sees your store rather than how customers experience it. Fix the causes first: the hero image, deferred scripts, duplicate and unused apps. If you then try a booster, measure INP and LCP before and after with real-user data, and keep it only if both improve.
How to keep your Shopify store fast
You don’t optimize Shopify speed once. Every new app, campaign banner and theme update can undo the work. The stores that stay fast follow a simple routine.
Set a performance budget. Agree on limits and check every change against them. Ours is a starting point:
- LCP 2.5s or less on mobile
- INP 200ms or less
- CLS 0.1 or less
- Total JavaScript under about 300 KB
Run every change through Baseline → Change → Verify.
- Baseline: before you install an app or ship a section, note the current LCP, INP and CLS of the page it affects.
- Change: make one change at a time, on a duplicate theme, so you know what caused any difference.
- Verify: re-test the same page on mobile, three to five runs, and compare. “Done” means it works and stays within budget.
Monthly checklist:
- Check real-user Core Web Vitals in PageSpeed Insights and your Shopify Web performance report
- Review apps installed in the last month: is each one earning its cost?
- Look for duplicate or leftover scripts in the Network tab
- Confirm the hero and main product images still load eagerly at the right size
- Check that tracking still fires once, and only once
Frequently asked questions
Why is my Shopify store so slow?
The most common causes are too many apps (and leftover code from uninstalled ones), a large hero image that loads late, slider and third-party scripts that block the page, and tracking tags piling up over time. Shopify’s servers are rarely the problem.
Is the Shopify speed score accurate?
It’s a useful direction indicator, but it’s based on lab tests and can disagree with what real shoppers experience. In our 26-store snapshot, the score showed almost no relationship with real-user LCP. Focus on LCP, INP and CLS from real-user data instead.
Does Shopify speed affect conversions?
Yes, though the effect is easiest to see within one store rather than across stores. In Deloitte and Google’s “Milliseconds Make Millions” study, a 0.1-second improvement in mobile speed was associated with an 8.4% increase in retail conversions. The reliable way to see it in your own store is to compare add-to-cart and conversion rates before and after a speed fix, over equal periods.
How long does Shopify speed optimization take?
Most projects take 1–2 weeks, depending on your apps and theme. Real-user data in PageSpeed Insights is a 28-day rolling average, though, so allow about a month for the improvement to show fully in your Core Web Vitals.
Can I optimize Shopify speed without removing apps?
Partly. Fixing the hero image, deferring scripts and removing duplicate code all help without touching your app list. But if INP is failing, app JavaScript is usually the cause, and removing or replacing one or two heavy apps is often the most effective fix.
Want a second pair of eyes on your store’s speed?
Every store is slow for its own reasons, so the best way to optimize Shopify speed is to start with a proper diagnosis. Hopiant’s team diagnoses the actual bottleneck first, makes changes on a duplicate theme, and shows you before-and-after results on the metrics that matter, without promising a vanity score.
Start with our free Shopify audit, or see how our Shopify speed optimization service works.
