Key takeaways
- Prioritize field data over lab-only green scores
- Attack LCP, INP, and CLS with specific, ordered fixes
- Measure after each change - don’t batch blind optimizations
Teams burn weeks “optimizing performance” while Search Console field data barely moves. Usually they optimized the wrong page, on a fast laptop, with a cold cache that real users never see.
Start from field data
- 01Identify the URLs that matter: money pages and high-traffic templates
- 02Read CrUX / Search Console for LCP, INP, CLS - not just Lighthouse
- 03Reproduce on mid-tier mobile throttling before declaring victory
LCP
Largest contentful paint - load feel
INP
Interaction to next paint - input feel
CLS
Layout shift - visual stability
LCP: get the hero there faster
- Preload the true LCP image or font - not every asset
- Serve correctly sized images; avoid huge heroes scaled down in CSS
- Eliminate render-blocking chains ahead of the LCP element
- Prefer server-rendered HTML for above-the-fold content
INP: make interactions cheap
Long tasks on click handlers, heavy hydration, and third-party scripts dominate INP. Break up work, defer non-critical JS, and keep the main thread free when the user taps.
// Prefer: small handlers, deferred work
button.addEventListener("click", () => {
updateUIImmediately();
queueMicrotask(() => runExpensiveAnalytics());
});CLS: reserve space, stop surprises
- Width/height or aspect-ratio on images and embeds
- No late-injected banners above existing content without reserved space
- Font loading strategy that doesn’t swap layout wildly
- Avoid inserting ads/cookies banners that shove the page down
“Performance work without field measurement is interior decorating.”
