← All insights

WordPress Core Web Vitals: 12 fixes that actually move the needle

The prioritised fix list every WP performance engagement starts with — twelve fixes ranked by impact.

Most slow WordPress sites are slow for the same reasons. Here’s the prioritized fix list we work through on every CWV remediation engagement — twelve things, in the order they matter, with the rough impact on each.

The order matters

Don’t start with caching. Start with what’s blocking the LCP element. Caching helps repeat visitors, but the first-time-visitor render is what Google measures and what the SEO equity actually depends on.

1. Remove the page builder (huge)

Elementor adds 200–400KB of CSS/JS per page, often blocking render. Removing it is rarely a one-day job — it’s usually a 4–6 week theme rebuild. But it’s also usually the single biggest possible win. Sites we rebuild off Elementor typically drop LCP by 2–4 seconds.

2. Self-host fonts + preload the LCP font (big)

Google Fonts is fast but not as fast as your origin. Self-host the woff2 file, set font-display: swap, and <link rel="preload"> the variable file that drives your LCP element. Typically saves 200–400ms LCP.

3. Image pipeline (big)

WebP/AVIF via ShortPixel or Imagify, explicit width/height on every img tag, native lazy loading below the fold, eager + fetchpriority=”high” on the hero image. Most sites we see lose 1–3s LCP just to oversized hero images.

4. Defer non-critical JavaScript (medium)

GA4, Meta pixel, intercom, hotjar — none of them need to load before render. defer the lot. FlyingPress’s “Delay JS” feature does this without code changes; otherwise enqueue with 'strategy' => 'defer'.

5. Object cache via Redis (medium)

The single biggest server-side win. WordPress hits the database hundreds of times per page; Redis caches those hits. On managed hosts (Kinsta, Rocket.net, Cloudways) it’s a one-click install. On bargain hosts it’s not available — that’s a sign you should switch hosts, not work around it.

6. Drop unused block library CSS (medium)

If you’re using a block theme but not most of WP’s core blocks, you’re shipping ~80KB of CSS for nothing. Conditionally dequeue wp-block-library after auditing what’s actually rendered.

7. Cloudflare in front (medium)

Free tier alone helps. Pro tier with HTTP/3 helps more. APO (Auto-Platform Optimization, $5/mo) caches the rendered HTML at the edge — for static-content WordPress sites it’s a 200–500ms TTFB win.

8. Critical CSS (medium)

Inline the CSS for above-the-fold content; defer the rest. FlyingPress generates this automatically per page. Without it, the browser waits for the full stylesheet before any pixel paints.

9. Disable WP emojis (small but free)

~12KB of inline CSS + JS shipped on every page for a feature 0.1% of sites use. remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); and friends. Free win.

10. Remove jQuery on the front-end (small)

If your theme is custom-built without jQuery, dequeue it for non-logged-in visitors. ~85KB minified, gzipped to ~30KB, but every byte counts.

11. Heartbeat throttle (small)

WordPress’s admin-ajax heartbeat fires every 15s on every admin page. Throttle to 60s and disable on pages that don’t need it. Reduces server load, especially on shared hosting.

12. Audit your plugins quarterly (small but cumulative)

Most slow WP sites are running 30+ plugins. Half of them ship CSS/JS the site doesn’t need. Quarterly audit — what does this plugin do, do we still need it, can we replace three with one? Compounds over time.

The order, again

Page builder removal first if you have one. Then fonts + images. Then JS deferral. Then object cache. Then Cloudflare. Then critical CSS. Then the small wins. Most sites get from “30s LCP, 0.4 CLS” to “1.5s LCP, 0.05 CLS” without rebuilding the site.

Pick a stack. Or pick the team that ships every one of them.