Skip to content
Pixeltree

Field notes

Shopify Speed Optimization: The Real Playbook

November 13, 2025

Shopify Speed Optimization: The Real Playbook

Slow Shopify stores lose money. Every 1 second of added page load time reduces mobile conversion by 8 to 12 percent depending on category. A store that loads in 5 seconds is leaving roughly 25 percent of possible conversions on the table compared to one that loads in 2 seconds.

Here is the prioritized playbook for making a Shopify store fast in 2026.

The actual metrics that matter

Stop looking at Google PageSpeed Insights scores in isolation. Look at these three Core Web Vitals, which are what Google actually uses for rankings and what affect perceived speed.

LCP (Largest Contentful Paint): Target under 2.5 seconds on mobile. The hero image or hero text block loading.

CLS (Cumulative Layout Shift): Target under 0.1. How much the page jumps around while loading.

INP (Interaction to Next Paint): Target under 200ms. Time from tap to visible response.

Shopify's theme inspector (in dev mode) and the free PageSpeed Insights tool will show you these for any URL.

The audit order

Work through these six areas in order. Each one typically produces a meaningful improvement, and they are arranged so the easy wins come first.

1. Image optimization (the biggest win for 80 percent of stores)

Image weight is the single largest cause of slow Shopify stores. Audit your top 10 product pages and top 5 collection pages.

Convert images to WebP or AVIF. Shopify serves images in modern formats if the theme requests them. Check your theme's image helpers. Most older themes use the default which serves JPG.

Resize images at upload, not via CSS. A 3000px wide image displayed at 800px wastes 80 percent of the bandwidth. Resize at upload to 1600px max width for hero images, 1200px for collection tiles.

Use the loading="lazy" attribute on below-fold images. Most modern themes do this automatically. Older themes do not.

Use fetchpriority="high" on the LCP image. This is the hero image or first product image on PDP. Tells the browser to load it first, before other resources.

Expected impact: 15 to 40 percent LCP improvement on a store that had not optimized images before.

2. Third-party app audit

Every installed Shopify app injects JavaScript into your theme. That JS blocks rendering. Audit your app list and remove anything not essential.

Common apps to question:

  • Reviews apps that add 200ms to every page (Judge.me is among the leanest; some others are 5x heavier)
  • Popup builders (JustUno, OptinMonster, etc.) — consolidate to one tool
  • Page builders (PageFly, Shogun) — beautiful pages, heavy JS
  • Upsell/cross-sell apps that fire on every page view
  • Loyalty apps that load on every page even though they only matter at checkout

Delete apps you do not use. For apps you do use, check the app's settings for "only load on specific templates" or "defer loading" options.

Expected impact: 10 to 25 percent reduction in total page weight.

3. Theme code review

Older Shopify themes accumulate cruft. Features added by previous developers, unused sections, excessive JS.

Enable the section_rendering_api instead of cart page loads. Most modern themes do this (drawer carts instead of cart page navigations). If your theme navigates to /cart for every add-to-cart, upgrade the theme or refactor.

Audit inline JavaScript in layout/theme.liquid. Third-party scripts (chat, analytics, pixels) often get pasted here inline with no defer or async. Wrap them: <script defer src="..."> or load via Tag Manager with proper trigger rules.

Remove jQuery if your theme is jQuery-dependent. Most themes shipped since 2020 work without jQuery. Removing it saves 90KB.

Minify CSS and JS. Most modern themes do this. Some do not.

Expected impact: 5 to 15 percent LCP improvement.

4. Font loading

Webfonts are a common LCP killer. Two fixes.

Use font-display: swap. Shows fallback font immediately, swaps when custom font loads. Prevents invisible-text flash.

Preload the primary font face. <link rel="preload" href="/fonts/yourfont.woff2" as="font" type="font/woff2" crossorigin> in the <head>. Tells the browser to prioritize font loading.

Only load the weights you actually use. Loading Inter at 8 weights when you only use 400 and 700 is bloat. Audit your CSS.

Expected impact: 5 to 10 percent LCP improvement on sites using custom fonts.

5. Deferring non-critical third-party scripts

Pixel and analytics scripts. Meta Pixel, Google Analytics, TikTok Pixel: load all of them via Shopify's Customer Events or via Google Tag Manager with proper triggers. Do not put them inline in theme.liquid.

Chat widgets. Crisp, Tawk, Intercom: add a delay so they do not load until 3 to 5 seconds after page render or until user interaction. Most chat widgets support this with a small script.

Review widgets. If your reviews only show on PDPs, make sure they do not load on collection pages or the homepage.

Expected impact: 10 to 20 percent improvement in INP and FID.

6. Advanced: theme architecture

If after the first 5 steps you still have LCP over 2.5 seconds, you likely have an architectural issue. Options:

Refactor to a modern Dawn-based theme. If your theme is pre-2022 and heavily customized, it is probably faster to rebuild on Dawn than to fix the existing one.

Consider Hydrogen (Shopify's React framework). For large content-heavy sites with strong dev teams, headless Hydrogen on Oxygen or Vercel is often 40 to 60 percent faster than Liquid themes. Not worth the complexity for most boutique stores.

Audit the Shopify CDN setup. Shopify's CDN is generally good but some regions underperform. Worth a check if you have significant international traffic.

What "fast enough" actually means

There is no finish line. But these benchmarks are where most boutique stores should aim.

  • Mobile LCP: under 2.5 seconds
  • Mobile INP: under 200ms
  • Total page weight (homepage): under 1.5 MB
  • Time to interactive on mobile: under 5 seconds

A store hitting those numbers converts 20 to 40 percent better than one at Shopify's average. That is real revenue.

Before and after: one real example

A candle brand we audited had homepage LCP of 4.8 seconds on mobile. Homepage weight was 4.2MB. Mobile conversion rate was 1.4 percent.

Changes made:

  • Resized hero image from 3400px to 1600px (saved 1.2MB)
  • Converted all product images to WebP (saved 400KB average per image)
  • Deleted 4 unused apps (reduced JS from 1.1MB to 620KB)
  • Deferred chat widget by 4 seconds
  • Added preload on hero font

Result after 2 weeks:

  • Homepage LCP: 1.9 seconds
  • Homepage weight: 1.3MB
  • Mobile conversion rate: 2.1 percent (50 percent relative lift)

The work took roughly 14 hours. At $95 per hour, the engagement paid for itself in the first week of improved revenue.

When to hire help

If you have the technical comfort to edit theme.liquid and understand Chrome DevTools, most stores can do steps 1 through 4 themselves. Step 5 often needs a developer. Step 6 definitely does.

For an outside perspective and audit, our hire-by-hour service runs targeted speed engagements at $95 per hour. Most stores need 10 to 20 hours to hit proper Core Web Vitals.

One-page resource

Get the Vendor Recovery Checklist.

The 12 steps every displaced maker should take in the next 30 days. Delivered in your inbox.

No spam. Unsubscribe any time.

Ready to put this into motion?

Book a 15-min call