Most WordPress sites lose their PageSpeed score in the same place: render-blocking CSS and JS sitting in the head of every page, whether that page needs them or not. Fixing this isn’t complicated, but it does mean touching code instead of installing another plugin.
Find what’s actually blocking first
Before changing anything, run the page through Chrome DevTools’ Coverage tab. It’ll show you exactly which CSS and JS files are loaded but barely used on that page. On a typical theme-plus-page-builder setup, it’s common to see 60-80% of a stylesheet going unused on any single page.
Deferring scripts without a plugin
WordPress gives you a clean hook for this:
add_filter('script_loader_tag', function($tag, $handle, $src) {
if (is_admin()) return $tag;
$keep_sync = ['jquery-core', 'jquery-migrate'];
if (in_array($handle, $keep_sync)) return $tag;
return str_replace(' src=', ' defer src=', $tag);
}, 10, 3);
Keep jQuery synchronous if anything on the page still depends on it loading first — a lot of older plugins still do, even in 2026.
Splitting critical and non-critical CSS
Inline only what’s needed for above-the-fold content, and load the rest asynchronously:
<link rel="preload" href="/style.css" as="style" onload="this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/style.css"></noscript>
This one change alone tends to move Largest Contentful Paint more than anything else on this list, because the browser stops waiting on a full stylesheet before it paints anything.
What to leave alone
Don’t defer anything tied to layout that happens above the fold — a deferred script that repositions elements after paint causes visible layout shift, which actively hurts your Cumulative Layout Shift score. If a script sets height or position on load, it needs to run early or not be deferred at all.
None of this requires disabling your page builder. It just means being deliberate about what loads when, instead of letting every plugin queue its own assets on every page by default.