EN UA RU
Home Blog Performance
Performance

Core Web Vitals for E-Commerce: The Metrics That Move Revenue

A
Flexor Engineering
February 28, 2025
6 min read

Most teams treat Core Web Vitals as an SEO checkbox. We don't. On commerce sites, LCP, CLS, and INP are directly tied to whether people buy. Slow load, layout jumping, laggy filters — users leave. Here's where the real problems come from and how we've fixed them.

PageSpeed Insights · Magento 2 Store · Before Optimization SCORE 28 POOR LCP Largest Contentful Paint 6.2s POOR CLS Cumulative Layout Shift 0.38 POOR INP Interaction to Next Paint 280ms NI FIELD DATA · 75TH PERCENTILE · MOBILE

A PageSpeed Insights report on a Magento 2 store before optimization. LCP at 6.2s, CLS at 0.38 — both well outside the "Good" threshold.

The three metrics and why they matter in commerce

LCP — Largest Contentful Paint

LCP measures how long it takes for the largest visible element to render. On a product page, that's usually the hero image. On a homepage, it's often a full-width banner.

Google's "Good" threshold is under 2.5 seconds. Most out-of-the-box Magento installs score 4–7 seconds without any optimization work. The real-world pattern we keep seeing: shave a second off mobile LCP, and conversion rate nudges up. The exact number varies by store and category, but the direction is consistent enough that we treat it as reliable.

The usual culprits: unoptimized images (wrong format, missing fetchpriority="high" on the hero), render-blocking JS loaded in <head>, and TTFB issues from FPC cache misses. Almost always one of those three.

CLS — Cumulative Layout Shift

CLS is about elements jumping as the page loads. The classic offender on commerce sites: an add-to-cart button that shifts down when a promo badge or price renders asynchronously after the initial paint.

Above 0.1 and you're in "Needs Improvement" territory. On mobile, a shifting button causes accidental taps and rage taps. It's one of those UX failures that doesn't show up obviously in session recordings, but you feel it in the numbers.

The fix is usually explicit width and height attributes on images, reserved space for dynamic content (promotions, reviews), and avoiding injecting content above existing DOM elements.

INP — Interaction to Next Paint

INP replaced FID in March 2024. The difference matters: FID only measured the first interaction; INP captures the worst latency across all interactions. So a filter panel that's slow every time you tap a facet will show up here, even if the page initially felt fast.

Above 200ms and users notice. On PLPs with JS-driven filters, the root cause is almost always synchronous DOM manipulation on every state change — the whole filter tree re-rendering when you check a single box. Breaking that work into smaller chunks (or deferring non-visible parts) usually fixes it.

BEFORE LCP 6.2s CLS 0.38 INP 280ms OPTIMIZED AFTER LCP 1.9s CLS 0.04 INP 140ms IMAGE OPT · FPC WARMUP · LAYOUT SHIFT FIXES · SCRIPT DEFER

After implementing image optimization, FPC warming, and layout shift fixes: LCP dropped from 6.2s to 1.9s, CLS from 0.38 to 0.04.

Practical fixes, prioritized

Not all optimizations have equal return. In order of impact for most Magento/Shopify stores:

  1. Image optimization. Convert to WebP or AVIF. Set explicit dimensions on everything. Add fetchpriority="high" to the LCP image and loading="lazy" to everything below the fold. This single change has moved LCP from 5s to under 2.5s on several stores we've worked on.
  2. Full Page Cache and CDN configuration. Make sure FPC hit rates are above 95% on cacheable pages. Put Varnish or Fastly in front of the origin. TTFB under 200ms makes everything downstream faster.
  3. Critical CSS inlining. Above-the-fold styles should be inlined in <head>, not loaded from a blocking stylesheet. This removes a render-blocking request entirely.
  4. Third-party script audit. Commerce sites routinely load 15–25 third-party scripts — chat widgets, tag managers, review tools, retargeting pixels. Audit what's actually needed at page load vs what can wait until first interaction. Deferring the non-critical ones can recover 0.5–1.5s, sometimes more depending on how badly they're blocking.
  5. Layout shift reserves. Set explicit aspect ratios on all images and banner slots. Avoid injecting promo content without reserved space.

Measuring what matters

Lab data — Lighthouse, PageSpeed Insights — is useful for catching regressions in CI. But it doesn't reflect what your actual users experience. Device mix, network conditions, CDN routing: none of that is captured in a lab run from a single location.

Set up Real User Monitoring and look at CrUX data (Chrome UX Report) to track 75th-percentile LCP across your real traffic. That 75th-percentile number is what Google uses for ranking signals. It means 1 in 4 of your users would need to have a "Good" experience for the site to score well — not the median, not the best case.

The business case

Pinning a number on performance improvements requires A/B testing in your specific context — general benchmarks don't account for your user base and product category. But the directional case is consistent: for a site doing €50K/month in revenue, moving LCP from 5s to 2s on mobile typically recovers 3–6% of that. The engineering effort — usually 3–4 weeks of focused work — pays back within the first month.

Share Post on X LinkedIn
Back to Blog

Next step

Working on a complex commerce system?

We help engineering teams design, build, and scale high-load platforms — with a clear process and predictable delivery.

Let's talk