Core Web Vitals are Google’s official page experience ranking factors — and most websites are failing at least one of them right now. The good news: you can check your scores completely free and fix the most impactful issues without paying for developers or expensive tools. This guide explains exactly what each metric measures, what thresholds Google requires, and the fastest free fixes for each one.
Since Google confirmed Core Web Vitals as ranking factors, pages that fail these thresholds are actively penalized in competitive search results — particularly on mobile. With mobile-first indexing now the standard, your mobile Core Web Vitals score is what Google primarily evaluates.
What Are Core Web Vitals?
Core Web Vitals are three specific performance metrics that Google uses to measure real-world page experience. Unlike general speed scores, each metric captures a distinct dimension of how users actually experience a page loading and interacting with it.
Important: Google measures Core Web Vitals using real user data (field data from Chrome users visiting your site) — not just lab simulations. A page can score well in PageSpeed Insights’ lab test but still fail in the real-world field data if your server is slow for users in certain regions or on slower devices.
How to Check Your Core Web Vitals for Free
Three free tools give you complete Core Web Vitals data — use all three for the full picture:
| Tool | Best For | Data Type | Signup? |
|---|---|---|---|
| Seobility Speed Checker | Quick full speed audit with actionable fixes | Lab data | No |
| Google PageSpeed Insights | Official Google scores + field data | Lab + Field | No |
| Google Search Console | Site-wide field data for all pages | Real user data | Account needed |
| Chrome DevTools | Deep debugging of specific issues | Lab data | No |
Start with Seobility’s free Speed Checker — it gives you all three Core Web Vitals scores plus specific fix recommendations in one place, with no account needed. Then use Google Search Console’s Core Web Vitals report for the real-world field data across your entire site.
⚡ Check Core Web Vitals Free →Fixing LCP — Largest Contentful Paint
LCP is almost always the Core Web Vital that most sites fail. Your LCP element is typically your hero image, banner, or the largest H1 heading. Everything that happens before that element loads counts against your LCP score.
Fix 1 — Compress & Convert Hero Images to WebP
Biggest ImpactThe single most impactful LCP fix for most sites. If your LCP element is an image (hero, banner, featured image), its file size directly determines your LCP score. Uncompressed JPG/PNG images of 500KB–2MB are extremely common and add 1–3 seconds to LCP alone.
- Convert all hero and above-the-fold images to WebP format — same visual quality at 25–35% smaller file size
- Compress to under 100KB for most hero images (150KB max for large full-width banners)
- Free compression tools: Squoosh (squoosh.app), TinyPNG, Cloudinary (free tier)
- In WordPress: plugins like ShortPixel, Smush, or Imagify auto-convert and compress on upload
Fix 2 — Add fetchpriority=”high” to Your LCP Image
High ImpactBrowsers load many resources simultaneously and don’t always know which image is your LCP element. The fetchpriority="high" attribute tells the browser to prioritize loading your LCP image above everything else — often reducing LCP by 0.5–1 second instantly.
- Find your LCP image in your page’s HTML — it’s usually the first large image in the page body
- Add the attribute:
<img src="hero.webp" fetchpriority="high" alt="..."> - Only use this on ONE image — your actual LCP element. Using it on multiple images cancels the benefit.
- In WordPress: add via a plugin like Perfmatters or manually in your theme’s header template
Fix 3 — Enable Caching & Use a CDN
High ImpactBrowser caching stores your site’s resources locally on users’ devices so return visitors don’t re-download everything on each visit. A CDN (Content Delivery Network) serves your files from servers physically closer to each user, reducing network latency — the hidden LCP killer.
- WordPress: install WP Rocket, SpeedyCache, W3 Total Cache, or LiteSpeed Cache (all have free tiers)
- Free CDN options: Cloudflare (free plan), BunnyCDN (very affordable)
- Cloudflare’s free plan alone typically improves LCP by 0.3–0.8 seconds for most sites
- Also enable GZIP or Brotli compression on your server — reduces HTML/CSS/JS transfer size by 60–80%
Fix 4 — Eliminate Render-Blocking Resources
Medium ImpactCSS and JavaScript files that load in the <head> block the browser from rendering any visible content until they finish downloading. Every render-blocking resource adds directly to your LCP time.
- Defer non-critical JavaScript: add
deferorasyncattribute to script tags - Inline critical CSS (the CSS needed for above-the-fold content) directly in the HTML
- Remove or delay third-party scripts (chat widgets, analytics, ad scripts) that aren’t needed for initial render
- In WordPress: caching plugins like WP Rocket handle this automatically — enable “Delay JavaScript Execution”
Fixing CLS — Cumulative Layout Shift
CLS is the most frustrating metric for users — it’s that annoying experience where you’re about to click something and the page jumps, making you tap the wrong thing. Fortunately, CLS is usually caused by a few very specific, easy-to-fix issues.
Fix 1 — Add Width & Height to All Images
Biggest ImpactThis is the #1 cause of CLS on most sites. When images don’t have explicit width and height attributes in HTML, the browser doesn’t know how much space to reserve. It loads the text content first, then the image appears and pushes everything down — causing massive layout shift.
- Add explicit dimensions to every image:
<img src="image.jpg" width="800" height="450" alt="..."> - Even if you size images with CSS, the HTML attributes are needed so the browser reserves space before loading
- In WordPress: modern versions (5.5+) automatically add width/height to images inserted via Media Library
- Check older images — images uploaded before WordPress 5.5 may lack these attributes
Fix 2 — Reserve Space for Ads, Embeds & Dynamic Content
High ImpactAds, YouTube embeds, Twitter cards, and cookie consent banners that inject into the page after load are major CLS contributors. The fix is always the same: reserve the space before the content loads.
- Ad slots: set a fixed min-height on ad containers matching the largest expected ad size
- YouTube embeds: wrap in a container with aspect-ratio CSS (e.g.,
aspect-ratio: 16/9) and lazy-load with a placeholder - Cookie/GDPR banners: position them at the bottom of viewport (fixed position) — never inject at top pushing content down
- Chat widgets: load them only after user interaction (lazy load on scroll or click)
Fix 3 — Fix Font Swap Layout Shifts
Medium ImpactWhen web fonts load, the browser initially renders text in a fallback system font, then swaps to the custom font when it loads. If the two fonts have different sizes or letter-spacing, all text reflows causing CLS.
- Add
font-display: optionalinstead offont-display: swap— prevents the swap if font isn’t loaded fast enough - Preload critical fonts:
<link rel="preload" href="font.woff2" as="font" crossorigin> - Use system fonts for body text — no swap, zero CLS from fonts
- Use font-size-adjust CSS property to match fallback font metrics more closely
Fixing INP — Interaction to Next Paint
INP replaced FID (First Input Delay) in March 2024 and measures overall page interactivity throughout the entire page visit — not just the first click. A poor INP means your page feels sluggish when users tap, click, or type. This is almost always caused by JavaScript blocking the browser’s main thread.
Fix 1 — Reduce JavaScript Execution Time
Biggest ImpactHeavy JavaScript that runs on the main thread prevents the browser from responding to user interactions immediately. Every millisecond of JavaScript executing is a millisecond added to your INP score.
- Audit your JavaScript with Chrome DevTools → Performance tab → record a page interaction
- Identify “Long Tasks” (tasks taking over 50ms) — these are your INP killers
- Break up long tasks using
setTimeout(fn, 0)to yield control back to the browser between chunks - Remove unused JavaScript — the biggest wins often come from removing plugins/scripts you don’t need
- In WordPress: deactivate plugins you don’t actively use — each one adds JavaScript overhead
Fix 2 — Defer and Delay Third-Party Scripts
High ImpactThird-party scripts (Google Tag Manager, Facebook Pixel, chat widgets, analytics, ad scripts) are the most common INP killers because they run on your main thread and you have no control over their code quality. Each one adds to INP.
- Delay all non-essential third-party scripts until after user interaction using a script manager
- In WordPress: use Perfmatters or WP Rocket’s “Delay JavaScript” feature — delays scripts until first user scroll or click
- Load Google Analytics with
asyncattribute — prevents it from blocking page interactivity - Audit your Tag Manager tags — remove any tags for services you’ve stopped using
- Replace heavy scripts with lighter alternatives (e.g., Fathom or Plausible instead of Google Analytics for simpler sites)
WordPress Core Web Vitals — Complete Plugin Stack
If your site runs on WordPress, here’s the most effective free/affordable plugin combination for passing all three Core Web Vitals:
- Caching: SpeedyCache (free), WP Rocket (paid but highly effective), or LiteSpeed Cache (free if on LiteSpeed server)
- Image optimization: ShortPixel (free tier available), Imagify, or Smush — auto WebP conversion + compression
- CDN: Cloudflare free plan — set up in 15 minutes, immediately improves LCP
- Script management: Perfmatters ($24.95/year) — best tool for deferring/delaying third-party scripts
- Redirects (for CLS): Redirection plugin handles 301s without server config
Most impactful free WordPress fix: Install Cloudflare (free plan) + ShortPixel or Smush (free tiers) this week. Together these two changes typically improve LCP by 0.8–1.5 seconds and bring most WordPress sites into the “Good” range for LCP without any paid tools.
⚡ Check Your Core Web Vitals — Free Now
No signup. No account. Check LCP, CLS, and INP for any URL instantly and get specific fix recommendations. Takes 30 seconds.