Shopify guideGuide·9 min read
How to Improve Core Web Vitals on Shopify
Each of the three Core Web Vitals fails on Shopify for its own reason, and each has its own fix. Here is how to read your real scores, find the template that is failing and fix LCP, INP and CLS.

Key takeaways
- Core Web Vitals are three field metrics: Largest Contentful Paint (good at 2.5 seconds or less), Interaction to Next Paint (200 milliseconds or less) and Cumulative Layout Shift (0.1 or less), measured at the 75th percentile of real visits.
- Shopify shows all three from real shopper data in its web performance reports, under
Online Store > ThemesandAnalytics > Reports. Search Console shows the same metrics from Chrome's CrUX data. - On Shopify, slow LCP usually comes from the hero or main product image, poor INP from app and theme JavaScript, and layout shift from content that apps inject after the page loads.
- Google uses Core Web Vitals in ranking, but says relevance comes first and good scores don't guarantee a top position.
- Who it is for
- Store owners and developers with failing vitals
- Time needed
- 1 to 3 days of fixes, then 28 days to validate
- What you need
- Admin access, theme code access and Search Console
On a Shopify store, the three Core Web Vitals tend to fail for three different reasons, and each one has its own fix. A store can have a fast hero image and still fail on responsiveness because of a chat widget, or pass on desktop and fail on mobile because a pop-up pushes the page down. Treating "speed" as one problem is why so many speed projects change little.
This guide shows where to read your real scores, how to find which template and which element is failing, and the fixes I apply on Shopify themes for each metric. Thresholds and admin paths are as I checked them on Shopify's and Google's documentation on 7 November 2026.
The three metrics and their thresholds
Google and Shopify use the same thresholds. A page group passes when 75% of real visits meet the "good" level, and its overall status is set by its worst metric. Poor CLS with good LCP and INP still makes the group poor.
| Metric | What it measures | Good | Poor |
|---|---|---|---|
| LCP | When the largest visible element has loaded | 2.5 s or less | Over 4 s |
| INP | How quickly the page responds to taps and clicks | 200 ms or less | Over 500 ms |
| CLS | How much the layout jumps while loading | 0.1 or less | Over 0.25 |
Anything between good and poor is "needs improvement" in Search Console and "moderate" in Shopify's reports. Mobile and desktop are assessed separately, and on most stores mobile is where the problems are, because phones have slower processors and most shoppers browse on them.
Where to see your real scores
There are two kinds of data, and only one of them counts for Google. Field data comes from real visits. Lab data comes from a single simulated test, such as a Lighthouse run. Lab tests are useful for diagnosing, but Search Console's Core Web Vitals report uses field data from the Chrome UX Report (CrUX).
- Shopify's summary. Go to
Online Store > Themes. The performance summary shows LCP, INP and CLS from real user data over the past 30 days, with a date picker for today, the last 7 days and the last 30 days, plus sessions by device type. - Shopify's full reports. Go to
Analytics > Reportsand search for "contentful", "next" or "cumulative" to open the report for each metric. You need the Reports staff permission, and the store can't be in private mode, or there is no real user data to show. - Search Console. Open
Experience > Core Web Vitalsin your property. URLs with a similar experience are grouped, so one fix to a template often clears hundreds of URLs at once. - A lab test for diagnosis. Run a key page through PageSpeed Insights or the free Shopify speed checker to see which element is the LCP element and which scripts block the main thread.
Find the template that's failing
A store-wide average hides the problem. Shopify's reports break each metric down by page type and by page URL, which tells you whether the issue sits in the product template, the collection template or the home page.
- Open the Page Type report for the failing metric and set the device to mobile. Note which template is worst. Product pages carry most of the traffic on most stores, so start there if two are close.
- Check the Over Time chart. Shopify adds numbered event markers for app installs, theme updates and new code. If a metric got worse on a particular day, the marker next to it is your first suspect.
- Run a lab test on one URL of that template. Note the LCP element, the long tasks and the layout shifts it reports.
- List the apps that load on that template. The Shopify app detector shows which app scripts run on a live page, including ones from apps you thought you had removed.
How to fix slow LCP
On Shopify, the LCP element is nearly always an image: the hero banner on the home page, the first product photo on product pages, or the first collection image. Shopify's own theme guidance gives the rules, and these are the steps I take in that order.
- Never lazy load the LCP image. Shopify's
image_tagfilter setsloading="lazy"automatically for images in sections further down the page, but custom sections and some older themes lazy load everything. Check the hero and the first product image forloading="lazy"and remove it. - Give it high priority. Add
fetchpriority="high"to the LCP image only, for example{{ image | image_url: width: 1600 | image_tag: loading: 'eager', fetchpriority: 'high', sizes: '100vw' }}. - Use an image element, not a background. A hero set as a CSS
background-imageis found late by the browser. Shopify recommends an<img>for hero content, and a<picture>element if you want different mobile and desktop images. - Serve the right size. Build images with
image_urlandimage_tagrather than hand-written CDN links.image_taggenerates asrcset, and Shopify's CDN picks a modern format such as WebP or AVIF for browsers that support it. Add an accuratesizesvalue so phones don't download the desktop width. - Clear the way. Remove or defer render-blocking app scripts in the head, and keep preloads to the one or two resources the browser finds late. Font preloads belong above
{{ content_for_header }}. - Cut server time. Heavy Liquid delays the first byte, and everything waits for it. Avoid nested loops over large collections, use
limitonforloops, and move metafield lookups out of loops.
How to fix poor INP
INP measures the delay between a tap and the next screen update. It fails when the main thread is busy running JavaScript at the moment the shopper taps "Add to cart", opens the menu or picks a variant. On Shopify the cause is usually the number of scripts, not one bad one.
- Audit every script. Shopify's guidance is blunt: remove app scripts, tracking pixels and theme code that aren't worth their cost. I list each script on the product page with what it does and who still uses it. Review widgets, chat, pop-ups and duplicate analytics tags are the usual finds.
- Defer what stays. Load non-critical scripts with
defer. Useasynconly for independent third-party scripts where order doesn't matter. - Load on interaction. Code for a size chart, a quick view or a reviews tab can load with a dynamic
import()when the shopper opens it, rather than on every page view. - Break up long tasks. Debounce and throttle event handlers such as scroll and resize, and yield to the browser in long-running code so a tap can be handled in between.
- Remove dormant test code. A/B testing tools often add an anti-flicker snippet that hides the page until the test script runs. Remove it when no test is running.
How to fix layout shift
CLS is the easiest of the three to fix once you can see what moves. Record the page loading on a phone, or use the layout shift regions in a lab test, and note every element that jumps.
- Images without dimensions.
image_tagaddswidthandheightattributes, so the browser reserves the space. Images added with a plain<img src>in custom code often don't, and push content down as they load. - App blocks that appear late. Reviews stars, payment messaging, upsell blocks and announcement bars often insert themselves after the page renders. Reserve space with a
min-heighton the container so the content below doesn't move. - Font swaps. When a web font replaces the fallback font, text can reflow. Shopify recommends
size-adjustand font metric overrides on the fallback, or system fonts, or self-hosting fonts on the Shopify CDN. - Animations. Animate with
transformandopacity, not properties that change the layout, such as height or top.
The targets that count, at the 75th percentile of real visits
- LCP2.5 sUsually the hero or first product image on Shopify.
- INP200 msUsually app and theme JavaScript.
- CLS0.1Usually late app blocks and images without dimensions.
Apps, themes and "speed" apps
Your theme sets the baseline. Themes in the Shopify Theme Store must average a Lighthouse performance score of at least 60 across the home, product and collection pages, so a current theme starts in reasonable shape. What happens after launch is what usually breaks the vitals: apps, tracking tags and custom sections.
Be wary of apps that promise a higher speed score. Shopify's own guidance warns against "fake performance apps" that game Lighthouse tests. A trick that changes a lab score does nothing for field data, and field data is what Search Console and Shopify's reports measure.
If you're weighing a theme change for speed, my comparison of Dawn and premium themes covers what you gain and lose.
Confirm the fix worked
- Retest in the lab straight after the change, to make sure the element you fixed behaves as expected.
- Watch Shopify's Over Time report for the metric and template over the following days. Allow for the delay of up to 36 hours.
- Start validation in Search Console. Open the issue in the Core Web Vitals report and click Start tracking. Google monitors the affected URLs for 28 days and marks the issue fixed only if none of them fail in that window.
Field data moves slowly because it's a rolling picture of real visits. Expect a few weeks before the change shows fully in Search Console.
Common mistakes
- Chasing the Lighthouse score. A lab score of 95 with failing field data is still failing. Fix what real shoppers experience.
- Lazy loading every image, including the one that defines LCP.
- Uninstalling an app and assuming its code went with it. Check the theme files and the live page for leftover snippets.
- Preloading too much. Preloading five fonts and three images makes them compete with the LCP image.
- Testing only the home page. Product and collection templates usually carry more traffic and more apps.
- Ignoring mobile. Desktop often passes while mobile fails, and Google assesses them separately.
Core Web Vitals checklist
- Store is public, so Shopify collects real user data.
- Mobile LCP, INP and CLS checked per page type in
Analytics > Reports. - LCP image is an
<img>, not lazy loaded, withfetchpriority="high"and an accuratesizes. - All images built with
image_urlandimage_tag. - Every app script on product pages has an owner and a reason, and the rest are removed.
- Remaining scripts use
deferor load on interaction. - App blocks and banners have reserved space.
- Fallback fonts adjusted, or system fonts used.
- No anti-flicker snippet without a live test.
- Search Console validation started after each fix.
What to do next
Start with Shopify's Page Type report on mobile, pick the worst template and the worst metric, and work through the matching section above. One template fix usually moves a whole URL group in Search Console.
If you'd rather hand it over, my Shopify speed optimization work starts from $100 and is measured against Shopify's field data, not a lab score. Or send me your store for a free review and I'll tell you which metric is failing and why.
Free tools
Check your own store
Free, no sign-up. Each one runs a part of this guide for you.
Frequently asked questions
Where can I see Core Web Vitals in Shopify?
Go to Online Store, then Themes, for a 30-day summary of LCP, INP and CLS from real shoppers. For full reports by page type, device and date, go to Analytics, then Reports, and search for the metric. The store must be public for Shopify to collect this data.
Why do Shopify and Search Console show different numbers?
They use different data sets. Shopify measures real visits to your store itself, while Search Console uses the Chrome UX Report and groups similar URLs together. Shopify data can also be delayed by up to 36 hours, and Search Console needs a minimum amount of traffic before it shows a URL group.
Do Core Web Vitals affect Shopify SEO?
Google says Core Web Vitals are used by its ranking systems. It also says it always tries to show the most relevant content, even when page experience is weaker, and that good scores do not guarantee a top position. Treat them as a factor that helps when competing pages are equally useful.
What is a good LCP for a Shopify store?
Google counts 2.5 seconds or less as good, measured at the 75th percentile of real visits, and over 4 seconds as poor. On Shopify the LCP element is usually the hero image or the first product photo, so that image is where to start.
Will a speed app fix my Core Web Vitals?
Rarely. Shopify warns against apps that game Lighthouse tests, because lab scores are not what Google uses. Removing scripts, sizing images properly and reserving space for app content changes what real shoppers experience, and that is what field data measures.
How long until Search Console shows the improvement?
Field data is a rolling picture of real visits, so it changes over weeks, not hours. When you start validation in Search Console, Google tracks the affected URLs for 28 days before marking the issue fixed.
Sources
- Understanding Core Web Vitals and Google search results, Google Search Central
- Understanding page experience in Google Search results, Google Search Central
- Core Web Vitals report, Google Search Console Help
- Web performance dashboard, Shopify Help Center
- Performance best practices for Shopify themes, Shopify.dev
- image_tag filter, Shopify.dev
Related services and work

Written by Ashraf Siddik
I'm a Shopify developer and CRO specialist. I have built and improved Shopify stores since 2018, completed more than 1,000 projects, and hold a 4.96 average rating across 719 client reviews.
More guides
-
SEO8 min readUpdated
How to Speed Up Your Shopify Store
Most slow Shopify stores are slowed by what was added to them, not by Shopify itself. This tutorial shows how to measure, find the worst offender and fix it, in the order I work.
Read the guide -
SEO8 min readUpdated
How to Fix Common Shopify SEO Problems
Most Shopify SEO issues come from how a store was set up, not from the platform, and a few aren't problems at all. Here is how to find the real ones and fix each in your admin.
Read the guide -
SEO8 min readUpdated
Shopify Keyword Research: A Step-by-Step Guide
Good keyword research on Shopify is about matching each search to the right kind of page. Here is the process I use, from free data you already have to the exact fields to update.
Read the guide -
SEO9 min readUpdated
How to Start a Shopify Blog That Drives Sales
A Shopify blog sells when it answers what buyers ask before they purchase and points them to the right product. Here is how to set one up, what to write and how to publish posts that rank.
Read the guide
