Why your Shopify store is slow (and the 4 fixes that actually work)
Most Shopify speed advice is fluff. Here are the 4 fixes that actually move Lighthouse scores — and the popular ones that don't.
Ashraful
Shopify Select Partner

Every Shopify merchant we talk to is convinced their store is slow. They're usually right — the average Shopify store on the bare Dawn theme scores around 60 on mobile Lighthouse, and that's before the bloat that arrives after a couple of years of installing apps.
The frustrating part: most of the speed advice on the internet is wrong. "Install a speed-booster app" is the most common one, and ironically that's one of the things that causes slow stores.
After auditing 100+ stores, the same four problems account for ~90% of slow Shopify performance. The good news: all four are fixable in a week, by a single developer, without a "speed optimization app."
1. Audit your apps — most are dragging you down
Open any Shopify store and view source. Count the unique third-party domains in the <head>. A typical merchant's store has 15–25.
Every third-party domain is a DNS lookup, a TLS handshake, and a render-blocking request before your hero image starts to load. Most "speed-booster" apps add another 1–3 of these.
The audit:
- List every installed app
- For each one, ask: what would actually break if I uninstalled it?
- The answer is "nothing visible" more often than you'd expect
We routinely uninstall 6–8 apps from a store and the merchant's reaction is, "I forgot I had that." A typical app cleanup recovers 15–30 Lighthouse points and saves $60–$200/mo in app fees.
Apps to look at first: pop-up apps, review apps with widgets you've removed, "trust badge" apps, currency converters that just rewrite text, and anything claiming to "optimize" your site.
2. Use modern image formats — and stop using image-optimizer apps
Shopify's CDN serves WebP automatically if you reference your images correctly. You don't need an app.
The wrong way (still on most stores):
<img src="{{ product.featured_image.src }}">
The right way:
<img
src="{{ product.featured_image | image_url: width: 800 }}"
srcset="{{ product.featured_image | image_url: width: 400 }} 400w,
{{ product.featured_image | image_url: width: 800 }} 800w,
{{ product.featured_image | image_url: width: 1600 }} 1600w"
sizes="(min-width: 1024px) 50vw, 100vw"
loading="lazy"
decoding="async"
width="800"
height="800"
alt="{{ product.featured_image.alt | escape }}">
That snippet does five things image apps charge $9/mo for: WebP via the CDN, responsive sizes, lazy loading, async decoding, and CLS prevention via explicit dimensions.
Drop it into your theme's product card / collection card / hero sections. Lighthouse will reward you immediately.
3. Audit your theme's JavaScript bundle
Most premium themes ship 200–400KB of JavaScript that 80% of your customers never trigger. Sliders, lookbook modals, animated counters, cart drawers, predictive search.
Open Chrome DevTools → Coverage tab. Hit "Start recording" and click around your store. The bytes in red are JavaScript that loaded but never executed.
The fix isn't to remove features — it's to defer them. Move non-critical scripts to defer or load on interaction:
<!-- Loads but doesn't block parsing -->
<script defer src="{{ 'lookbook.js' | asset_url }}"></script>
<!-- Better: load only when user clicks Quick View -->
<button data-quick-view onclick="loadQuickView()">Quick view</button>
<script>
function loadQuickView() {
if (window.quickViewLoaded) return;
const s = document.createElement("script");
s.src = "{{ 'quick-view.js' | asset_url }}";
document.head.appendChild(s);
window.quickViewLoaded = true;
}
</script>
The mobile customer who never clicks Quick View saves 40KB of JS download and 60ms of parse time.
4. Cache your CDN properly — and set width/height on every image
The single biggest CLS (Cumulative Layout Shift) bug on Shopify themes is missing image dimensions. Lighthouse penalizes CLS more than almost any other Web Vital.
Two rules:
- Every
<img>needs explicitwidthandheightattributes. Yes, even with responsive sizes. The aspect ratio prevents jumpy layouts as images load. - Use
loading="lazy"everywhere below the fold. Hero images stayloading="eager". Everything else islazy.
For CDN: Shopify uses Fastly under the hood and you don't need to configure anything — but if you're running an external image CDN (Cloudinary, Imgix, etc.) for some assets, double-check you're not double-caching.
What we don't recommend
Three things that get sold as "speed boosters" that don't move Lighthouse meaningfully:
- "Critical CSS" apps — they inline a minified copy of your CSS, which helps in synthetic tests but real users were already getting that CSS cached on the second pageview. Net effect: ~2–3 points.
- AMP for product pages — Google deprecated AMP's preferential ranking treatment in 2021. The "speed gain" is real but the maintenance burden isn't worth it.
- Custom infrastructure / "headless" Shopify — moving to Hydrogen or Next.js doesn't make your store faster by default. It just shifts the bottleneck from Liquid to your React bundle. We've seen headless stores score worse than the original Liquid theme they replaced.
When to call someone
If you've done the four fixes above and you're still under 70 on mobile Lighthouse, the slowness is likely structural — a theme that was never built with performance in mind, or a stack of integrations that need re-architecting.
That's the kind of work we do: one-week speed audits that ship as a PR you (or your team) can review and merge. Usually a 15–30 point Lighthouse gain. If you want a quote, tell us about your store.
Or, if you're rebuilding from scratch, Verso ships with all four of these patterns built in by default.
About the author
Ashraful
Shopify Select Partner, Top Rated Plus on Upwork. 700+ Shopify projects shipped over 7+ years — themes, apps, migrations, speed, Hydrogen. Solo shop, no agency middlemen.
Read the full storyWorking on a Shopify project?
That's what I do every day. Pick whichever feels lower-friction.
More from the blog
Keep reading

Metaobjects vs. Metafields in Shopify: The Decision Tree I Use to Avoid Costly Refactoring
Confused about Shopify Metafields vs. Metaobjects? I'll show you my practical decision tree, with real-world examples, to pick the right tool for structured data and save yourself costly refactoring later.
Read
The One Liquid Snippet That Drops LCP by 800ms on Most Shopify Stores
Discover a single Liquid snippet that can slash your Shopify store's Largest Contentful Paint (LCP) by hundreds of milliseconds, dramatically improving speed and user experience.
Read
The Three Shopify CLS Fixes That Actually Move the Needle
Stop chasing complex CLS fixes on Shopify. My 7+ years of experience show that almost all Cumulative Layout Shift issues stem from three predictable sources: late-loading reviews, currency switchers, and unsized hero images. Fix these, and your scores will soar.
Read