How do I improve my website's Core Web Vitals?

Core Web Vitals measure user experience speed, responsiveness and visual stability. The three core metrics are:

  • Largest Contentful Paint (LCP): how long the main content takes to render.
  • First Input Delay (FID) or Interaction to Next Paint (INP): responsiveness to user input.
  • Cumulative Layout Shift (CLS): unexpected layout movement.

Below are practical steps to improve each, plus general performance practices and how to measure progress.

  1. Measure first (don’t guess)
  • Use field and lab tools: Google PageSpeed Insights (uses CrUX for field data), Chrome UX Report, Web Vitals extension, Lighthouse, and Real User Monitoring (RUM) if you have traffic.
  • Record metrics per page type (home, product, article) and by device/connection class. Focus work on pages and devices where users suffer most.
  1. Improve LCP (loading the largest visible element quickly) Common LCP elements: hero image, large text block, video poster, major banner. Actions:
  • Reduce server response time: use fast hosting, optimize backend, enable caching, and use CDN closest to users.
  • Use efficient caching and HTTP/2 or HTTP/3. Prefer cache-control, preconnect for critical origins.
  • Optimize resource delivery:
    • Serve critical CSS inline for above-the-fold content; defer noncritical CSS.
    • Minify and compress CSS/JS/HTML (gzip/ Brotli).
    • Use preloading for the LCP asset: <link rel="preload" as="image" href="..."> or preload important fonts.
  • Optimize images and media:
    • Serve properly sized responsive images (srcset, sizes).
    • Use modern formats (WebP, AVIF) with fallbacks.
    • Use lazy-loading for images below the fold (loading="lazy").
    • Compress images and use efficient encoding settings.
  • Avoid render-blocking scripts: move nonessential scripts to async/defer or load them after first render.
  • Optimize fonts:
    • Use font-display: swap or optional to avoid blocking text rendering.
    • Limit number of web fonts and weights; preload the critical font.
  1. Improve FID / INP (responsiveness) FID measures input delay from first user interaction, INP is a newer more holistic metric. Actions:
  • Break up long tasks: split heavy JavaScript into smaller chunks so the main thread can respond quickly.
  • Use code-splitting and dynamic import to avoid loading unnecessary JS upfront.
  • Defer or async noncritical JS and third-party scripts. Move nonessential scripts to after load.
  • Use web workers for expensive computations to keep main thread free.
  • Optimize event handlers: avoid heavy work directly in handlers; schedule work with requestIdleCallback or setTimeout.
  • Reduce time-to-interactive by minimizing JS execution time and script parsing (use smaller bundles).
  • Monitor and limit long tasks (Chrome DevTools Performance shows long tasks >50ms).
  1. Improve CLS (visual stability) CLS is impacted by layout shifts when resources or content change size. Actions:
  • Always include dimensions for images and media (width and height attributes or CSS aspect-ratio) so the browser can reserve space.
  • Reserve space for ads, embeds, and iframes with CSS boxes; avoid injecting dynamic content above existing content.
  • Avoid inserting content above existing content unless in response to user interaction.
  • Use transform animations instead of properties that trigger layout (avoid animating width/height/top/left).
  • Avoid flash of unstyled content (FOUC) by managing font loading strategies and reserving fallback heights if required.
  1. Optimize third-party scripts
  • Audit third-party tags (analytics, chat, ads). Each can add blocking time, network cost, layout shifts.
  • Load them asynchronously, defer, or sandbox in iframes when possible.
  • Consider server-side alternatives or reducing frequency of measurement beacons.
  1. General best practices
  • Use a CDN for static assets and to reduce geographic latency.
  • Enable compression (gzip/Brotli) and set proper cache policies.
  • Use HTTP/2 or HTTP/3 to make many small requests cheaper.
  • Reduce number of requests: combine, inline critical resources, remove unused CSS/JS.
  • Use efficient caching and cache-busting strategies for updated assets.
  • Implement incremental rendering: show skeletons or placeholders so users perceive faster load.
  • Monitor performance over time with RUM and synthetic tests; prioritize high-impact fixes.
  1. Prioritize fixes by impact and effort
  • Low effort / high impact: compress images, serve scaled images, set width/height, add preload for critical assets, enable compression and caching.
  • Higher effort / high impact: split and reduce JS, move heavy work to web workers, restructure templates to reduce above-the-fold weight.
  1. How to test changes
  • Use Lighthouse (in Chrome DevTools) for lab testing and suggested diagnostics.
  • Use PageSpeed Insights for field/aggregate and lab data.
  • Track real-user metrics via Google Analytics, the Web Vitals JS library, or your RUM provider to confirm improvements for actual users.

If you want, tell me:

  • one URL (or page type) to focus on and whether mobile or desktop is priority, and I’ll give a prioritized checklist with specific recommendations for that page.

Have your own question?

Ask the AI now

Free · no account needed · answer in seconds