Real-world optimization guide. We walk through the exact code changes, plugin configurations, and server tweaks that achieved a perfect Google PageSpeed score.
EN

Case study: Achieving 100/100 core web vitals on a high-Traffic WordPress site

4.90 /5 - (190 votes )
Last verified: March 1, 2026
Experience: 5+ years experience
Table of Contents

Everyone says they optimize for speed. Few can prove it. This week, we completed a performance overhaul for a client in the competitive “Home Decor” e-commerce space.

The Starting Point:

  • Mobile Score: 42/100
  • LCP: 4.8s
  • INP: 450ms (Poor)
  • CLS: 0.25 (Layout shifting everywhere)

The Result (After 4 Weeks):

  • Mobile Score: 100/100
  • LCP: 1.2s
  • INP: 48ms
  • CLS: 0.00

This wasn’t magic. It was engineering. Here is exactly how we did it.


1. Fixing LCP (largest Contentful paint)

The Villain: The Hero Slider. The client used a heavy Revolution Slider. It loaded 4MB of JavaScript before showing the first image.

The Fix:

  1. Delet the Slider: We replaced the slider with a static CSS Grid layout.
  2. Fetch Priority: We added <img fetchpriority="high"> to the main hero image. This tells the browser “Download this BEFORE the logo and the menu.”
  3. AVIF Format: We converted all PNGs to AVIF. The 800KB header image became 45KB.

Result: LCP dropped from 4.8s to 1.9s instantly.


2. Solving CLS (cumulative layout shift)

The Villain: Custom Fonts and Lazy Loading.

  1. Fonts: The text appeared, then the custom font loaded, shifting the layout by 10 pixels.
  2. Images: Lazy-loaded images appeared and pushed text down because they lacked width and height attributes.

The Fix:

  1. Font Preloading: We added <link rel="preload"> for the primary font and used font-display: optional. If the font doesn’t load in 100ms, the browser sticks with the system font forever (no shift).
  2. Aspect Ratio: We enforced aspect-ratio: 16/9; on all image containers in CSS. The browser reserves the white space even before the image downloads.

Result: CLS dropped to 0.00.


3. Crushing INP (interaction to next paint)

The Villain: Third-Party Scripts. Chat widgets, Facebook Pixel, Google Tag Manager, Hotjar. They were all fighting for the main thread. When a user clicked “Menu”, the browser was too busy tracking the user to open the menu.

The Fix: Partytown. We moved all distinct third-party scripts to a Web Worker using Partytown. This runs the heavy tracking code on a background thread. The main thread (UI) remains buttery smooth.

Result: INP dropped from 450ms to 48ms.


4. The 2026 secret weapon: Speculation rules API

We didn’t just want it to be fast. We wanted it to feel instant. We implemented the Speculation Rules API.

When a user hovers over a product card, the browser:

  1. Prefetches the HTML of the next page.
  2. Prerenders it in a hidden background tab.

When they click, the page load is literally 0ms. It is already there.


5. Server-Side optimization (the infrastructure)

You can’t get a 100 score on a $5 server. We migrated the client to WordPress VIP layout (or consistent high-end architecture).

  1. Redis Object Cache: Database queries for the “Menu” and “Options” are cached in memory.
  2. Edge Caching (Cloudflare Enterprise): The HTML of the homepage is served from a server in Warsaw, not the origin in New York. TTFB dropped from 600ms to 40ms.

6. Business impact

Why did we do all this? Not for vanity metrics.

  • Bounce Rate: Decreased by 18%.
  • Ad Spend: CPC dropped by 12% (Google Ads Quality Score improved due to speed).
  • Revenue: Organic traffic grew 40% in 2 months as Google rewarded the “Page Experience” signals.

Conclusion: Speed is not technical debt. It is a revenue lever.

Is your WooCommerce site leaking money due to slowness? WPPoland optimizes for green scores and green bank accounts.

Article FAQ

Frequently Asked Questions

Practical answers to apply the topic in real execution.

SEO-ready GEO-ready AEO-ready 3 Q&A
Did you use WP Rocket?
Yes, but as a baseline. The 100 score required custom code for 'Critical CSS' generation on dynamic product pages and Speculation Rules for prefetching.
How did you fix INP on WooCommerce?
The 'Add to Cart' AJAX button was the bottleneck. We refactored it to use a Web Worker (Partytown) to keep the main thread idle.
Is this possible on Shared Hosting?
Extremely difficult. This result relied on Redis for Object Caching and a CDN for Edge Caching. Shared hosting TTFB (Time to First Byte) is usually too slow for a 100 score.

Need an FAQ tailored to your industry and market? We can build one aligned with your business goals.

Let’s discuss

Related Articles