Skip to content

How to Improve Site LCP

Key idea:

LCP (Largest Contentful Paint) — when the main visible element (usually hero image or H1+paragraph) paints. "Good" threshold ≤ 2.5s. Typical LCP killers: heavy hero images without preload, render-blocking CSS/JS, slow origin TTFB. Fixes: preload hero, inline critical CSS, defer non-critical JS, image srcset, Cloudflare cache.

Below: step-by-step, working examples, common pitfalls, FAQ.

Step-by-Step Setup

  1. Identify the LCP element: DevTools → Performance → record → "Largest Contentful Paint" section
  2. Preload hero image: <link rel="preload" as="image" href="/hero.webp" fetchpriority="high">
  3. Trim images <= 100KB: cwebp -q 80 hero.jpg -o hero.webp
  4. Inline critical CSS in <head> (or via Next.js inline-stylesheets)
  5. Defer non-critical JS: <script defer src="...">
  6. Lower TTFB: CDN (Cloudflare/Fastly), origin RPC time
  7. Verify via Enterno Speed — LCP field data (CrUX) + lab

Working Examples

ScenarioConfig
Preload hero<link rel="preload" as="image" href="/hero-desktop.webp" media="(min-width: 1024px)" fetchpriority="high">
Responsive srcset<img src="hero.webp" srcset="hero-sm.webp 640w, hero-md.webp 1024w, hero-lg.webp 1920w" sizes="100vw" fetchpriority="high">
Critical CSS in head<style> /* Above-fold styles — 14KB max */ body { margin: 0; font-family: system-ui; } .hero { min-height: 50vh; ... } </style>
Defer analytics<script defer src="https://analytics.example.com/tag.js"></script>
nginx Cache-Control immutablelocation ~* \.(webp|jpg|css)$ { add_header Cache-Control "public, max-age=31536000, immutable"; }

Common Pitfalls

  • Preloading more than 1-2 resources — congestion hurts LCP
  • Lazy-loading the hero image (loading="lazy") — browser waits on intersection observer → slow
  • Hero as CSS background — browser can't preload (not in DOM)
  • Font from Google Fonts without font-display: swap — FOIT blocks text LCP
  • TTFB > 600ms — no optimisation can make LCP < 2.5s
PerformanceOverall speed score 0-100
Core Web VitalsLCP, FID, CLS — Google metrics
Page SizeSize of HTML, CSS, JS, images
RecommendationsSpecific tips for improvement

Why teams trust us

Lighthouse
analysis engine
CWV
Core Web Vitals
4
Lighthouse categories
Precise
recommendations

How it works

1

Enter page URL

2

Lighthouse analyzes

3

Get CWV scores & tips

Why Does Site Speed Matter?

Page load speed directly impacts conversion, SEO rankings, and user satisfaction. Google uses Core Web Vitals as a ranking factor. Every extra second of load time cancost up to 7% in conversions.

Lighthouse Analysis

Google Lighthouse-based analysis: Performance, Accessibility, Best Practices, SEO.

Core Web Vitals

LCP (rendering), FID (interactivity), CLS (visual stability) — key Google metrics.

Resource Analysis

Breakdown by type: HTML, CSS, JavaScript, images, fonts. Size, request count, blocking resources.

Actionable Advice

Specific recommendations with savings estimates: image compression, caching, minification, etc.

Mobile vs Desktop

Mobile
  • Tested on Moto G Power emulation (slow CPU)
  • Network: 4G (1.6 Mbps, 150ms RTT)
  • Stricter speed scoring
  • Google indexes mobile-first
  • Priority for SEO optimization
Desktop
  • High CPU performance
  • Fast connection without throttling
  • Scores typically 20-40 points higher
  • Important for B2B and corporate sites
  • Use for baseline comparisons

Who uses this

SEO

Core Web Vitals for rankings

Developers

performance optimization

Marketers

speed = conversions

DevOps

performance regression

Common Mistakes

Unoptimized imagesImages can be up to 70% of page weight. Use WebP/AVIF and lazy loading.
Render-blocking JS in &lt;head&gt;Scripts without async/defer block rendering. Move to end or add attribute.
No static asset cachingWithout Cache-Control, the browser reloads CSS/JS on every visit.
Too many HTTP requestsEach request adds latency. Bundle files, use sprites, or inline critical CSS.
Missing compression (gzip/brotli)Compression reduces text resource size by 60-80%. Enable brotli on the server.

Best Practices

Optimize imagesWebP for photos, SVG for icons. loading="lazy" for images below the fold.
Enable brotli compressionBrotli is 15-20% more efficient than gzip. Configure in nginx: brotli on;
Set up cachingStatic: Cache-Control: max-age=31536000, immutable. HTML: max-age=0, s-maxage=60.
Preload critical resources<link rel="preload"> for fonts and CSS. Reduces LCP by 200-500ms.
Test regularlySpeed degrades over time. Check after each deploy and monthly.

Get more with a free account

Speed check history, competitor comparison and PageSpeed monitoring.

Sign up free

Learn more

Frequently Asked Questions

What is usually the LCP element?

Stats: hero image (55%), H1+intro paragraph (30%), hero video (10%), other (5%). Identify via DevTools.

Why is mobile LCP 2× worse than desktop?

Slow mobile networks (LTE-4G), weaker CPU (JS parse), smaller batch sizes. Fix: mobile-first + responsive images + lazy non-critical.

INP vs LCP — which matters more?

Both are Core Web Vitals. LCP — render, INP — responsiveness. Google factors both into ranking.

How to test LCP?

<a href="/en/speed">Enterno Speed</a> shows field data from CrUX (real users) + lab data. Plus <a href="/en/s/research-core-web-vitals-runet-2026">our CWV benchmark</a>.