Core Web Vitals for ecommerce, minus the plugin snake oil
Every week a store owner sends us a screenshot of their PageSpeed Insights score after installing a “speed optimization” plugin. The score is 92. The LCP is 4.1 seconds. These two things are not contradictory, and the plugin is responsible for both.
What PageSpeed score actually measures
The Lighthouse score is a weighted composite of several metrics. “Opportunities” like unused JavaScript and render-blocking resources score points when you eliminate them. But you can score well on those and still have a slow LCP if your largest contentful element — typically a hero image or product image — loads slowly.
Speed plugins are good at the low-hanging fruit: minification, combining scripts, lazy loading. They’re not good at the things that actually move Core Web Vitals, which require real engineering decisions.
What actually moves LCP on ecommerce
Preloading the hero image
Add a <link rel=”preload”> for the above-the-fold hero image in the <head>. This is the single highest-impact change on most stores and takes 15 minutes to implement correctly. The image stops waiting in queue and loads as a priority resource.
Image format and sizing
Serving a 2000px JPEG for a 400px display slot, scaled down by the browser, is still common. WebP with correct srcset attributes and proper dimension constraints. Every product image, every hero image. Not a plugin job — a theme-level decision about how images are output.
Server response time
TTFB (time to first byte) above 600ms makes LCP almost impossible to get under 2.5s. Common causes on WooCommerce: uncached database queries (no object cache), PHP running on shared resources, or WooCommerce doing unnecessary work on every page load. Redis object cache + server-level page caching on non-cart pages moves this significantly.
What moves INP
Interaction to Next Paint is where speed plugins are least useful. High INP is almost always caused by long JavaScript tasks blocking the main thread. On ecommerce sites: chat widgets, analytics libraries, and marketing tags loaded synchronously. Deferred loading of third-party scripts, and code-splitting on custom JS, are the fixes. No plugin does this properly.
The benchmark we aim for
LCP under 2.5s on mobile, INP under 200ms, CLS under 0.1. These are Google’s “Good” thresholds and the point at which Core Web Vitals stop being a ranking drag. Most stores are in the “Needs Improvement” band on LCP — meaning they’re losing rankings to competitors who have done this work.