LCP regressions on marketing sites almost always trace back to the same handful of causes, in roughly this order of impact.

1. The hero image itself

Serve a correctly sized, modern-format (WebP/AVIF) hero image, set explicit width/height to reserve layout space, and mark it loading="eager" with fetchpriority="high" — it's almost always your LCP element, so don't lazy-load it.

2. Web fonts blocking render

Preconnect to your font host, and prefer font-display: swap so text renders in a fallback font rather than staying invisible while the web font downloads.

3. Render-blocking third-party scripts

Tag managers and analytics scripts should load async and, where possible, be deferred until after the main thread is free rather than blocking initial render.

4. Unbounded layout shifts

Every image, embed and ad slot needs a reserved size before content loads, or your CLS score erodes even if LCP looks fine in isolation.

Measuring it correctly

Lab tools (Lighthouse) and field data (Core Web Vitals report, real user monitoring) frequently disagree — trust field data for prioritization, since it reflects your actual visitor conditions, not a single simulated run.

Our Web Application Development team runs this checklist on every site rebuild.