Core Web Vitals are no longer just a SEO checkbox — they directly impact conversion rates. A 100ms improvement in LCP correlates with a 1-3% uplift in conversion across most e-commerce sites. Here's the practical playbook I use to green all three metrics on production apps.
LCP: Largest Contentful Paint
LCP measures when the largest visible element renders. It's almost always a hero image or heading. The two biggest wins: preload your LCP image with a <link rel=preload> in the document head, and ensure your LCP element is in the server-rendered HTML — not injected by JavaScript.
Use Chrome DevTools' Performance panel to identify your LCP element. It's often not the image you think it is — sometimes it's a large block of text or a background image loaded via CSS.
INP: Interaction to Next Paint (replaced FID)
INP measures the latency of all interactions on the page, not just the first. Long tasks — JavaScript that runs for more than 50ms — are the primary cause of poor INP. Use the scheduler.yield() API to break long tasks into smaller chunks that yield back to the browser between frames.
CLS: Cumulative Layout Shift
CLS is caused by elements that shift after initial render — typically images without dimensions, ads, and dynamically injected banners. The fix is almost always the same: reserve space for dynamic content before it loads. For images, always specify width and height. For ads and embeds, use a min-height placeholder.