Reference: the 8 most common LCP killers — ranked by observed frequency

Ranked by observed frequency in the field (HTTP Archive 2025 + practitioner consensus):

  1. Hero image not preloaded and not given fetchpriority="high". Single largest cause. Google's own test on Google Flights: a single fetchpriority="high" moved LCP from 2.6s to 1.9s.
  2. Lazy-loading the LCP image (loading="lazy" on the above-fold hero). Common WP default since 5.5; the CMS now excludes the first 3 images, but custom themes routinely undo this.
  3. Slow TTFB — shared hosting with 800ms–1.5s server response; uncached dynamic queries; missing CDN.
  4. Render-blocking CSS — Elementor stylesheets, theme.css from heavy themes.
  5. LCP image hidden from preload scanner (via data-src, JS lazy-load libraries, CSS background-image). Web Almanac 2025: 7% of sites still do this.
  6. Unoptimised image format — JPEG/PNG instead of WebP/AVIF. WebP is 25-34% smaller than JPEG at equivalent SSIM (Google WebP Compression Study: WebP is 25-34% smaller than JPEG at equivalent SSIM (avg ~30%)).
  7. Wrong-resolution images — no srcset/sizes, serving 4000px desktop heroes to mobile.
  8. Third-party scripts blocking the main document while the LCP image waits in queue.

Remediation pattern: Inline critical CSS → preload + fetchpriority="high" the hero → modern image formats → srcset/sizes → move TTFB-heavy work to edge / SSG / cache. See RULE: The LCP image always has explicit width/height + fetchpriority="high" + no lazy-loading.