Shopify · May 26, 2023
How to Improve Core Web Vitals on Shopify
Improving Core Web Vitals on Shopify comes down to a small set of repeatable fixes: compress and lazy-load images, trim third-party apps and scripts, reserve layout space for dynamic content, and pick a theme that was built lean instead of one you have to fight. Here is a practical, step-by-step approach.
By Polo Themes
Improving Core Web Vitals on Shopify is mostly a matter of controlling what loads, when it loads, and how much layout shifting it causes while it does. The biggest wins usually come from image handling, third-party app scripts, and font loading — three areas where a heavy or poorly optimized theme quietly adds up. This guide walks through diagnosing your current scores, then fixing each metric one at a time, with an honest look at when the fix is a setting and when it is your theme's underlying structure.
If you are shopping for a new theme rather than patching an existing one, it is worth browsing our Shopify themes catalog with performance specifically in mind — page weight and script count vary a lot between templates that otherwise look similar in a demo.
What Core Web Vitals Actually Measure
Core Web Vitals are three metrics Google uses to approximate real-world user experience, and they show up both in Search Console and as a factor in ranking. Largest Contentful Paint (LCP) measures how long the biggest visible element — usually a hero image or product photo — takes to render. Interaction to Next Paint (INP) measures how responsive the page feels when a shopper actually clicks, taps, or types. Cumulative Layout Shift (CLS) measures how much content jumps around as the page loads, which on Shopify is very often caused by images, apps, or fonts loading in without reserved space.
All three matter for a store, but they matter for different reasons. A slow LCP means shoppers bounce before they see your product. A poor INP means a shopper taps "Add to cart" and nothing happens for a beat, which reads as broken rather than slow. A bad CLS means a shopper is about to tap a button and the page shifts, so they tap the wrong thing — usually right as an app-injected banner or review widget finally loads in above it.
Step 1: Measure Before You Change Anything
Start with PageSpeed Insights and Google Search Console's Core Web Vitals report rather than guessing. PageSpeed Insights gives you both lab data (a single simulated test run) and, once your store has enough traffic, field data from real visitors via the Chrome User Experience Report. Field data is what actually affects search visibility, so treat lab scores as a diagnostic tool and field data as the scoreboard.
- Run your homepage, a representative collection page, and your best-selling product page separately — they often score very differently, and product pages are usually the worst offender because they carry the most images and apps.
- Check both mobile and desktop scores. Mobile is stricter and is what Google primarily uses for indexing and ranking.
- Note which specific metric is failing before you start changing things — the fix for a bad LCP is different from the fix for a bad CLS, and optimizing the wrong one wastes time.
Step 2: Fix Largest Contentful Paint
Compress and correctly size images
Oversized images are the single most common cause of a slow LCP on Shopify. Shopify's CDN can resize and serve images in modern formats automatically through its image URL parameters, but the theme still has to request the right size for the right context — a product image displayed at 600px wide should not be downloading a 2400px original. If you are hand-editing a theme, check that image tags use responsive srcset and sizes attributes rather than a single fixed-width image, and that the largest hero or featured image on a page is not also being lazy-loaded — lazy-loading the LCP element itself is a common mistake that delays the exact image you want to render fastest.
Preload the LCP image
For the single most important image on a page — typically a hero banner or the main product photo — a preload hint tells the browser to fetch it before it discovers the image tag during normal parsing. This is a small change with an outsized effect on LCP, and it is something a well-built theme should already be doing on its highest-priority templates rather than something a merchant should need to hand-code.
Reduce render-blocking CSS and fonts
Custom web fonts and large stylesheets can delay the browser from painting anything at all. Limit the number of font weights and styles you load, use a font-display: swap setting so text renders in a fallback font while the custom one loads, and avoid loading fonts you are not actually using anywhere on the page — a common leftover from theme customization where a font was tested once and never removed from the settings.
Step 3: Fix Interaction to Next Paint
INP problems on Shopify almost always trace back to JavaScript — either too much of it running on the main thread, or a single heavy script blocking the browser right when a shopper tries to interact. Apps are the usual culprit, since each one typically adds its own script tag, and a store with a dozen installed apps can end up running a surprising amount of unrelated code on every page.
- Audit installed apps regularly. Uninstall anything not actively in use — many apps leave script tags behind even after the feature is turned off in-app, and a full uninstall through Shopify's app management is the only way to guarantee the script is gone.
- Defer non-critical scripts. Reviews widgets, chat bubbles, and upsell popups rarely need to load before the page is interactive. Loading them after first paint, or only when scrolled into view, keeps the main thread free for the things a shopper actually needs — like a working "Add to cart" button.
- Avoid stacking multiple similar apps. Two apps doing overlapping jobs (two upsell tools, two review widgets) roughly double the script weight for no added benefit. Consolidate down to one per function.
- Watch third-party pixel and analytics tags. Marketing and tracking scripts are often added without much scrutiny and can be a meaningful chunk of total script execution time, especially on product pages where several tags fire on load.
Step 4: Fix Cumulative Layout Shift
CLS is almost always a reserved-space problem: something renders into the page after the initial layout is set, and it pushes everything below it down or sideways. On Shopify storefronts, the usual suspects are product images without a set aspect ratio, app-injected banners or badges that load in above existing content, and web fonts that render with different metrics than the fallback font they are replacing.
- Give every image container an explicit width and height (or an aspect-ratio value in CSS) so the browser reserves the right amount of space before the image finishes downloading.
- Check where apps inject their UI. A review badge or trust-seal app that inserts itself above the buy box, rather than in a fixed slot the theme provides, is one of the most common CLS causes we see reported by merchants.
- Reserve space for dynamically loaded content like size charts, stock countdown banners, or "recently viewed" carousels, even if it means showing a placeholder skeleton briefly instead of nothing.
Step 5: Decide Whether the Problem Is Your Theme, Not Just Your Settings
Settings and app hygiene fix a meaningful share of Core Web Vitals problems, but not all of them. If a theme's product template was built with a rigid image grid, unoptimized JavaScript bundling, or no lazy-loading discipline baked in from the start, no amount of app pruning will fully fix it — you are optimizing around a structural ceiling. This is a real trade-off worth being honest about: a highly animated, feature-dense theme is not automatically a slow one, but it does need to be built with performance as a design constraint from day one, not bolted on after launch.
Our Shopify themes are built with this in mind — image galleries that lazy-load everything except the priority hero or product image, section-based layouts that avoid injecting late-loading content above the fold unpredictably, and a script footprint kept intentionally light so a merchant's own app choices are what determines page weight, not the theme underneath them. If a catalog is image-heavy — electronics, fashion, eyewear — the theme's discipline around image sizing and lazy-loading matters even more, since there is simply more image weight for the theme to manage well or badly. Our Electronix theme is a good example of this in practice: a spec-heavy, image-dense catalog with the same lazy-loading and script discipline described above.
If you are evaluating options broadly rather than committing to a single theme, our full theme catalog spans Shopify, Figma, and bundle formats across several store categories, which is a reasonable way to compare how different templates approach image and script weight before you commit to a rebuild.
A Realistic Working Order
If you are starting from a store with no prior performance work, this rough order tends to produce the fastest visible improvement for the least risk: measure current scores and identify which metric is worst, remove or defer unused apps, fix image sizing and add a preload hint for the LCP image, add explicit dimensions to any image or dynamic block causing shift, and only then consider a theme change if the remaining ceiling is structural rather than something you can configure away. Re-measure after each step rather than batching every change at once — it is the only way to know which fix actually moved the needle, since Core Web Vitals field data can take a couple of weeks to fully reflect a change.
Frequently Asked Questions
How long does it take for Core Web Vitals scores to update after I make a fix?
Lab data in PageSpeed Insights updates immediately on your next test. Field data in Search Console is based on a rolling 28-day window of real visitor traffic, so it takes time to fully reflect a change — expect partial movement within a week or two and a fuller picture after about a month.
Do Core Web Vitals actually affect my Shopify store's search ranking?
They are one of many ranking signals Google uses, generally described as a tie-breaker rather than a dominant factor — content relevance and quality still matter more. That said, poor Core Web Vitals also directly hurt conversion rate regardless of ranking impact, since slow or jumpy pages simply lose shoppers, so the fixes are worth doing either way.
Will switching Shopify themes fix my Core Web Vitals problems?
Only if the current theme is the actual bottleneck. If your scores are poor mainly because of unoptimized images or a long list of installed apps, switching themes without addressing those will just move the same problems onto a new template. Do the app and image audit first, then evaluate whether a structural theme limitation remains.
Which Core Web Vitals metric should I prioritize first?
Whichever one Search Console or PageSpeed Insights flags as currently failing on your most-visited templates, usually your homepage and top product pages. There is little value in polishing a metric that is already passing while a different one is actively hurting real visitors.