
Website Speed & Core Web Vitals: The Complete Optimization Guide 2026
Understand and optimize Core Web Vitals: LCP, INP, CLS. Impact on SEO rankings and Google Ads Quality Score. With practical checklist and tools.
Website Speed & Core Web Vitals: The Complete Optimization Guide 2026
The numbers are clear: According to Google, 53% of mobile users abandon a site that takes longer than 3 seconds to load. Core Web Vitals have been an official ranking factor since 2021 – and they also influence your Google Ads Quality Score.
What Are Core Web Vitals?
Core Web Vitals are three measurable metrics Google uses to assess your website's user experience:
LCP – Largest Contentful Paint
What: How long does it take for the largest visible element (image, video, text block) to load?
✅ Good: ≤ 2.5 seconds
⚠️ Needs improvement: 2.5 – 4.0 seconds
❌ Poor: > 4.0 seconds
INP – Interaction to Next Paint
What: How quickly does the page respond to user actions (click, tap, keyboard input)?
✅ Good: ≤ 200 milliseconds
⚠️ Needs improvement: 200 – 500 milliseconds
❌ Poor: > 500 milliseconds
Why important: INP replaced FID (First Input Delay) as a Core Web Vital in 2024. It measures overall interactivity, not just the first input.
CLS – Cumulative Layout Shift
What: How much do visible elements shift during loading?
✅ Good: ≤ 0.1
⚠️ Needs improvement: 0.1 – 0.25
❌ Poor: > 0.25
Impact on SEO & Google Ads
SEO Rankings
Google Page Experience Signal:
Core Web Vitals (LCP, INP, CLS)
+ Mobile-Friendliness
+ HTTPS
+ No Intrusive Interstitials
= Part of the ranking algorithm
→ With equal content quality:
Faster website = better ranking
Google Ads Quality Score
Landing Page Experience = 1/3 of Quality Score
Slow landing page:
→ High bounce rate
→ Poor landing page experience
→ Lower Quality Score
→ Higher CPC → fewer clicks per budget
Fast landing page:
→ Low bounce rate
→ Good landing page experience
→ Higher Quality Score
→ Lower CPC → more clicks per budget
Example:
Same keywords, same ad, same budget:
Landing Page A: LCP 5.2s → Quality Score 5 → CPC: €4.50
Landing Page B: LCP 1.8s → Quality Score 8 → CPC: €2.80
Result: 60% more clicks with the fast page!
Optimizing LCP
Most Common LCP Issues
Problem 1: Uncompressed images
❌ hero-image.jpg: 2.4 MB, 4000x3000px
→ Load time: 3.8 seconds (on 4G)
âś… hero-image.webp: 120 KB, 1200x800px
→ Load time: 0.4 seconds (on 4G)
Solution:
<!-- Modern image format + responsive sizes -->
<picture>
<source srcset="hero.avif" type="image/avif">
<source srcset="hero.webp" type="image/webp">
<img src="hero.jpg" alt="..." width="1200" height="800"
loading="eager" fetchpriority="high">
</picture>
Problem 2: Render-blocking CSS/JS
Solution:
<!-- Critical CSS inline in head -->
<style>
/* Only CSS for above-the-fold content */
.hero { ... }
.nav { ... }
</style>
<!-- Load rest async -->
<link rel="preload" href="/styles.css" as="style"
onload="this.onload=null;this.rel='stylesheet'">
Problem 3: Slow server (TTFB)
TTFB (Time to First Byte) targets:
âś… Good: < 200ms
⚠️ OK: 200-500ms
❌ Poor: > 500ms
Solution:
- Use CDN (Cloudflare, Vercel Edge)
- Enable server-side caching
- Optimize database queries
- Upgrade hosting (not the cheapest shared hosting)
Problem 4: Web fonts block rendering
Solution:
<!-- Preload font -->
<link rel="preload" href="/fonts/inter.woff2" as="font"
type="font/woff2" crossorigin>
@font-face {
font-family: 'Inter';
src: url('/fonts/inter.woff2') format('woff2');
font-display: swap; /* Show text immediately, load font later */
}
Optimizing INP
Most Common INP Issues
Problem 1: Heavy JavaScript execution
// ❌ Bad: Everything on main thread
button.addEventListener('click', () => {
processLargeDataset(data); // 500ms heavy computation
updateUI();
});
// âś… Better: Split with requestAnimationFrame
button.addEventListener('click', () => {
showLoadingState(); // UI updates immediately
requestAnimationFrame(() => {
processLargeDataset(data);
updateUI();
});
});
Problem 2: Too much third-party JavaScript
Typical third-party scripts:
- Google Tag Manager: ~80KB
- Google Analytics: ~45KB
- Facebook Pixel: ~60KB
- Chat widget: ~200KB
- Cookie banner: ~100KB
Total: ~485KB JavaScript → INP killer!
Solution:
- Only load necessary scripts
- Load scripts with defer/async
- Clean up Tag Manager (remove unused tags)
Optimizing CLS
Most Common CLS Issues
Problem 1: Images without dimensions
<!-- ❌ CLS problem: Image has no set size -->
<img src="photo.jpg" alt="...">
<!-- → Space only reserved when image loads → Layout Shift! -->
<!-- âś… Solution: Specify width and height -->
<img src="photo.jpg" alt="..." width="800" height="600">
<!-- → Browser reserves space in advance → no shift -->
Problem 2: Dynamically injected content
❌ Cookie banner pops in → everything shifts
❌ Ad banner loads late → content jumps down
❌ Chat widget appears → layout changes
Solution:
/* Reserve space for dynamic elements in advance */
.ad-container {
min-height: 250px; /* Reserve space for ad */
}
Quick Wins: Immediately Actionable Optimizations
1. Optimize Images (Biggest Lever!)
âś… Format: WebP or AVIF instead of JPEG/PNG
âś… Compression: 80% quality is usually sufficient
âś… Responsive: Different sizes for different screens
âś… Lazy loading: Lazy load images below viewport
âś… Dimensions: Always specify width/height
Tool: squoosh.app (free, in-browser)
2. Optimize CSS & JavaScript
âś… Critical CSS inline in <head>
âś… Minify CSS/JS
âś… Remove unused CSS/JS
âś… Load scripts with defer or async
âś… Code splitting (only load what's needed)
3. Optimize Server
âś… Use CDN (Cloudflare, Vercel, Netlify)
âś… Set caching headers (Cache-Control)
âś… Enable GZIP/Brotli compression
âś… Enable HTTP/2 or HTTP/3
âś… DNS prefetch for external resources
4. Optimize Fonts
âś… Only load needed font weights (not the whole family)
âś… Use WOFF2 format
âś… Set font-display: swap or optional
âś… Preload most important fonts
âś… Prefer local fonts (system-ui stack)
Checklist: Core Web Vitals Optimization
LCP âś…:
- [ ] Hero image compressed (WebP/AVIF, < 200KB)
- [ ] Critical CSS inlined
- [ ] Fonts preloaded with font-display: swap
- [ ] CDN enabled
- [ ] TTFB < 200ms
INP âś…:
- [ ] JavaScript minimized and split
- [ ] Third-party scripts reduced
- [ ] Heavy computations offloaded from main thread
- [ ] DOM size < 1,500 elements
- [ ] Event handlers optimized
CLS âś…:
- [ ] All images/videos with width/height
- [ ] Space reserved for ads/banners
- [ ] Fonts don't cause layout shift
- [ ] Dynamic content doesn't shift anything
- [ ] No content injection without placeholder
Conclusion
Fast website = better rankings + lower Google Ads costs + more conversions
Priority order:
- âś… Optimize images (biggest single lever)
- âś… Eliminate render-blocking resources
- âś… Enable CDN and caching
- âś… Reduce and optimize JavaScript
- âś… Prevent CLS through dimensions and placeholder reservations
Expectation: A well-optimized website (all Core Web Vitals green) can improve organic traffic by 5-15% and reduce Google Ads CPC by 10-25%.
FAQ about Website Speed & Core Web Vitals
What are Core Web Vitals and why do they matter?
Core Web Vitals are three Google-defined metrics: LCP (loading speed), INP (responsiveness) and CLS (visual stability). They measure the actual user experience on your website. Since 2021, they're an official Google ranking factor. Websites with good Core Web Vitals have better chances of higher organic rankings and lower Google Ads CPCs.
How do I measure my Core Web Vitals?
Best with PageSpeed Insights (pagespeed.web.dev) – there you'll see both real user data and simulation results. Google Search Console shows overall performance of all URLs. For detailed analysis: Chrome DevTools (Lighthouse tab). All tools are free.
What's the most important quick win for better performance?
Optimize images! This is almost always the single biggest lever. Convert images to WebP or AVIF, compress to 80% quality, use responsive sizes (srcset) and lazy load images below the viewport. Image optimization alone can often improve LCP by 1-3 seconds.
Do Core Web Vitals affect my Google Ads Quality Score?
Indirectly yes. Landing Page Experience is one of three Quality Score factors. A slow landing page leads to higher bounce rate and worse user experience, which lowers Quality Score. Lower Quality Score = higher CPC = less reach per budget. A fast landing page can reduce CPC by 10-25%.
How often should I check Core Web Vitals?
Monthly in Google Search Console. After every major website change (new design, new features, plugin updates) test immediately with PageSpeed Insights. Especially after adding new third-party scripts (chat, tracking, ads) – these are frequently INP killers.
What if my CMS (WordPress etc.) is slow?
5 immediate actions: 1) Install caching plugin (WP Rocket, W3 Total Cache), 2) Auto-convert images to WebP (ShortPixel, Imagify), 3) Deactivate and delete unused plugins, 4) Enable CDN (Cloudflare Free), 5) Update PHP version. If that's not enough: Upgrade hosting from shared to managed WordPress hosting.

Mijo Jurisic
Google Ads consultant & founder of MJ Marketing. Five-plus years of hands-on practice — from a self-taught start to the Google Premier Partner programme with 500+ direct Google Ads clients and €20M+ in managed media spend.
Share this article:


