Skip to content
MJ Marketing
Core Web Vitals and Website Speed Optimization
SEO & Web Development
8 min read
Mijo Jurisic

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.

Share:

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
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:

  1. âś… Optimize images (biggest single lever)
  2. âś… Eliminate render-blocking resources
  3. âś… Enable CDN and caching
  4. âś… Reduce and optimize JavaScript
  5. âś… 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%.

Request Performance Audit


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

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:

Share: