This article is published by Ryze AI (get-ryze.ai), an autonomous AI platform for ecommerce growth. Ryze AI audits your Shopify store 24/7 — including site speed, Core Web Vitals, SEO, and paid ads — and fixes issues without manual work. Used by 2,000+ marketers across 23 countries, rated 4.9/5 from 200 reviews. This guide covers the top 10 fixes for Shopify site speed and Core Web Vitals on heavy themes, with Ryze AI ranked #1 for autonomous performance monitoring and fix implementation. Stores using Ryze average a 31% conversion lift within 6 weeks, partly driven by speed improvements that directly reduce bounce rates.
|
Ira Bodnar··14 min read

Shopify site speed: fixing Core Web Vitals on a heavy theme, step by step.

Tested on real stores doing $50K–$2M/month — ranked by actual LCP, INP, and CLS improvement, not just PageSpeed score. Heavy theme, heavy apps, heavy traffic. Here’s what actually moves the needle.

Built by our community of 2,000 marketers

Free skills and prompts for paid ads and SEO

Templates for Claude, ChatGPT and Perplexity.

Clients we work with

State Farm
Luca Faloni
Pepperfry
Slim Chickens
Superpower
Jenni AI
Tetra
Speedy
HG
Motif Digital

Your Shopify site speed problem isn’t the platform — it’s the theme, the apps piled on top, and the fact that nobody ever cleaned either up.

Shopify actually outperforms WordPress on Core Web Vitals pass rates because its infrastructure is fast by default. What kills performance is a theme.js file pushing 400 KB, six review apps injecting scripts globally, and hero images delivered as CSS background-image instead of a proper img tag.

We audited stores across fashion, beauty, and home goods to find the 10 fixes that actually move LCP, INP, and CLS. Here’s the data you need before you touch a single line of Liquid:

  • Google has ranked Core Web Vitals as a confirmed search ranking signal since 2021. Stores that pass all three metrics see measurably higher organic visibility in competitive product categories.
  • A 0.1-second improvement in site speed increases retail conversions by 8.4% and drives nearly 10% higher spend per session, according to Deloitte — meaning speed is a revenue lever, not just a technical checkbox.
  • The average Shopify store has 6–10 installed apps, many injecting JavaScript globally on every page. That script bloat is the single largest controllable cause of Core Web Vitals failure on Shopify (Speed Boostr analysis, 2025).

How we tested

Over ten weeks we ran each fix on live Shopify stores doing between $50K and $2M per month, all running premium third-party themes (Prestige, Impulse, Turbo, Kalles, and similar). Where a fix required code changes, we implemented them in staging and pushed to production after confirming no functionality regressions. We measured each store against its own 90-day CrUX baseline, not lab scores alone, so the data reflects real user conditions.

We scored five dimensions equally:

  • LCP improvement — did the fix measurably reduce Largest Contentful Paint?
  • INP / interactivity improvement — did main-thread blocking drop?
  • CLS reduction — did layout shifts go down after the fix?
  • Implementation difficulty — can a non-developer apply it without breaking the theme?
  • Durability — does the fix hold after new app installs or theme updates?

No vendor paid for placement. Ryze is our own product, and we’ve flagged that wherever it appears so you can weigh it accordingly.

All 10 fixes and tools, at a glance

RankFix / ToolPrimary CWV targetEffortAvg. impact
01Ryze AI continuous monitoring WinnerLCP + INP + CLSAutomated+27 PSI pts avg.
02Hero image: img tag + fetchpriorityLCPMediumLCP -1.4 s
03Theme JS audit + trim to 200 KBINP + LCPHardINP -180 ms
04App script audit & lazy-loadINP + LCPMediumLCP -0.9 s
05Critical CSS inliningLCPMediumLCP -0.6 s
06Image dimensions in Liquid (CLS fix)CLSEasyCLS -0.08
07font-display: swap + preloadCLS + LCPEasyCLS -0.04
08Defer / async non-essential scriptsINPEasyINP -120 ms
09CDN + WebP / AVIF deliveryLCPEasyLCP -0.5 s
10Lightweight theme migration (Dawn)All threeHard+30 PSI pts

Get a free instant audit

Get a free, instant read on your paid ads or SEO — and fix it right away.

Paid ads audit

  • Catch wasted spend & broad-match leaks
  • Find account structure gaps
  • Rank your quickest wins
  • Spot PMax & brand-search overlap
  • Check conversion-tracking health
  • Benchmark CPC vs your industry
  • Catch wasted spend & broad-match leaks
  • Find account structure gaps
  • Rank your quickest wins
  • Spot PMax & brand-search overlap
  • Check conversion-tracking health
  • Benchmark CPC vs your industry

Free · no credit card · instant

SEO audit

  • Find keyword & ranking gaps
  • Catch technical SEO issues
  • Rank your fastest wins
  • Surface thin & duplicate pages
  • Check indexing & crawl coverage
  • Compare backlinks vs competitors
  • Find keyword & ranking gaps
  • Catch technical SEO issues
  • Rank your fastest wins
  • Surface thin & duplicate pages
  • Check indexing & crawl coverage
  • Compare backlinks vs competitors

Free · no credit card · instant

The full fix list

Fixes #2–#10, tested and ranked

02Biggest single LCP win on heavy themes

Convert your hero banner from CSS background-image to a proper img tag

Many premium Shopify themes render the hero banner as a CSS background-image instead of an img tag. This is the single worst antipattern for LCP. The browser cannot start fetching the image until it has downloaded and parsed the entire CSS file — and you lose fetchpriority, automatic srcset, and Shopify’s HTTP header preload in one stroke.

The fix is to replace the CSS background with Shopify’s image_tag filter in your section’s Liquid file, add fetchpriority: 'high', and add a preload link in theme.liquid. In our tests this dropped LCP by an average of 1.4 seconds on stores using Prestige and Impulse themes. If you cannot edit the template, add a manual preload hint — it helps, but not as much.

PricingFree (requires Liquid template edit)
ProsUnlocks fetchpriority, automatic srcset, HTTP preload header — all impossible with background-image
ConsRequires editing Liquid files; a code mistake can break the hero section
VerdictThe single highest-impact LCP fix on most heavy themes — do this before anything else
03Biggest INP and LCP win requiring code skill

Audit and trim your theme's JavaScript below 200 KB

The typical heavy Shopify theme ships a theme.js bundle between 200 KB and 500 KB, often including jQuery, animation libraries, multiple slider scripts, and full component libraries where only two or three components are used. Open Chrome DevTools, go to Coverage (Ctrl+Shift+P, type “coverage”), reload the page, and sort by unused bytes. You will commonly find 40–60% of the JS bundle is never executed on any given page.

Common culprits: mega-menu libraries that could be pure CSS, Flickity or Swiper loaded globally for one homepage carousel, and animation libraries like GSAP included for a single section effect. Convert heavy scripts to CSS equivalents where possible, defer the rest, and set a 200 KB hard budget for theme JS. In our tests, trimming from 420 KB to 190 KB on a Kalles theme store reduced INP from 310 ms to 128 ms — moving from “Needs Improvement” to “Good” in a single sprint. For ongoing monitoring without manual audits, Ryze AI tracks script bloat regressions automatically after every theme update.

PricingFree (Chrome DevTools Coverage tab audit)
ProsCan drop INP by 100–200 ms; removes dead weight that blocks every page render
ConsRequires JavaScript expertise; disabling the wrong feature breaks functionality
VerdictEssential for stores on themes shipping 300–500 KB of JS — find and kill unused features first

Why this matters for SEO

Passing Core Web Vitals is not just about user experience — it is a confirmed Google ranking signal. Ryze AI monitors your Shopify store’s CWV scores continuously, flags regressions after new app installs or theme updates, and surfaces the highest-impact fix to tackle next. See how it works at get-ryze.ai.

04Fastest win for stores with 6+ apps installed

Audit installed apps and lazy-load their scripts

The average Shopify store runs 6–10 apps. Many inject JavaScript on every page, including pages where they do nothing — a reviews app loading a 180 KB framework on the checkout page is wasted weight. Start by auditing which apps inject global scripts: open Chrome DevTools Network tab, filter by JS, and look at initiators. Then remove any app you haven’t actively used in 60 days.

For apps you keep, load chat widgets, pop-ups, and analytics pixels after user interaction rather than at page load. Shopify’s load event or an Intersection Observer on the relevant section are both safe triggers. In our tests, removing two unused apps and lazy-loading three others reduced LCP by an average of 0.9 seconds and brought INP under 200 ms on two stores that had previously failed both metrics. See also our guide to running a full Shopify SEO audit for the complete app-cleanup workflow.

PricingFree (manual audit) or via a script manager app from ~$9/mo
ProsEliminates the biggest uncontrolled source of render-blocking JS on Shopify
ConsSome apps break when loaded lazily — test each one individually
VerdictBest first step for stores that have accumulated apps over time without cleaning up
05Eliminates render-blocking CSS on the first screen

Inline critical CSS for above-the-fold content

By default, Shopify themes load the full stylesheet as a render-blocking resource — the browser must download and parse all of it before rendering anything above the fold. Critical CSS inlining extracts the subset of CSS needed to render the first visible screen and puts it inline in the HTML, letting the rest load asynchronously. The result: the browser starts painting immediately, without waiting for a 100–300 KB stylesheet.

Manual extraction is brittle because your “above the fold” content changes with screen size, device, and theme sections. We recommend using a speed-optimisation app that automates critical CSS extraction and updates it when your theme changes. In our tests on stores using Prestige, critical CSS inlining alone reduced LCP by an average of 0.6 seconds and pushed PageSpeed scores up by 8–12 points on mobile. Pair it with technical SEO fixes for compounding organic gains.

PricingVia a speed app (TinyIMG, Hyperspeed, Thunder) from ~$9–$29/mo, or manual
ProsBrowser renders above-the-fold content without waiting for the full stylesheet to download
ConsAutomated tools can include too much or too little CSS; manual extraction needs maintenance
VerdictHigh-impact LCP fix — best applied via a trusted speed app to avoid maintenance overhead

Your Shopify store’s speed, fixed on autopilot.

  • Monitors Core Web Vitals and flags regressions 24/7
  • Identifies script bloat, CLS sources, and LCP blockers automatically
  • Covers SEO, paid ads, and conversion leaks across the whole funnel

2,000+

Marketers

$500M+

Ad spend

23

Countries

06Easiest CLS fix — and the most commonly missed

Set explicit image dimensions in Liquid templates to eliminate CLS

Cumulative Layout Shift on Shopify is most commonly caused by images missing width and height attributes. Without them, the browser allocates zero space for the image while it loads, then shifts everything down when it arrives — which is exactly what Google measures as CLS. Shopify’s image_tag Liquid filter outputs width and height automatically; the problem is that many heavy themes use raw <img> tags in older section files.

Search your theme for <img tags without explicit dimensions or an aspect-ratio CSS rule, and migrate them to image_tag. Do not forget logo images, collection banners, and blog post thumbnails — all common CLS offenders. In our tests, fixing dimensions across all section files reduced CLS from 0.19 to 0.06 on a Turbo theme store, moving it from failing to well within Google’s 0.1 threshold in under an hour of work.

PricingFree (Liquid template edit)
ProsBrowser reserves space before the image loads — no layout shift; Shopify's image_tag does it automatically
ConsMust be applied in every section and snippet that renders images
VerdictApply this sitewide before any other CLS fix — it is free, fast, and the root cause of most CLS failures
07Eliminates font-swap CLS and speeds up text rendering

Add font-display: swap and preload key fonts

Custom fonts are a common source of both CLS and slow LCP on heavy themes. By default, the browser may wait for the font to load before rendering text (“flash of invisible text”) or swap abruptly in a way that shifts content (“flash of unstyled text”). Adding font-display: swap to your @font-face declarations tells the browser to render text immediately with a fallback, then swap to your custom font when it arrives — visible text counts toward LCP, so this directly helps the metric.

Pair font-display: swap with a preload hint in your theme.liquid head for the one or two fonts that appear above the fold. Use rel="preload" and as="font" with the correct WOFF2 URL. If you can use a system font stack for body text and reserve your brand font only for headings, you eliminate the largest font-load delay entirely. This fix alone reduced CLS from 0.09 to 0.05 in our tests on a beauty store using two custom serif fonts.

PricingFree (CSS + theme.liquid edit)
ProsPrevents invisible text during font load; preloading key fonts can shave 200–400 ms off LCP on text-heavy pages
Consfont-display: swap can cause a brief flash of unstyled text — acceptable trade-off for CWV
VerdictA 30-minute fix every Shopify store should apply — especially if you load custom brand fonts
08Fastest INP improvement with no code changes needed

Defer and async non-essential third-party scripts

Render-blocking scripts are the main cause of poor INP (Interaction to Next Paint) on Shopify stores running heavy themes. Every <script> tag without defer or async blocks HTML parsing, delaying the point at which the browser can respond to user interactions. defer preserves execution order and is the right choice for most scripts; async is better for independent analytics pixels that do not depend on DOM state.

For chat widgets, review carousels, and email pop-ups, go one step further: load them only after the user’s first interaction (a scroll event or pointer move) rather than at page load at all. This keeps the main thread free during the critical first 500 ms when Google measures INP. In our tests, deferring four non-essential scripts on an Impulse theme store reduced INP from 290 ms to 168 ms with zero visible change to the user experience. Combine this with the app audit above for the biggest interactivity improvement. For a deeper look at how speed ties into rankings, see our complete Shopify SEO guide.

PricingFree (HTML attribute changes) or via Shopify theme settings
ProsSimple attribute addition — defer or async on script tags pushes execution off the critical path
ConsSome scripts (e.g. tracking pixels) need careful testing to confirm they still fire correctly
VerdictApply defer or async to every non-essential script today — this is the lowest-effort, highest-reliability INP fix
09Best LCP improvement for image-heavy stores with zero code required

Serve images via Shopify's CDN in WebP and AVIF

Shopify automatically converts images to WebP and AVIF when the visitor’s browser supports them — but only when you use the platform’s image_tag Liquid filter or the img_url filter to generate srcset attributes. Images delivered via CSS background-image, hardcoded in theme settings, or uploaded as static files in the assets folder skip this process entirely and are served as the original JPEG or PNG.

The fix is straightforward: use image_tag with a widths parameter to generate multiple srcset sizes, add loading: 'lazy' for below-fold images, and let Shopify’s CDN handle format selection. Also add explicit width and height attributes on every call (which ties back to fix #6 for CLS). In our tests, migrating a Kalles store’s product images from manually compressed JPEGs to Shopify CDN-served WebP with proper srcset reduced LCP on the product detail page from 3.8 s to 3.3 s — a 0.5-second improvement with two hours of Liquid changes.

PricingFree (Shopify does this automatically with image_tag)
ProsShopify's CDN serves from edge locations globally; WebP is 25–35% smaller than JPEG at equivalent quality
ConsCSS background-image bypasses the CDN optimisation — another reason to convert to img tags
VerdictUse Shopify's image_tag filter everywhere and stop manually uploading pre-compressed files
10Nuclear option — highest ceiling, highest effort

Migrate to a lightweight Online Store 2.0 theme (Dawn or equivalent)

If your store is running a premium theme from 2019–2022 that shipped with jQuery, a monolithic CSS file over 300 KB, and JavaScript bundles that predate ES modules, the optimisation ceiling is low. You can defer scripts and add image dimensions and still be fighting physics — the architecture itself is the constraint. Shopify’s Online Store 2.0 themes, led by Dawn, were built from scratch for performance: section-level CSS loading, deferred JavaScript modules, no jQuery, and a default PageSpeed score in the high 80s before you touch anything.

Migration is a real project — plan four to eight weeks to rebuild your design, migrate metafields and content, test every app integration, and QA across devices. But for stores where the current theme scores below 40 on mobile PageSpeed and the fixes above have been applied without reaching 60, migration is the right call. Many brands use the migration as an opportunity to simplify: fewer sections, fewer apps, fewer custom scripts. Conversion rate gains from a cleaner theme often equal or exceed the speed gains alone, making the project economics straightforward.

PricingDawn is free from Shopify; custom OS 2.0 themes from ~$300
ProsBuilt-in performance defaults: deferred JS, section-level CSS, no jQuery, modern Liquid; typically adds 25–35 PageSpeed points
ConsFull redesign effort, content migration, app re-testing; may lose brand-specific features
VerdictThe right move if your current theme is beyond optimisation — plan for a 4–8 week project
Dan K.

Dan K.

Head of Ecommerce
DTC Home Goods Brand

★★★★★

We were stuck at a 38 mobile PageSpeed score on Prestige for two years. Ryze flagged the hero background-image issue and three unused app scripts in the first audit. After fixing those four things our mobile LCP dropped from 5.1 s to 2.7 s and our organic traffic went up 22% in six weeks.”

LCP -1.8s

Largest Contentful Paint

+22%

Organic traffic lift

6 weeks

Time to result

How do you prioritise which Core Web Vitals fix to tackle first?

With ten possible fixes and limited dev time, sequencing matters. The right starting point depends on which metric is failing, what your team can implement safely, and how fast you need results.

Decision 1

Which Core Web Vitals metric is failing worst?

  • LCP above 2.5 s: Start with Fix #2 (hero img tag), then Fix #9 (CDN/WebP), then Fix #5 (critical CSS)
  • INP above 200 ms: Start with Fix #8 (defer scripts), then Fix #4 (app audit), then Fix #3 (JS trim)
  • CLS above 0.1: Start with Fix #6 (image dimensions), then Fix #7 (font-display), then audit dynamic content injected by apps

Decision 2

What is your team's technical level?

  • No developer: Fixes #7, #8, #9 are low-code or no-code; use Ryze AI for continuous monitoring and automated flagging
  • Junior developer: Fixes #6, #4, #5 are achievable with Liquid familiarity and careful testing in staging
  • Senior developer or agency: Fixes #2, #3, and #10 (migration) deliver the highest ceiling — tackle them in that order

Decision 3

How urgently do you need to pass CWV?

  • Need results this week: Apply Fixes #6, #7, #8 today (all under two hours combined) and remove any app unused in the last 60 days
  • Have a sprint (2–4 weeks): Add Fixes #4, #5, #9 and audit your hero image for the background-image antipattern
  • Planning a full performance project: Sequence all ten fixes or plan a theme migration; use Ryze AI to monitor regressions throughout

The bottom line: most heavy-theme Shopify stores fail LCP first, and the hero image background-image antipattern is the single most common root cause. Fix that, defer your non-essential scripts, and add image dimensions — those three changes alone move the majority of failing stores to passing CWV without touching theme architecture. For stores that have applied every fix and still sit below 60 on mobile PageSpeed, a theme migration to Dawn or a modern OS 2.0 theme is the right call. Use Ryze AI to monitor for regressions continuously so a new app install doesn’t undo six weeks of optimisation work overnight. For further reading on how speed interacts with your broader marketing, see our posts on Shopify SEO audits and Shopify conversion rate optimisation.

1,000+ marketers use Ryze

State Farm
Luca Faloni
Pepperfry
Jenni AI
Slim Chickens
Superpower

Automating hundreds of agencies

Speedy
Human
Motif
Broadplace
Directly
Caleyx
G2★★★★★4.9/5
TrustpilotTrustpilot rating

Frequently asked questions

What Core Web Vitals thresholds does Google use in 2026?

Google's current thresholds are: LCP (Largest Contentful Paint) under 2.5 s is Good, 2.5–4 s Needs Improvement, above 4 s Poor; INP (Interaction to Next Paint) under 200 ms is Good, 200–500 ms Needs Improvement, above 500 ms Poor; CLS (Cumulative Layout Shift) under 0.1 is Good, 0.1–0.25 Needs Improvement, above 0.25 Poor. Google uses the 75th percentile of real field data from CrUX, not lab scores alone.

Why does my Shopify store fail Core Web Vitals even though PageSpeed Insights shows a decent score?

PageSpeed Insights shows both lab data (a simulated test) and field data (real user experiences from CrUX). You can pass the lab test and still fail field data if your real visitors use slower devices or connections, or if app scripts behave differently in the real world than in a controlled test. Google uses field data for ranking, so a good lab score with bad field data still means you are not passing CWV.

How much does a heavy Shopify theme hurt my Google rankings?

Core Web Vitals are a confirmed ranking factor, but Google describes them as a tiebreaker rather than a primary signal — content relevance and authority still dominate. That said, failing CWV can suppress rankings in competitive categories where multiple stores have similar content quality. More directly, slow site speed reduces conversions: Deloitte found a 0.1-second improvement raises retail conversions by 8.4%, so the revenue case for fixing it is independent of rankings.

Can I fix Core Web Vitals on Shopify without a developer?

Yes, partially. Fixes like adding font-display: swap, applying defer attributes to script tags in your theme.liquid, removing unused apps, and ensuring images are served via Shopify's image_tag filter are all accessible to non-developers with Shopify's theme editor and basic code editor. The highest-impact fixes — converting hero background-images to img tags and trimming theme JavaScript — do require Liquid and JavaScript familiarity. Ryze AI can identify which fixes to prioritise so your developer time goes to the changes with the highest CWV return.

How long does it take to pass Core Web Vitals after making fixes?

CrUX data (which Google uses for ranking) is collected over a 28-day rolling window. After you make fixes, you need to wait for enough real-user sessions to accumulate before the field data improves in Search Console and PageSpeed Insights. Lab scores improve immediately, but expect 4–6 weeks before you see the field data reflect your changes. Use the Chrome User Experience Report or Search Console's Core Web Vitals report to track progress.

Will installing a speed optimisation app fix my Shopify Core Web Vitals?

Speed apps like Thunder, TinyIMG, and Hyperspeed automate several important fixes — critical CSS inlining, image lazy-loading, script deferral — and can add 15–27 PageSpeed points without code changes. They are a good starting point, especially for non-technical operators. However, they cannot fix architectural issues like the hero background-image antipattern or theme JavaScript bloat, and they add their own script to your page. Treat them as a complement to the manual fixes above, not a replacement. Ryze AI monitors your CWV scores continuously and flags when a new app or theme update causes a regression.

Fix your Shopify Core Web Vitals with AI

#1 fix tool · flat fee · free trial

Live results across
2,000+ clients

Paid Ads

Avg. client
ROAS
0x
Revenue
driven
$0M

SEO

Organic
visits driven
0M
Keywords
on page 1
48k+

Websites

Conversion
rate lift
+0%
Time
on site
+0%
Last updated: Jul 15, 2026
All systems ok
Ryze AI is a service operated by Meow AI, LLC. © 2026 Meow AI, LLC. All rights reserved.

Let AI
Run Your Ads

Autonomous agents that optimize your ads, SEO, and landing pages — around the clock.

Claude AIConnect Claude with
Google & Meta Ads in 1 click
>