53% Of Mobile Users Abandon Sites That Take Over 3 Seconds to Load (Google) | 47% Of Websites Currently Fail at Least One Core Web Vital (aTeam 2026) | 25% Conversion Rate Increase After Moving from Poor to Good CWV Scores | 8–15% SEO Ranking Boost From Passing All Three CWV Thresholds (2026 Research) |
Your website could have the best content in your industry – and still lose rankings to a competitor with a faster, more stable page. That is what Core Web Vitals measure: not your content quality or your backlink profile, but the raw user experience of visiting your site. And since 2021, Google has used these metrics as direct ranking signals.
In March 2024, Google updated its Core Web Vitals framework by replacing First Input Delay (FID) with a stricter new metric, Interaction to Next Paint (INP). Many websites that previously passed their CWV assessment are now failing. Only 53% of websites currently pass all three Core Web Vital thresholds. That means nearly half of all websites are leaving ranking points on the table due to fixable performance issues.
This guide explains exactly what Core Web Vitals are, how they affect your Google rankings, and – most importantly – the step-by-step fixes you can apply to pass each threshold. Whether you run a WordPress blog, a business website, or an e-commerce store, every fix in this guide is actionable without needing deep developer expertise.
What You Will Learn in This Guide |
What Core Web Vitals are and why Google uses them as ranking signals |
The three current metrics: LCP, INP, and CLS – thresholds, causes, and fixes |
The biggest change in 2024: why INP replaced FID and what it means for you |
The best free tools to measure your Core Web Vitals right now |
Step-by-step fixes for LCP, INP, and CLS – for WordPress and all websites |
A 30-day Core Web Vitals improvement plan |
A 20-point CWV checklist and 12 FAQs |
What Are Core Web Vitals?
Core Web Vitals are a set of three specific, measurable metrics that Google uses to evaluate the real-world user experience of loading a web page. They were introduced by Google in 2020 and became an official Google ranking factor as part of the Page Experience Update in May 2021.
According to Google’s Search Central documentation: “Core Web Vitals is a set of metrics that measure real-world user experience for loading performance, interactivity, and visual stability of the page. We highly recommend site owners achieve good Core Web Vitals for success with Search.”
What makes Core Web Vitals different from older speed metrics is that they measure user perception – how fast the page feels, how quickly it responds to interactions, and how stable the layout is as it loads. These are the things that determine whether a real visitor stays or leaves.
Largest Contentful Paint LCP Loading Performance Target: Under 2.5 seconds | Interaction to Next Paint INP Responsiveness Target: Under 200ms | Cumulative Layout Shift CLS Visual Stability Target: Under 0.1 |
The 2024 Change: INP Replaced FID |
In March 2024, Google officially replaced First Input Delay (FID) with Interaction to Next Paint (INP) as the interactivity Core Web Vital. |
FID only measured the first interaction on a page. INP measures ALL interactions throughout the entire page lifecycle and reports the longest one. |
This makes INP a significantly stricter metric. Sites that previously passed their FID score may now be failing INP – especially sites with heavy JavaScript, interactive widgets, or third-party chat scripts. |
If you last checked your Core Web Vitals before March 2024, you need to re-audit immediately. Your scores may have changed substantially. |
Why Core Web Vitals Matter for SEO and Rankings
Core Web Vitals are a confirmed Google ranking factor – but understanding how much they matter requires context. They are not the dominant ranking signal (content relevance and backlinks still matter far more), but they are a meaningful tiebreaker for competitive keywords.
What Google Has Said About CWV and Rankings | Source |
“Core Web Vitals are part of our Page Experience signals, which we use in ranking.” | Google Search Central Blog |
“While content relevance remains most important, for many queries there is lots of helpful content available. In such cases, having a good page experience could be the main differentiator.” | Google Developers |
“We highly recommend site owners achieve good Core Web Vitals for success with Search.” | Google Search Central Docs (updated Dec 2026) |
The Real-World Impact of Core Web Vitals on Business Metrics
Core Web Vitals matter beyond just rankings. Slow, unstable pages directly hurt conversions, bounce rates, and revenue – regardless of their impact on Google rankings:
Business Metric | Impact of Improving CWV from Poor to Good | Source |
Conversion Rate | 25% average increase | aTeam Soft Solutions 2026 CWV Study |
Bounce Rate | 35% reduction in bounces | aTeam Soft Solutions 2026 CWV Study |
Revenue / Session | 30% improvement from higher engagement | aTeam Soft Solutions 2026 CWV Study |
SEO Rankings | 8–15% visibility boost in competitive queries | 2026 Industry Research (Increv/aTeam) |
Session Duration | 13.3% longer sessions (Yahoo! JAPAN case study) | NitroPack / Yahoo! JAPAN |
Page Views Per Session | 15.1% more page views (Yahoo! JAPAN case study) | NitroPack / Yahoo! JAPAN |
Mobile Abandonment | 53% of users leave if load takes over 3 seconds | Google Research |
How Google Measures Core Web Vitals: Field Data vs Lab Data
This is a critical distinction that many website owners miss. Google uses two types of data for Core Web Vitals:
- Field Data (Real User Metrics / CrUX): Anonymised performance data collected from actual Chrome browser users visiting your site, aggregated in the Chrome User Experience Report (CrUX). This is what Google uses for ranking. Your site needs at least 75% of page visits to meet each "Good" threshold. This data appears in Google Search Console and is 28-day rolling data.
- Lab Data: Simulated performance tests run in a controlled environment using tools like Lighthouse or PageSpeed Insights. Useful for diagnosis and development, but NOT what Google uses for ranking. Lab scores can differ significantly from field scores.
Implication: Always check your Core Web Vitals in Google Search Console (field data) – not just PageSpeed Insights (lab data). A perfect PageSpeed score does not guarantee passing CWV if your real users experience slow interactions due to third-party scripts, user behaviour patterns, or device diversity.
LCP (Largest Contentful Paint): What It Is and How to Fix It
LCP is the metric Google uses to measure how fast the most visible content on your page – typically your hero image or largest heading – actually renders for a real user. It is the Core Web Vital that most sites fail first, and it is also the one with the most direct, fixable causes.
Largest Contentful Paint (LCP) | GOOD Under 2.5s | NEEDS WORK 2.5s – 4.0s | POOR Over 4.0 seconds |
LCP measures how quickly the largest visible element in the viewport loads – typically your hero image, a featured image, a video poster, or a large heading. It represents the perceived loading speed of your page: how long before users see the main content they came for. | |||
What Google Counts as the LCP Element
The LCP element is not always what you expect. Google’s algorithm identifies the largest element visible in the viewport at the time of page load, which could be:
- A hero image (most common on websites with image-heavy headers)
- A featured image at the top of a blog post
- A large text block (H1 heading) if no image is present above the fold
- A video poster/thumbnail image
- A background image loaded via CSS (in some cases)
Find your LCP element: Open PageSpeed Insights (pagespeed.web.dev), run a test on your URL, and scroll to the “Opportunities” section. Click “Largest Contentful Paint element” to see exactly which element Google identified on your page.
The Most Common LCP Problems and Their Fixes
Most LCP failures trace back to one of four root causes – and identifying which one affects your specific page is faster than applying generic speed fixes that may not address the actual bottleneck. Check your PageSpeed Insights report and match the flagged issue to the corresponding fix below before making any changes.
LCP Problem | Why It Happens | Fix |
Unoptimised hero images | Large image files (1MB+) take too long to download | Compress to WebP/AVIF format; resize to actual display dimensions; target under 100KB for hero images |
No LCP image preload hint | Browser discovers hero image late – after parsing HTML | Add <link rel=”preload” as=”image”> in <head> for your LCP image |
Slow server response (TTFB) | Time To First Byte over 600ms delays everything downstream | Use a quality hosting provider; implement server-side caching; use a CDN |
Render-blocking CSS/JS | Large CSS or JavaScript files block the browser from rendering content | Eliminate render-blocking resources; inline critical CSS; defer non-critical JS |
No CDN | Static assets served from a single origin server far from the user | Implement a CDN (Cloudflare, AWS CloudFront) to serve assets from the nearest server to each user |
Client-side rendering (React/Vue) | JavaScript must execute before content appears – slow on low-end devices | Implement Server-Side Rendering (SSR) or Static Site Generation (SSG) to deliver pre-rendered HTML |
Lazy-loaded LCP image | LCP image marked as loading=”lazy” – browser delays loading it | Never add loading=”lazy” to your LCP element – add loading=”eager” or remove the attribute |
LCP FIX #1 | Convert Hero Images to WebP or AVIF Format | High Impact |
Expected improvement: 800ms–1.5s faster LCP. WebP images are typically 25–35% smaller than equivalent JPEG or PNG files. AVIF is 20% smaller still. Smaller files download faster – directly improving LCP.
- 1. Identify your LCP image: Run PageSpeed Insights on your page and note the LCP element image URL.
- 2. Convert to WebP: Use Squoosh.app (free, browser-based), Cloudinary (free tier), or a WordPress plugin like Imagify, ShortPixel, or Smush to convert images automatically.
- 3. Set image dimensions: Always add width and height attributes to your hero image in HTML. This reserves space in the page layout before the image loads - also fixing CLS.
- 4. WordPress shortcut: Install the "Imagify" or "ShortPixel" plugin - it converts all existing and future image uploads to WebP automatically with no manual work required.
LCP FIX #2 | Add a Preload Hint for Your LCP Image | Quick Win |
Expected improvement: 200–600ms faster LCP. A preload hint tells the browser to start downloading your LCP image immediately – before it finishes parsing the rest of the HTML. This eliminates the “late discovery” delay that is common for hero images.
Add this to your <head> section:
Preload Code for LCP Image |
<link rel=”preload” as=”image” href=”/images/hero-image.webp” fetchpriority=”high”> |
For responsive images (different sizes for mobile/desktop): |
<link rel=”preload” as=”image” href=”/images/hero-image.webp” |
imagesrcset=”/images/hero-mobile.webp 480w, /images/hero-desktop.webp 1200w” |
imagesizes=”(max-width: 480px) 480px, 1200px” fetchpriority=”high”> |
WordPress users: Add via the wp_head hook in functions.php, or use a header injection plugin like “Header Footer Code Manager”. |
LCP FIX #3 | Improve Server Response Time (TTFB Under 600ms) | Foundation |
TTFB (Time To First Byte) is the root cause of slow LCP for many sites. If your server takes over 600ms to respond, everything downstream is delayed – and no amount of image optimisation will compensate.
- Upgrade hosting: Shared hosting with response times over 600ms is the most common TTFB culprit. Move to managed WordPress hosting (Kinsta, WP Engine, Cloudways) or a VPS.
- Implement server-side caching: WordPress: Install WP Rocket or LiteSpeed Cache. These cache fully-rendered HTML pages so the server does not rebuild the page from scratch on every request.
- Use a CDN: Cloudflare (free tier available) caches your static assets and HTML at edge servers worldwide - reducing the physical distance between your server and each visitor.
- Optimise your database: On WordPress, plugins like WP-Optimize clean up post revisions, spam comments, and transients that slow database queries.
INP (Interaction to Next Paint): What It Is and How to Fix It
INP replaced FID in March 2024 and is significantly stricter – where FID only measured the first click, INP measures every interaction across the entire page session and reports the slowest one. Sites that passed their CWV assessment before March 2024 need to re-audit specifically for INP, because previous FID compliance does not guarantee an INP pass.
Interaction to Next Paint (INP) | GOOD Under 200ms | NEEDS WORK 200ms – 500ms | POOR Over 500ms |
INP measures how quickly your page visually responds to user interactions – clicks, taps, and keypresses – throughout the entire page lifecycle. It replaced FID in March 2024 because FID only measured the first interaction. INP captures all interactions and reports the worst one, making it a much stricter and more realistic measure of responsiveness. | |||
Understanding the Three Components of INP
A slow INP score is almost never caused by the interaction itself – it is caused by what the browser has to do before and after registering the interaction. Understanding which of the three components is responsible for your INP failure determines whether the fix sits in your JavaScript, your rendering pipeline, or your event handler code.
INP Phase | What Happens | Common Culprits |
Input Delay | Time from when the user acts (clicks/taps) to when the browser starts processing the event | Long Tasks blocking the main thread; heavy third-party scripts running in the background |
Processing Time | Time the browser spends executing the event handler (your JavaScript) | Inefficient JavaScript; synchronous operations; large DOM trees (over 1,500 nodes) |
Presentation Delay | Time the browser spends rendering and painting the updated UI after JS runs | Complex CSS; large layout recalculations; repaints triggered by JS DOM manipulation |
The Most Common INP Problems and Their Fixes
INP failures are almost always JavaScript-related – heavy third-party scripts, unoptimised event handlers, and long tasks blocking the main thread are responsible for the majority of poor INP scores across all site types. The fixes below address each cause in order of frequency, starting with the changes that produce the largest INP improvement for the least development effort.
INP Problem | Why It Happens | Fix |
Too many third-party scripts | Chat widgets, ad scripts, analytics, social embeds all run JavaScript that blocks the main thread | Audit third-party scripts; load non-essential scripts with defer or async attributes; consider removing unused widgets |
Long JavaScript Tasks (over 50ms) | Large JS bundles keep the main thread busy – unable to respond to user interactions | Break long tasks into smaller chunks using setTimeout or requestIdleCallback; use code splitting to reduce bundle size |
Unnecessary plugins (WordPress) | Each active plugin adds JavaScript that runs on every page load | Audit and deactivate plugins not needed on every page; use a plugin like Asset CleanUp to disable per-page |
Slow event handlers | Button clicks, form submissions, or menu interactions run expensive JavaScript | Profile interactions in Chrome DevTools (Performance tab); optimise slow event handler functions |
Large DOM size (over 1,500 nodes) | Huge page structures slow browser layout calculations after every interaction | Simplify page templates; use virtual scrolling for long lists; remove unnecessary HTML wrappers |
Render-blocking fonts | Custom web fonts load synchronously, blocking rendering after interactions | Add font-display: swap in CSS; preload key fonts; limit to 2 font families maximum |
INP FIX #1 | Audit and Remove Unnecessary Third-Party Scripts | High Impact |
Third-party scripts are the #1 cause of poor INP scores. Every chat widget, ad network script, social media embed, A/B testing tool, and marketing analytics pixel adds JavaScript that competes with your site’s own code for the browser’s main thread.
- 5. Identify your third-party scripts: In Chrome DevTools, open the Network tab and filter by "Third-party." Note every external domain loading scripts on your page.
- 6. Measure their impact: Run PageSpeed Insights and scroll to "Third-Party Code" in the diagnostics. It lists each script with its blocking time.
- 7. Remove what you do not use: Be ruthless. If you have not used a tool in 30 days, remove its script from your site. Unused scripts still load and block your page.
-
8. Defer what you must keep: Add the defer attribute to non-essential scripts. Example:
<script src="analytics.js" defer></script>. This loads the script after the HTML is parsed, preventing render-blocking. - 9. Load chat widgets on interaction: Most live chat scripts load immediately. Instead, load them only when a user clicks a "Chat" button (interaction-based loading). This eliminates the INP impact for 95% of visitors who never use the chat.
INP FIX #2 | Break Up Long JavaScript Tasks | Developer Fix |
Any JavaScript task that runs for more than 50ms on the main thread blocks the browser from responding to user interactions during that time. These “Long Tasks” are the structural cause of high INP scores.
- Find Long Tasks: Chrome DevTools > Performance tab > Record while interacting with your page > Look for red-topped tasks in the flame chart. Tasks over 50ms are flagged as Long Tasks.
- Use the scheduler API: Break up long tasks by yielding to the main thread. Use scheduler.yield() or setTimeout(0) to pause execution and allow the browser to process user interactions between chunks of work.
- WordPress fix: Install WP Rocket or LiteSpeed Cache and enable "Delay JavaScript" - this defers non-critical JS until after user interaction, dramatically improving INP for most WordPress sites without requiring developer intervention.
INP FIX #3 | Optimise JavaScript Execution with Code Splitting | Performance |
Code splitting breaks your JavaScript into smaller chunks that load only when needed – rather than loading a massive single bundle on page load. This reduces the amount of JavaScript the browser needs to parse and execute before the page becomes interactive.
- React / Next.js: Use dynamic imports: import('./Component') to load components only when they are needed. Next.js does code splitting automatically.
- WordPress: Use WP Rocket's "Remove Unused CSS" and "Delay JavaScript Execution" features. These defer or remove JavaScript that is not needed on the initial page load.
- Audit JavaScript coverage: Chrome DevTools > Coverage tab (Cmd/Ctrl + Shift + P > "Show Coverage") shows how much of your JavaScript is unused. Anything over 50% unused is a strong candidate for code splitting or removal.
CLS (Cumulative Layout Shift): What It Is and How to Fix It
CLS measures how much the visible content of your page moves unexpectedly during loading – every time an image loads without reserved dimensions, a font swaps in and pushes text down, or an ad injects above existing content, your CLS score increases. A CLS above 0.1 is one of the most user-visible performance problems on any site, because the visitor experiences it as content physically jumping away from where they were reading or clicking.
Cumulative Layout Shift (CLS) | GOOD Under 0.1 | NEEDS WORK 0.1 – 0.25 | POOR Over 0.25 |
CLS measures the visual stability of your page as it loads – specifically, how much page elements shift unexpectedly while the user is viewing the page. Every time a button moves, a block of text jumps, or an image pops in and pushes content down, it contributes to your CLS score. High CLS is disorienting and leads to accidental clicks on wrong elements. | |||
How CLS Is Calculated
CLS is calculated as the sum of all individual layout shift scores, where each score is the fraction of the viewport area affected by the shift multiplied by the distance the shifting element moves. A 0.1 CLS means an element shifted in a way that affected 10% of the screen area or moved 10% of the screen height.
Only unexpected shifts count. If a user clicks a button that expands an accordion, that shift does not count toward CLS because it was triggered by user interaction. CLS only measures shifts that happen without user initiation – like an image loading in and pushing text down, or a font swap causing reflowed text.
The Most Common CLS Problems and Their Fixes
The majority of CLS failures are caused by elements that load after the initial page render and push existing content out of position. Each fix below eliminates a specific shift source – apply them in order of impact, starting with images and embeds, which account for the largest share of CLS failures across all website types.
CLS Problem | What Causes It | Fix |
Images without dimensions | Image elements with no width/height attributes: browser allocates no space before loading | Always add width and height attributes to every img element. Use CSS aspect-ratio as a fallback. |
Ads and embeds without reserved space | Ad slots and iframe embeds that expand on load push surrounding content down | Always reserve fixed-size space for ad slots using CSS min-height before the ad loads |
Font flash (FOUT/FOIT) | Custom web fonts load slowly – browser first renders with fallback font then swaps, reflowing text | Add font-display: swap in @font-face; preload key fonts with <link rel=”preload”>; use font metrics override |
Dynamically injected content | Scripts injecting banners, cookie notices, or content above existing content after page load | Pre-allocate space with CSS min-height; inject dynamic content below existing content, not above |
Web animations triggering layout | CSS animations or JS that modify top, left, width, height trigger layout recalculations | Use CSS transform and opacity for animations instead – these run on the compositor thread without causing layout shifts |
Third-party embeds (YouTube, social) | Iframes with no specified dimensions expand when content loads | Always specify width and height on iframes; use aspect-ratio CSS for responsive embeds |
CLS FIX #1 | Add Width and Height to Every Image | Quick Win |
This is the single highest-impact CLS fix for most websites. Without dimensions, the browser cannot reserve space for an image before it loads – so when the image loads, it pushes all content below it down, causing a layout shift.
Image Dimensions – Correct vs Incorrect |
WRONG (no dimensions – causes layout shift): |
<img src=”hero.webp” alt=”Hero Image”> |
CORRECT (dimensions specified – no layout shift): |
<img src=”hero.webp” alt=”Hero Image” width=”1200″ height=”630″> |
ALSO CORRECT (aspect-ratio CSS – for responsive images): |
img { aspect-ratio: 16/9; width: 100%; height: auto; } |
WordPress users: The Imagify plugin automatically adds missing width/height attributes to images. Alternatively, enable “Add missing image dimensions” in your caching plugin settings. |
CLS FIX #2 | Fix Font Loading with font-display: swap | Font Fix |
Font flashing occurs when a browser renders a page with a fallback font (causing text to appear), then swaps to the custom web font when it loads (causing text to reflow). This swap causes a layout shift that contributes to CLS.
CSS Font Fix |
@font-face { |
font-family: “YourFont”; |
src: url(“/fonts/yourfont.woff2”) format(“woff2”); |
font-display: swap; /* Use fallback font immediately, swap when custom font loads */ |
} |
Also add a preload hint in <head> for your primary font file: |
<link rel=”preload” href=”/fonts/yourfont.woff2″ as=”font” type=”font/woff2″ crossorigin> |
WordPress: Use “OMGF | Host Google Fonts Locally” plugin to self-host fonts with font-display: swap automatically applied. |
CLS FIX #3 | Reserve Space for Ads, Embeds, and Dynamic Content | Layout |
Every ad slot, social media embed, cookie banner, or notification bar that appears after the page loads can cause massive layout shifts if space is not pre-reserved. The fix is simple: tell the browser how much space the element will occupy before it loads.
Reserving Space for Dynamic Elements |
/* Reserve space for an ad slot (e.g., 728×90 leaderboard) */ |
.ad-container { |
min-height: 90px; |
min-width: 728px; |
} |
/* Reserve space for a YouTube embed (16:9 ratio) */ |
.video-container { |
position: relative; |
aspect-ratio: 16/9; |
width: 100%; |
} |
/* Cookie banner: always append BELOW content, never inject above */ |
/* Use position: fixed at bottom of viewport to avoid pushing content */ |
The Best Tools to Measure Core Web Vitals in 2026
Use a combination of field data tools (for Google ranking accuracy) and lab data tools (for diagnosis and development). Always validate fixes using field data tools before considering the work done.
Check GSC Field data – how Google sees your site’s real user performance | Run PSI Test Lab + field data – detailed diagnostics and specific recommendations | Profile in DevTools Deep diagnosis – identify Long Tasks, layout shifts, rendering issues | Fix Issues Apply fixes – images, scripts, CSS, server configuration | Retest & Monitor Validate in PSI, then monitor GSC for field data improvement (28-day lag) |
Tool | Data Type | Cost | Best For |
Google Search Console (Core Web Vitals Report) | Field (Real User) | Free | Primary source for ranking – shows URL groups failing LCP, INP, or CLS based on actual Chrome user data |
PageSpeed Insights (pagespeed.web.dev) | Field + Lab | Free | Shows both real-user field data and lab diagnostics with specific fix recommendations for each issue |
Chrome DevTools (Lighthouse tab) | Lab | Free | Development testing – detailed performance waterfall, Long Task identification, coverage analysis |
Web Vitals Chrome Extension | Field (Live) | Free | See live CWV scores as you browse your site – useful for quickly checking individual pages |
DebugBear | Field + Lab | From $35/mo | Continuous monitoring – tracks CWV trends over time with 40-week trendlines and regression alerts |
WebPageTest (webpagetest.org) | Lab | Free | Advanced waterfall analysis – test from real devices worldwide, filmstrip view, connection throttling |
GTmetrix | Lab | Free / $10+/mo | Beginner-friendly speed testing – visual performance report with recommendations |
Ahrefs Site Audit | Lab (crawl) | Paid | Site-wide CWV issues identified at scale – good for agencies auditing multiple pages |
Field Data vs Lab Data: Which One Matters for Rankings? |
Google uses FIELD DATA from the Chrome User Experience Report (CrUX) for rankings – not lab data. |
Field data reflects real visitor experiences across different devices, connection speeds, and locations. |
Lab data (PageSpeed Insights, Lighthouse, GTmetrix) is useful for identifying and diagnosing issues, but a perfect lab score does not guarantee passing CWV if your field data is poor. |
A common mistake: fixing your score in PageSpeed Insights and assuming the job is done. Always validate your improvements using Google Search Console CWV report – but remember it has a 28-day data lag. Be patient. |
If your site does not have enough CrUX data (typically needs 500+ monthly visitors), Google cannot assess your CWV and will not apply a ranking signal from them. Focus on growing traffic first if this is your situation. |
Core Web Vitals Fixes for WordPress (Without a Developer)
WordPress powers 43% of all websites – and it has specific challenges and solutions for Core Web Vitals. The good news: most WordPress CWV issues can be fixed with the right plugins, without writing any code.
WordPress Issue | Recommended Plugin / Solution | CWV Metric Fixed |
Slow page load / poor LCP | WP Rocket or LiteSpeed Cache (caching + minification) | LCP, INP |
Unoptimised images | Imagify, ShortPixel, or Smush (WebP conversion + compression) | LCP, CLS |
No CDN | Cloudflare (free) or BunnyCDN – integrate via plugin | LCP, INP |
Slow server response (TTFB) | Upgrade to managed hosting (Kinsta, Cloudways, WP Engine) | LCP |
Heavy JavaScript / poor INP | WP Rocket Delay JS or Asset CleanUp Pro | INP |
Too many plugins | Audit with Query Monitor – deactivate unused plugins | INP, LCP |
Images without dimensions | Imagify or run WP Smush “Check for missing dimensions” | CLS |
Font loading (FOUT/FOIT) | OMGF: Host Google Fonts Locally with font-display: swap | CLS |
Render-blocking CSS | WP Rocket “Optimize CSS Delivery” or Autoptimize | LCP |
No image lazy loading | Enable native lazy loading in WordPress 5.5+ (default) | LCP |
Large CSS files | WP Rocket “Remove Unused CSS” or Autoptimize CSS optimisation | LCP, INP |
Ad layout shifts | Pre-reserve ad slot space via Elementor spacer or Custom CSS | CLS |
The WordPress CWV Plugin Stack That Works (2026) |
Caching + JS/CSS optimisation: WP Rocket ($59/yr) – handles most CWV issues in one plugin: caching, minification, lazy loading, delay JS, remove unused CSS, CDN integration. |
Images: Imagify (free/paid) – converts to WebP, compresses, adds missing dimensions automatically. |
CDN: Cloudflare (free) – reduces TTFB and LCP by serving assets from edge locations near each user. |
Fonts: OMGF Plugin (free) – self-hosts Google Fonts locally with font-display: swap applied automatically. |
This stack addresses the vast majority of WordPress CWV issues without touching code. |
30-Day Core Web Vitals Improvement Plan
This plan is structured so the highest-impact fixes come first – LCP improvements in week one produce ranking-visible results faster than CLS or INP fixes, and they are typically achievable without developer involvement. Work through each week in sequence rather than tackling all three metrics simultaneously, which makes it harder to attribute score changes to specific actions.
Week | Focus | Actions | Expected Outcome |
Week 1 | Assess & Quick Wins | Run PageSpeed Insights on your top 5 pages. Check GSC Core Web Vitals report. Identify failing pages and which metric is failing. Set up Web Vitals Chrome Extension. Enable caching plugin if not already active. Compress and convert hero images to WebP. | 20–30% score improvement from basic optimisations |
Week 2 | Fix LCP | Add preload hints for LCP images. Audit and upgrade hosting if TTFB is over 600ms. Implement or configure CDN (Cloudflare free tier). Eliminate render-blocking CSS by inlining critical CSS. Fix lazy-loaded LCP images. | LCP moves toward or below 2.5s threshold |
Week 3 | Fix INP | Audit third-party scripts – remove unused ones, defer the rest. Enable “Delay JavaScript” in WP Rocket or LiteSpeed Cache. Use Chrome DevTools to profile and identify Long Tasks. Reduce active plugin count. Optimise or remove chat widget loading strategy. | INP moves toward or below 200ms threshold |
Week 4 | Fix CLS + Validate | Add width/height to all images without dimensions. Fix font loading with font-display: swap. Reserve space for ad slots and dynamic content. Run final PageSpeed Insights check on all key pages. Request re-assessment in GSC if pages were previously flagged. | CLS moves toward or below 0.1 threshold – all three metrics in “Good” range |
Core Web Vitals 20-Point Checklist (2026)
Run this checklist against your PageSpeed Insights field data report – not lab data – before considering your CWV work complete on any page. Field data reflects real user experience across all devices and connection speeds, which is exactly what Google’s ranking algorithm uses. Lab scores can pass while field scores fail, and it is the field data that determines your ranking outcome.
# | Task | Metric Fixed | Priority |
1 | Check Core Web Vitals report in Google Search Console – identify failing URLs | All | Start Now |
2 | Run PageSpeed Insights on your homepage and top 5 traffic pages | All | Start Now |
3 | Install Web Vitals Chrome Extension for live on-page monitoring | All | Start Now |
4 | Identify your LCP element using PageSpeed Insights “LCP element” diagnostic | LCP | Week 1 |
5 | Convert all hero and featured images to WebP or AVIF format | LCP | Week 1 |
6 | Add preload hint for LCP image in <head> | LCP | Week 1 |
7 | Measure TTFB – if over 600ms, upgrade hosting or implement server-side caching | LCP | Week 1–2 |
8 | Implement or configure a CDN (Cloudflare free tier minimum) | LCP, INP | Week 2 |
9 | Eliminate render-blocking CSS/JS – inline critical CSS, defer non-critical JS | LCP, INP | Week 2 |
10 | Remove the loading=”lazy” attribute from your LCP image | LCP | Week 2 |
11 | Audit all third-party scripts – remove unused, defer non-essential with “defer” attribute | INP | Week 3 |
12 | Enable Delay JavaScript in WP Rocket or LiteSpeed Cache (WordPress) | INP | Week 3 |
13 | Profile user interactions in Chrome DevTools – identify and fix Long Tasks over 50ms | INP | Week 3 |
14 | Deactivate unnecessary WordPress plugins – audit with Query Monitor | INP, LCP | Week 3 |
15 | Add width and height attributes to every image element on your site | CLS | Week 4 |
16 | Add font-display: swap to all @font-face declarations | CLS | Week 4 |
17 | Pre-reserve space for ad slots using CSS min-height | CLS | Week 4 |
18 | Fix all YouTube/social embeds – add explicit width/height or aspect-ratio CSS | CLS | Week 4 |
19 | Validate fixes in PageSpeed Insights – confirm lab score improvements | All | Week 4 |
20 | Monitor GSC Core Web Vitals report weekly – allow 28-day lag for field data to update | All | Ongoing |
Frequently Asked Questions About Core Web Vitals
(Structured for FAQPage schema – add via Rank Math or AIOSEO in WordPress)





