To improve Core Web Vitals on WordPress, first check your real-user data in Google Search Console or PageSpeed Insights, then fix the worst metric.
For LCP, speed up your server with page caching and make the main image small, preloaded and not lazy-loaded.
For INP, remove or delay heavy JavaScript from plugins and page builders.
For CLS, add width and height to images and reserve space for embeds, ads and banners.
Then wait about 28 days for the field data to update.
Optimize your Google Business Profile without leaving WordPress
Connect your GBP profile, compare it with your website and fix the gaps FoundHint finds.
- Business Profile audit and optimization
- Google Post scheduling
- Review management and replies
- Local rank tracking on a map grid
What Are Core Web Vitals?
Core Web Vitals are three metrics Google uses to measure real visitors’ experience of a page:
- Largest Contentful Paint (LCP) – loading. When the biggest image or text block in the viewport appears.
- Interaction to Next Paint (INP) – responsiveness. How quickly the page visually responds after a click, tap or key press, across the whole visit.
- Cumulative Layout Shift (CLS) – visual stability. How much content jumps around unexpectedly.
INP replaced First Input Delay (FID) in March 2024. If a guide or plugin still talks about FID, its advice is out of date.
Core Web Vitals thresholds
| Metric | Good | Needs improvement | Poor |
|---|---|---|---|
| LCP | ≤ 2.5 s | 2.5–4.0 s | > 4.0 s |
| INP | ≤ 200 ms | 200–500 ms | > 500 ms |
| CLS | ≤ 0.1 | 0.1–0.25 | > 0.25 |
A page passes only if the 75th percentile of real visits meets the “good” threshold for all three metrics.
In plain terms: at least three out of four visits must be good. One poor metric fails the page — the scores are not averaged.
Do Core Web Vitals Affect Rankings and Local SEO?
Yes, but only a little.
Core Web Vitals are part of Google’s page experience signals, and Google has described their ranking influence as small in most cases.
Relevance, content quality and for local search your Google Business Profile, proximity and reviews matter far more.
So why bother? Because visitors feel speed directly.
A local customer on a phone who wants your number, opening hours or directions will leave a slow, jumpy page.
Treat Core Web Vitals as a user-experience and conversion task that also removes a possible ranking tiebreaker not as a ranking shortcut.
How to Measure Core Web Vitals on WordPress
There are two types of data, and mixing them up is the most common mistake.
| Field data (real users) | Lab data (simulated) | |
|---|---|---|
| Source | Chrome User Experience Report (CrUX) | Lighthouse test on one simulated device |
| Where to see it | Search Console Core Web Vitals report; top section of PageSpeed Insights | Bottom section of PageSpeed Insights; Chrome DevTools |
| Used for pass/fail | Yes | No |
| Updates | Rolling 28 days | Instantly |
| Best for | Knowing whether you have a problem | Finding why |
The PageSpeed score (0–100) is not your Core Web Vitals result. A page can score 60 and still pass with real users, or score 90 and fail.
Step-by-step measurement
- Open Google Search Console → Experience → Core Web Vitals. Check mobile first. Note which metric fails and which URL groups are affected (e.g., all location pages).
- Test a sample URL from each group in PageSpeed Insights. Look at the “Discover what your real users are experiencing” section first.
- Use the lab diagnostics (“Largest Contentful Paint element”, “Avoid long main-thread tasks”, “Avoid large layout shifts”) to find causes.
- If you see “not enough data”: small local sites often don’t have enough Chrome traffic for CrUX. Use origin-level data if shown, rely on Lighthouse and DevTools as a guide, and test on a real mid-range phone over mobile data.
Fix the Foundation First: Hosting, Caching and Theme
Many WordPress Core Web Vitals problems start before the page even renders.
- Check Time to First Byte (TTFB). If the server takes more than about 0.8 seconds to respond, LCP will struggle no matter what else you do. Cheap overcrowded shared hosting and an outdated PHP version are frequent causes.
- Use full-page caching. Your host’s built-in cache or a caching plugin serves ready-made HTML instead of rebuilding each page with PHP and database queries.
- Use a CDN if your visitors are spread out or your server is far from your customers.
- Keep WordPress, PHP, the theme and plugins updated. Recent WordPress versions have added performance improvements such as better image loading defaults.
- Choose a lightweight theme. Block themes and lean themes generally ship less CSS and JavaScript than multipurpose themes with built-in sliders and animations.
- Audit plugins. Each plugin can add scripts and styles on every page. Remove what you don’t use; for what you keep, check whether it loads assets site-wide when it only needs one page (a contact form plugin loading on every blog post, for example).
How to Improve LCP on WordPress?
LCP is usually the hero image, a featured image, or a large heading. Find the exact element in PageSpeed Insights under “Largest Contentful Paint element”.
| Cause | WordPress symptom | Fix |
|---|---|---|
| Slow server | High TTFB | Better hosting, page caching, CDN |
| Hero image is lazy-loaded | Image has loading="lazy" | Exclude the first/above-the-fold image from lazy loading |
| Image too large | 2–4 MB JPEG/PNG uploads | Resize to display size, serve WebP/AVIF, use responsive srcset |
| Image discovered late | Hero set as CSS background or by a slider script | Use a normal <img> in HTML; add fetchpriority="high" or preload it |
| Render-blocking CSS/JS | Many stylesheets and scripts in <head> | Defer non-critical JS, reduce unused CSS, inline critical CSS if your tooling supports it |
| Slider/carousel | Hero waits for slider JS | Replace with a single static image |
| Web font delays heading text | Large text block is the LCP element | Self-host fonts, preload the main one, use font-display: swap |
Example: A plumber’s homepage has a full-width slider with three 3 MB photos. Replacing it with one 150 KB WebP image, removing lazy loading from it and adding fetchpriority="high" typically moves LCP more than any other single change on such a page.
How to Improve INP on WordPress?
INP measures how long the browser takes to show a response after a visitor interacts.
Poor INP almost always means too much JavaScript running on the main thread.
Common WordPress causes:
- Page builders that create very large DOMs and ship heavy scripts.
- Third-party scripts: chat widgets, popups, analytics/tag managers with many tags, social feeds, ad scripts.
- Mega menus and animation libraries that run work on every click or scroll.
- Many plugins each adding small scripts that together create long tasks.
Fixes:
- Remove scripts you don’t need. This is the most effective INP fix.
- Delay non-essential JavaScript until interaction (many optimization plugins offer “delay JS”). Test carefully: delaying critical scripts can break menus or forms.
- Load third-party widgets only where needed — a booking widget on the booking page, not sitewide.
- Reduce DOM size by simplifying page builder layouts (fewer nested sections and columns).
- Audit Google Tag Manager for old or duplicate tags.
- Check in Chrome DevTools → Performance to see which scripts create long tasks during clicks.
How to Fix CLS on WordPress?
CLS is often the easiest metric to fix because most causes are in the markup, not the server.
- Set width and height on every image and video. WordPress adds these to images inserted through the editor, but themes, sliders and custom code sometimes strip them.
- Reserve space for embeds (maps, videos, review widgets) with a fixed height or
aspect-ratioin CSS. - Don’t inject content above existing content — cookie banners, promo bars and “notice” bars should overlay or have reserved space.
- Fix web font swaps: preload the main font and use a fallback font with similar size metrics to reduce text jumping.
- Reserve ad slots with a minimum height.
- Avoid animations that change layout (animate
transformandopacityinstead oftop,heightormargin).
Local Business Site Culprits
Local business websites share a few patterns that hurt Core Web Vitals:
- Embedded Google Maps on every page. A Maps iframe loads a lot of JavaScript. Use a static map image (or a “facade”) that loads the interactive map only when clicked, and keep the full embed on the contact or location page.
- Review and testimonial widgets pulled in by third-party scripts. Load them lower on the page, lazy-load them, and reserve their height.
- Chat bubbles and call-tracking scripts. Delay them until after page load or interaction.
- Heavy location pages. If you run many location or service-area pages from one template, a slow template multiplies the problem across all of them — fix the template once.
- Structured data: LocalBusiness schema output as JSON-LD is plain text and doesn’t affect rendering, so you don’t need to trade schema for speed. See our LocalBusiness schema guide.)
Common Mistakes
- Chasing a 100 PageSpeed score instead of passing field data.
- Installing two caching or optimization plugins that conflict.
- Lazy-loading everything, including the hero image.
- Enabling every “optimize” toggle at once, then not testing forms, menus and checkout.
- Testing only on desktop when mobile is what fails.
- Expecting Search Console to update the next day.
How to Validate Your Fixes?
- Re-run PageSpeed Insights lab tests to confirm the specific issue is gone.
- Click through key pages on a real phone: menu, forms, click-to-call, map.
- In Search Console, open the failing issue and click Validate fix.
- Wait for the 28-day CrUX window to reflect new visits. Group trends matter more than a single URL.
- Re-check after adding new plugins, themes or widgets — Core Web Vitals regress quietly.
Optimize your Google Business Profile without leaving WordPress
Connect your GBP profile, compare it with your website and fix the gaps FoundHint finds.
- Business Profile audit and optimization
- Google Post scheduling
- Review management and replies
- Local rank tracking on a map grid
Conclusion
Improving Core Web Vitals on WordPress is mostly about removing weight: faster server responses through caching and good hosting, a lean hero image for LCP, less JavaScript for INP, and reserved space for everything that loads late for CLS.
Measure with real-user data, fix the worst metric first, and validate over 28 days.
For local businesses, the payoff is visitors who actually reach your phone number, map and contact form.
Frequently Asked Questions
What is a good Core Web Vitals score for WordPress?
LCP of 2.5 seconds or less, INP of 200 ms or less, and CLS of 0.1 or less, measured at the 75th percentile of real visits. The thresholds are the same for every platform.
Why does PageSpeed Insights show a good score but Search Console says my pages fail?
The score is a lab simulation; Search Console uses 28 days of real Chrome user data. Real users on slower phones and networks can fail even when the lab test looks fine.
Is FID still a Core Web Vital?
No. Interaction to Next Paint replaced First Input Delay in March 2024.
Can a plugin fix Core Web Vitals on its own?
A caching or optimization plugin helps, but it can’t fix slow hosting, oversized images, a heavy theme or too many third-party scripts. Treat it as one part of the fix.
How long does it take for Core Web Vitals to update in Search Console?
The data covers a rolling 28-day period, so improvements appear gradually over about four weeks.
Do Core Web Vitals affect local pack rankings?
Google hasn’t said Core Web Vitals are a local pack factor. They are a small page experience signal for organic results; their bigger value for local businesses is keeping mobile visitors on the page long enough to call or visit.
Why does my site say “not enough data”?
Your site doesn’t get enough Chrome visits for the CrUX dataset. Use lab tools and real-device testing as a guide.




