ShipworkSite inspection
Checks
Every error, explainedGuides →
Pricing Learn Guides

Core Web Vitals on Shopify: what real users experience

Lighthouse in your DevTools tells you what one synthetic run scored. Google ranks you on something else: the 75th percentile of what real Chrome users experienced over the last 28 days, from the Chrome UX Report. The two disagree constantly — a lab run on your fast office connection says 1.8s LCP while your field data sits at 4.1s. Here is what the field metrics mean, which one usually fails on a store, and the fixes that actually move the ranking signal.

The three metrics, in ranking terms

LCP (Largest Contentful Paint) — how long until the main content appears. For a store this is almost always the hero image or the featured product image. Google's threshold: 2.5 seconds at the 75th percentile. CLS (Cumulative Layout Shift) — how much the page jumps while loading. Banners inserting above content, images without dimensions, late-loading apps. Threshold: 0.1. INP (Interaction to Next Paint) — how long until the page responds to a tap or click. Heavy third-party scripts (chat widgets, upsell apps, analytics) are the usual cause. Threshold: 200ms. All three are assessed at the p75 of real visits, so your worst quarter of users defines your score.

MetricGood (p75)Usual store cause
LCP≤ 2.5sUncompressed hero image, slow theme, no CDN on media
CLS≤ 0.1Images without width/height, apps injecting banners
INP≤ 200msChat widgets, upsell apps, tag managers

Why lab and field data disagree

Your Lighthouse run happens on one device, one network, one cache state. Field data averages every real visit — the iPhone on cellular mid-scroll counts as much as your desktop on fibre. That is why a "100 Lighthouse score" page can still fail in the field: Lighthouse does not measure INP at all in its default scoring, throttles differently than real devices, and sees a cold cache you have long since warmed. When the two disagree, the field data is the one Google reads. This is also why the check below queries CrUX rather than rendering a page: it returns the ranking signal, not a proxy for it.

Which metric fails first on stores

Almost always LCP, and the cause is predictable: the hero banner. A 2 MB homepage image served at full desktop width to a phone on 4G is a 4-second LCP before anything else runs. CLS is second, usually from apps that inject announcement bars and upsell pop-ups after first paint, shoving content down while the user reads. INP joined the ranking set in 2024 and is where heavy app stacks now fail — the page paints fine, then a chat widget and three analytics tools queue their work on every tap.

Check the field data before fixing anything

Optimising the wrong metric is the most common performance mistake. Read the p75 numbers first — the check takes seconds and tells you which of the three is failing and by how much.

Fixes that move field data

  1. Image dimensions and formats. Width and height attributes on every image kill most CLS. Converting the hero to an appropriately sized modern format is usually the single biggest LCP win.
  2. Fewer apps, checked monthly. Every Shopify app injects scripts. Removing two unused apps frequently fixes INP outright — audit your installed list against what you actually use.
  3. Lazy-load below the fold, never the hero. Lazy-loading the LCP image delays it. Load the hero eagerly and preload it; lazy-load everything beneath.
  4. Re-check the field data after a week. CrUX rolls on a 28-day window, so a fix today shows in the numbers next week — and only then, because lab improvements do not move the ranking signal.

Related: image weight check · what crawlers see without JavaScript · landing-page requirements

Find out if this is happening to you

Shipwork reads your origin's real-user Core Web Vitals from Google's Chrome UX Report — the p75 LCP, CLS and INP Google actually uses — and names the failing metric and how far off it is. Free, no account, no signup — paste your store address.

Check my vitals

Questions

What are good Core Web Vitals numbers?
At the 75th percentile of real users: LCP under 2.5 seconds, CLS under 0.1, INP under 200 milliseconds. Meeting all three at p75 is what Google treats as a good experience.
Why does my Lighthouse score look fine but field data fails?
Lighthouse is one synthetic run on your device and network; field data is 28 days of real users, including phones on slow connections. Google ranks on the field data.
Why does the check say no data for my site?
Google only publishes CrUX metrics for origins with sufficient real traffic. New and low-traffic sites have no field data yet — the check says so rather than showing a guess.
Do Core Web Vitals affect Google Shopping listings?
Indirectly: a slow landing page gets crawled less and converts worse, and landing-page quality is part of Merchant Center assessment. Vitals are a ranking signal for search; the feed rules are separate.

Keep reading