TL;DR
- LCP (Largest Contentful Paint) is about how quickly the most important content appears. Aim for ≤ 2.5 seconds at the 75th percentile.
- CLS (Cumulative Layout Shift) captures visual stability. Keep it ≤ 0.1 so the page doesn’t jump while loading.
- TBT (Total Blocking Time) is a lab metric that reveals how much JavaScript blocks the main thread. Reducing it typically improves interactivity.
- Focus on fast first paint, little JavaScript, predictable layouts and edge caching. Minute improvements compound into real results.
Core Web Vitals in plain English
Core Web Vitals are a small set of user‑centred performance measures that describe how a web page feels to load and use. Instead of obsessing over abstract scores, they ask three simple questions: Does the main content appear quickly? Does the page stay still as it loads? Does it respond when I tap and type?
For most marketing websites, the path to better Web Vitals is refreshingly straightforward: keep pages lightweight, limit JavaScript, specify image sizes, and cache from the edge. You don’t need a complicated stack to deliver a fast, pleasant experience—especially if your site is static.
LCP: make the main content appear quickly
Largest Contentful Paint measures how long it takes for the most meaningful element to appear—often your hero image, video poster or headline. Improving LCP means removing the blockers that stop that element rendering.
How to improve LCP
- Optimise the hero image: export as AVIF (with WebP fallback), provide responsive sizes, and avoid oversised files. If the hero is text, prefer live HTML/CSS over text baked into an image.
- Inline critical CSS, defer the rest: ship only the styles required for the first render, then load the remainder asynchronously.
- Defer or async non‑critical scripts: anything not needed for the first paint should load later. Every synchronous script can block rendering.
- Use a fast CDN and caching: serve pages and assets from the edge with long‑lived, immutable cache headers.
- Reduce server time to first byte (TTFB): keep your HTML tiny, enable compression, and avoid server‑side logic on first request.
- Preload the LCP resource when appropriate: if the hero image is definitely the LCP, explicitly preload it so the browser fetches it earlier.
CLS: stop the page from “jumping”
Cumulative Layout Shift is a measure of visual stability. If elements move while the page loads—text shifts, buttons jump—people mis‑tap and lose trust. The fix is to make sure every block knows how much space it needs before the browser starts painting.
How to improve CLS
- Always set width and height (or aspect‑ratio) on images and video: this reserves space so the layout doesn’t move when media arrives.
- Reserve slots for dynamic content: if you inject banners, forms or consent messages, allocate space for them in the initial layout.
- Stabilise fonts: use
font-display: swapor a high‑quality system font stack; preload critical fonts to reduce flashes of invisible text. - Avoid layout‑thrashing animations: animate with
transformandopacity, not properties that trigger reflow, and keep motion subtle. - Prevent late‑loading UI shifts: avoid inserting content above what the user is reading; append new elements below or overlay them without pushing content down.
TBT: reduce main‑thread blockage in the lab
Total Blocking Time is measured in Lighthouse and similar tools. It sums the periods when the main thread is too busy to respond to input, typically because large chunks of JavaScript are executing. While TBT isn’t shown to real users, improving it nearly always makes the site feel snappier and helps your interactivity metrics.
How to improve TBT
- Send less JavaScript: remove unused libraries, split bundles by route, and prefer progressive enhancement over monolithic frameworks.
- Defer non‑essential scripts: run analytics, A/B testing or chat widgets after first interaction or once the main content has rendered.
- Break up long tasks: yield to the main thread, schedule work with
requestIdleCallbackwhere appropriate, or move heavy work to Web Workers. - Audit third‑party tags: every extra tag can block the main thread; keep a tight budget and load them asynchronously.
- Minify and tree‑shake: ensure your build removes dead code and ships modern, compact syntax to evergreen browsers.
Measuring what matters (field vs lab)
There are two kinds of performance data. Lab data comes from tools like Lighthouse and GTmetrix running on a fixed device profile; it’s great for debugging. Field data comes from real users, on real devices, with real networks. Google aggregates this in the Chrome User Experience Report (CrUX), which powers PageSpeed Insights and Search Console’s Core Web Vitals report. You should aim to pass at the 75th percentile of visits.
Where to start
- PageSpeed Insights: quick checks for key templates (home, category, blog post, landing page).
- Search Console: the authoritative field view across your site; fix issues template‑by‑template.
- Budget and alerting: set simple budgets (e.g., LCP ≤ 2.5s; CLS ≤ 0.1) and test on every release.
Quick wins you can ship this week
- Convert large hero images to AVIF with responsive sizes; add explicit width and height.
- Inline critical CSS and load the rest with
media="print"+ onload swap, or modern equivalents. - Remove non‑essential JavaScript and defer third‑party tags until after user interaction.
- Cache assets at the edge with long, immutable headers; enable Brotli and HTTP/3.
- Preload the LCP resource if it’s predictable (e.g., your hero image).
- Use system fonts or preload WOFF2; set
font-display: swapto prevent invisible text. - Reserve space for banners, forms and embeds to prevent layout shifts.
- Lazy‑load below‑the‑fold images with native
loading="lazy".
A simple 30‑day plan
Week 1 — Measure & set budgets
Audit key templates in PageSpeed Insights, collect field data from Search Console, and decide a small set of budgets you’ll enforce on every change.
Week 2 — Fix LCP
Compress and preload the hero image, inline critical CSS, and remove render‑blocking scripts. Confirm the LCP element in your diagnostics and retest.
Week 3 — Fix CLS
Add widths, heights or aspect‑ratios to all media, stabilise fonts and reserve space for dynamic UI. Check the “Avoid large layout shifts” report for specifics.
Week 4 — Reduce TBT
Split bundles, defer third‑party tags and break up long tasks. Verify in Lighthouse that long tasks have dropped and TBT is trending down.
Final thought
You don’t need a complex toolchain to pass Core Web Vitals. A fast, static foundation plus a small set of habits—compressed images, critical CSS, minimal JavaScript and edge caching—will carry you a long way. Start with the template that gets the most traffic, ship one improvement at a time, and keep nudging the numbers in the right direction. The rewards show up not just in scores, but in enquiries, sales and a smoother experience for every visitor.