Quick Takeaways
  • Most Shopify stores lose speed to apps they forgot they installed — not images.
  • LCP and INP are the Core Web Vitals metrics Google cares most about right now. TBT is your proxy for INP.
  • A Dawn-based store with 4 rogue apps will almost always outperform a custom theme with 12 apps, even if the custom theme is "optimized."
  • Speed work without a baseline audit is guesswork. Measure first, cut second.

The Real Reason Your Shopify Store Is Slow

Here's an uncomfortable truth: your product images probably aren't why your store is slow. Most store owners spend hours compressing JPEGs while their real problem is sitting in the Shopify app list, quietly injecting JavaScript on every page load. We've audited over 200 stores at SPS, and in roughly 70% of cases, unused or redundant apps account for more page weight than all unoptimized images combined.

Every app you install on Shopify gets to add its own scripts, stylesheets, and tracking pixels. Shopify doesn't gate this. An app you uninstalled six months ago may have left its code behind — still loading, still blocking rendering, still costing you 400ms you can't get back. That's the actual problem most store owners never fix.

Understand What Google Is Actually Measuring

Before you change a single thing, you need to know what's being graded. Google's Core Web Vitals for Shopify stores come down to three signals:

  • LCP (Largest Contentful Paint): How fast your hero image or headline renders. Google's threshold for "good" is under 2.5 seconds.
  • INP (Interaction to Next Paint): How quickly your store responds when someone clicks. This replaced FID in 2024 and it's harder to pass.
  • CLS (Cumulative Layout Shift): Whether your page jumps around as it loads. Font swaps and lazy-loaded images are the usual culprits on Shopify.

Here's what most speed guides don't tell you: LCP on Shopify is almost always a server-side problem before it's an image problem. Shopify's CDN is genuinely fast, but your theme's render-blocking CSS and third-party scripts load before your LCP element even starts. Fix the render chain, and your LCP drops without touching a single image file.

TBT as a Proxy for INP

INP is hard to measure in a lab. Use Total Blocking Time (TBT) instead — it's what Lighthouse and PageSpeed Insights report, and it correlates strongly with real-world INP scores. If your TBT is over 200ms, your INP is almost certainly failing. The fix is almost always JavaScript: too much of it, loaded too early, doing too little that users actually need on first interaction.

The App Audit Nobody Wants to Do (But Everyone Should)

Open your Shopify admin and go to Settings → Apps. Now open a separate tab and run your homepage through a proper Shopify site speed audit. Cross-reference the waterfall chart with your installed apps. You're looking for scripts that load in the first 2 seconds of page render that aren't Shopify core or your theme.

For every app you find, ask two questions: Is this app actively generating revenue or reducing churn? And: Is there a lighter alternative? A review app that adds 180KB of JavaScript for a widget most users never scroll to is a bad trade. A sticky cart app that adds 12KB and reduces abandonment by 9% is a good one.

What to Do With Apps You Can't Remove

Some apps are non-negotiable — your subscription app, your loyalty program, your review platform. For those, the goal is deferral. Load them after the main thread is free. Most modern Shopify app developers support defer or async loading, but the default installation rarely enables it. You often have to edit the script tag in your theme's theme.liquid file manually, or ask your developer to do it. It's usually a one-line change that saves 200–400ms of TBT.

Image Optimization: The Right Way, Not the Easy Way

Images do matter — just not in the way most guides describe. The mistake isn't uploading large files. It's not serving the right size for the right context. Shopify's Liquid templating lets you request specific image dimensions using URL parameters like image_url | img_url: '800x'. Most themes handle this automatically, but plenty of older or heavily customized themes don't — they serve a 2400px image to a 375px mobile screen and call it a day.

The format shift that actually moves the needle is WebP. Shopify automatically serves WebP to browsers that support it when you use the image_tag Liquid filter. If your theme is using raw <img src> tags with static URLs, you're skipping WebP entirely and serving older formats to everyone. That's a fixable Liquid problem, not an upload problem.

The LCP Image Specifically

Your LCP element — usually the hero image on your homepage or the main product photo on PDPs — needs one specific treatment: fetchpriority='high' on the image tag and no lazy loading. Shopify's default themes handle this correctly. Heavily customized themes often don't, especially if a developer added lazy loading globally to pass a quick audit. Global lazy loading on all images sounds smart until it delays your LCP image by 300ms because the browser didn't know to prioritize it.

A Real-World Example: What a Speed Fix Actually Delivered

One of our clients — a mid-sized US apparel brand doing around $180K/month on Shopify — came to us with a mobile PageSpeed score of 31. Their TBT was sitting at 1,840ms. After a full Shopify performance optimization engagement, here's what we found and fixed:

  • Six apps had left script tags in theme.liquid after being uninstalled.
  • Their hero image was being served at 3,200px wide on mobile.
  • A chat widget was loading synchronously in the <head>, blocking paint for 620ms.
  • Their custom font was loading from a self-hosted server in Germany, not Shopify's CDN.

After fixes: mobile PageSpeed score went from 31 to 74. TBT dropped from 1,840ms to 290ms. LCP improved from 6.1s to 2.3s. Conversion rate on mobile increased by 22% over the following 30 days. Revenue per session went from $1.84 to $2.21. None of that came from new ads or new products — same traffic, faster store.

The Shopify Speed Optimization Checklist

Use this before hiring anyone or changing any code. It'll tell you where your biggest wins are hiding.

  • Run your store through Google PageSpeed Insights on mobile. Screenshot your LCP, TBT, and CLS scores.
  • Open Chrome DevTools → Network tab → reload your homepage. Sort by size. Flag anything over 200KB that isn't a product image.
  • Check your Shopify admin: Settings → Apps. List every app. Mark which ones are actively used weekly.
  • Open your theme's theme.liquid file and search for <script. Count the third-party scripts. Any more than 5–6 is worth investigating.
  • Run your store through WebPageTest.org and check the waterfall. Look for render-blocking requests in the first 2 seconds.
  • Check your LCP image specifically: is it lazy-loaded? If so, remove loading='lazy' from that element only.
  • Verify your images are using Shopify's image_tag Liquid filter, not hardcoded <img src> URLs.
  • Test your store on a real Android device on a 4G connection, not just your desktop browser. That's your actual mobile user's experience.

When DIY Speed Work Stops Making Sense

There's a ceiling to what non-developers can fix on a Shopify store. Compressing images, removing unused apps, and switching to a lighter theme — you can do all of that yourself. But if your TBT is still over 400ms after those changes, you're into JavaScript optimization territory. That means auditing third-party script execution, deferring non-critical rendering, and sometimes rewriting parts of your theme. That's not a weekend project.

If you're spending money on Google Ads or Meta Ads and your mobile score is under 50, you're essentially paying to send traffic to a slow store. The math on fixing speed before scaling ad spend almost always works out in your favor. A store converting at 1.4% that speeds up to convert at 1.9% doesn't need 35% more ad budget to hit the same revenue target.

And if your store was built with speed as an afterthought — a heavily customized theme, a dozen installed apps, no performance baseline — it might be worth considering a cleaner store build from the ground up with performance baked in from day one rather than bolted on later.

Frequently Asked Questions

How do I check my Shopify store's speed score?

Go to Google PageSpeed Insights (pagespeed.web.dev) and enter your store URL. Run it on mobile — that's the score Google uses for ranking. Also check your Shopify admin under Online Store → Themes, where Shopify shows a simplified speed score. The PageSpeed Insights score is more actionable because it breaks down LCP, TBT, and CLS individually so you know what to fix first.

Does Shopify's built-in speed score actually matter for SEO?

Yes, but not in isolation. Google uses Core Web Vitals as a ranking signal through its Page Experience update. A poor LCP or high CLS won't tank your rankings on its own, but it can be the tiebreaker between you and a competitor with similar content. More practically, speed directly affects your paid traffic ROI — Google Ads Quality Score is partly based on landing page experience, which includes speed. So even if you're skeptical about the SEO lift, the conversion and ad efficiency argument for Shopify SEO and speed together is hard to argue with.

What's a good Shopify PageSpeed score on mobile?

Anything above 70 on mobile is solid for a Shopify store. Above 85 is excellent and genuinely hard to achieve with a full-featured store. Don't obsess over hitting 100 — a store with real product images, reviews, and necessary apps will naturally score lower than a stripped-down demo site. What matters more than the number is whether your LCP is under 2.5s and your TBT is under 200ms. Those thresholds correlate directly with user experience and Google's "good" classification.

If you've worked through this checklist and you're still stuck with a slow store, the problem is almost certainly deeper than surface-level fixes can reach. Our team at SPS has done this work on hundreds of Shopify stores — we know where the bodies are buried. Take a look at our Shopify speed optimization service and see exactly what we audit, what we fix, and what kind of results you can realistically expect.