Most “Shopify speed optimization” advice tells you to compress images and call it done. After working on 50+ Shopify storefronts, I can tell you images are rarely the problem. The real LCP killers are usually further down the stack — and you have to fix them in the right order, or you waste hours on changes that don’t move the needle.

Here’s the exact triage order I follow.

1. Audit, don’t guess

Before touching anything, run the page through PageSpeed Insights and WebPageTest. PageSpeed Insights gives you the Core Web Vitals numbers Google actually uses for ranking. WebPageTest gives you a waterfall that tells you why the page is slow.

Look for these in the waterfall:

  • Render-blocking scripts in the <head>
  • Large hero images without fetchpriority="high"
  • Third-party scripts loaded synchronously — the usual suspects: chat widgets, review apps, and analytics stacks

2. App audit — the 80/20 of Shopify performance

Open your theme’s theme.liquid and search for every <script> tag injected by an app. Each one is a candidate for removal or deferral.

A pattern I see constantly: stores running 4–5 review apps, 2 popup apps, and 3 “AI personalization” apps. Each one loads ~50–200 KB of JavaScript on every page. That’s your problem.

What I actually do:

  • Uninstall apps that aren’t generating revenue you can measure
  • For apps you keep, ask the dev support team if they have an async or deferred loading option (about half do; you just have to ask)
  • Move non-critical scripts to load on requestIdleCallback or after the first user interaction

3. Fix the hero image properly

If the LCP element is a hero image (it usually is on Shopify):

  • Add loading="eager" and fetchpriority="high" on the <img>
  • Serve it as WebP at the actual display dimensions, not the source size
  • Preload it in <head>:
<link
  rel="preload"
  as="image"
  href="/path/to/hero.webp"
  fetchpriority="high"
/>

This alone usually drops LCP by 600–1,200 ms on a typical Dawn-based theme.

4. Liquid render time

The often-missed one. If your collection or product page is slow even on a fast connection, your Liquid is doing too much work per request. Common culprits:

  • Nested for loops over all_products
  • Unbounded metafield iteration
  • Custom snippets that re-render the same data on every section

Use the Shopify Theme Inspector to find slow blocks. Cache what you can in section data, and look hard at any snippet that touches all_products or queries metafields in a loop.

5. Fonts

Self-host critical fonts. Three rules:

  • Use font-display: swap so text renders immediately
  • Subset to the characters you actually use
  • Preload only the one or two weights used above the fold — preloading every weight hurts more than it helps

This is the boring last 10% that takes you from “fast enough” to “fast.”

What I don’t recommend

The dozens of “speed optimization” apps in the Shopify App Store. Most of them just add another script to the page they claim to make faster. The fix is almost always removing things, not adding things.

For real proof, see the case studies — the Shopify projects there all went through this same triage order.