A 10-second LCP is a ranking decision you're making by accident
Technical SEO

A 10-second LCP is a ranking decision you're making by accident

A 10s LCP and CLS in the Poor band aren't just UX, they're a ranking signal and a conversion tax. Where the bloat really comes from (hint: not the images).

A 10-second Largest Contentful Paint isn’t only a user-experience problem, it’s a ranking input and a conversion tax you pay on every commercial page. And on most ecommerce sites the weight isn’t the product images. It’s roughly 5 MB of third-party tags and 2.6 MB of JavaScript blocking the render. That’s a decision you’re making by accident, and it’s fixable.

I’ve watched this exact pattern on an enterprise ecommerce site: category pages averaging near a 10-second LCP, with cumulative layout shift sitting in the 0.3 to 0.5 range, deep in Google’s “Poor” band on both. Everyone assumed it was the imagery. It wasn’t.

The number, and what it actually costs

Start with the LCP itself: about 10 seconds on the pages that matter most commercially, the product listing pages where people decide whether to keep shopping. That number does two kinds of damage at once, and teams usually only account for one of them.

The first is ranking. Core Web Vitals are a confirmed page-experience signal. A page that paints in ten seconds isn’t going to be rewarded for it, and where results are otherwise close, the slow one loses the tiebreak. There’s a second-order effect too: Google throttles crawl rate on slow servers, so a sluggish site gets crawled less often and updated in the index more slowly, the speed problem quietly becomes a freshness problem.

The second is conversion, and it’s the bigger line item. Every second of load time on a commercial page sheds buyers who won’t wait. A 10-second paint on a PLP isn’t a UX nitpick; it’s revenue leaving before the page is usable. Whatever you believe about the exact ranking weight, the conversion math alone justifies the fix, which is why speed is one of the few technical changes that pays back on traffic and revenue at the same time.

Where the bloat actually is

Here’s the counterintuitive part, and the reason most speed projects start in the wrong place. When a page is slow, the reflex is to blame the images, compress the hero, lazy-load the grid, convert to WebP, and call it done. On this site, the images were already fine. The weight was somewhere else entirely.

The render was being blocked by about 2.6 MB of JavaScript and a roughly 5.3 MB third-party payload, analytics, tag managers, personalization scripts, chat widgets, A/B testing tools, ad pixels. Each one added by a different team, for a defensible reason, none of them individually alarming, all of them together burying the page. There were 9 to 10 seconds of render-blocking savings available per page, meaning the browser was spending nearly the entire load doing work that could be deferred or removed before it ever painted the content a shopper came to see. The DOM had ballooned to around 3,800 nodes, making every layout and paint pass more expensive on top of that.

That’s the accidental decision. Nobody chose a 10-second LCP. A dozen small “just add this one tag” calls, made over years by people who never saw the cumulative bill, chose it for them. The images were a distraction from a third-party-script problem.

How much Core Web Vitals really weighs, honestly

It’s worth being straight about this, because overselling it is how these projects lose credibility. Core Web Vitals are not a dominant ranking factor. They behave like a threshold and a tiebreaker: clear the bar and it mostly stops mattering; fall well below it and it can hold you back, especially against comparable competitors. If someone promises you a page-one jump from a green score alone, be skeptical.

So why do the work? Because the ranking signal is the smaller half of the return. The conversion recovery is real and immediate, and it lands regardless of what Google does with the signal. Frame the project honestly, “a modest ranking benefit plus a direct conversion lift”, and it survives scrutiny. Frame it as a ranking silver bullet and the first person who checks will kill it.

The CLS problem is a trust problem

The layout shift deserves its own mention, because it hurts in a way the load-time number doesn’t capture. A CLS of 0.3 to 0.5 means the page visibly jumps as it loads, an image pops in, an ad slot expands, a font swaps, and everything below lurches down. On a product listing page, that’s the moment a shopper goes to tap a product and the page shoves a different one under their finger.

That’s not just a metric in the Poor band. It’s an erosion of trust at the exact instant you need the shopper to feel in control. People don’t articulate “the cumulative layout shift was 0.4”; they feel a site that seems janky and cheap, and they extend that feeling to the products. Stability is part of how a page earns the sale.

Fix it in priority order

The sequence matters as much as the fixes, because the leverage is wildly uneven. Work the biggest, cheapest wins first.

Start with the third-party tags. Audit every one, and for each ask what it’s actually worth and whether it needs to load before paint. Remove the dead ones, defer the rest, and consolidate where two tools do one job. This is almost always the single largest recovery and the least risky, because you’re deleting weight, not rewriting code.

Then the first-party JavaScript: cut what you can, defer and code-split the rest so the browser isn’t parsing 2.6 MB before it renders anything. Kill the render-blocking scripts specifically, that’s where the 9 to 10 seconds of savings live. Only after that does the image strategy earn attention, and by then it’s cleanup, not the main event. Finally, trim the DOM: a leaner tree makes every subsequent paint cheaper and compounds the gains above. Rendering matters here for the same reason it does for AI crawlers reading a JavaScript-heavy page, the more work you demand before content appears, the more you lose.

Measure it so you don’t fool yourself

One last discipline, because it’s where speed projects quietly go wrong. Judge yourself on field data, CrUX, what real users on real devices actually experienced, because that’s what Google uses and what your customers live. Lab data from Lighthouse is for diagnosis: repeatable, controlled, and great for telling you what to fix, but a green lab score on a fast office connection is not proof that anything improved for a shopper on mid-tier phone hardware and a spotty connection. Fix in the lab, verify in the field, and watch the field numbers move before you declare victory.

None of this is exotic. It’s server-side discipline about what you allow onto a page, applied to the layer everyone assumes is someone else’s job. The 10-second LCP wasn’t a fact of life. It was a series of small yeses nobody added up.

So the question worth taking to your next tag request: what would your LCP be if every third-party script had to justify its weight before it was allowed to load before paint?

Frequently asked questions

Why is my LCP so high if my images are already optimized?

Because on most ecommerce sites the images aren’t the bottleneck, the scripts are. A slow Largest Contentful Paint usually traces to a few megabytes of JavaScript plus a much larger pile of third-party tags (analytics, personalization, chat, ad pixels) that block the browser from rendering. You can ship perfectly compressed hero images and still paint in ten seconds if render-blocking scripts run first.

Does Core Web Vitals actually affect rankings?

Yes, but honestly: it’s a threshold and a tiebreaker, not a top-three ranking factor. Google uses page experience as a real signal, strongest when it separates otherwise-comparable results, and a genuinely poor score can hold a page back. The bigger reason to fix it is the conversion side, speed and stability move revenue directly, whatever the exact ranking weight.

What's the fastest LCP win on an ecommerce site?

Audit the third-party tags and defer or remove the ones that aren’t earning their weight. On real sites this is where the megabytes hide, and cutting render-blocking third-party scripts often recovers most of the load time in a single change, far more than re-compressing images that were already fine.

Should I trust field data or lab data for Core Web Vitals?

Field data (CrUX, what real users actually experienced) is what Google uses and what you should judge yourself on. Lab data (Lighthouse and similar) is for diagnosis: it’s repeatable and shows you what to fix, but a fast lab score on your office connection doesn’t mean real users on real devices are having the same experience.

Disagree with any of this? That's the useful conversation. LinkedIn  ·  Email  ·  More writing