A slow WordPress site costs you in more ways than one: visitors bounce, search rankings suffer, and conversions drop. The good news is that WordPress performance optimization isn’t mysterious — it comes down to a handful of well-understood levers you can pull in a fairly predictable order.
This guide walks through those levers one by one. Treat it as a checklist. You don’t need to do everything at once, and you don’t need to be a developer to understand what each step accomplishes.
1. Right-size and convert your images
Images are usually the single biggest contributor to page weight. Two separate problems tend to hide here:
- Wrong format. Many sites still serve JPEG or PNG when a modern format would produce a smaller file at the same visual quality. AVIF is typically about 30–50% smaller than JPEG at comparable quality, with WebP as a slightly less efficient but very well-supported alternative.
- Wrong size. An image uploaded at 3000px wide but displayed at 600px on screen forces every visitor’s browser to download pixels they’ll never see. This is extremely common on WordPress sites where images are uploaded once and never revisited.
The fix is to convert images to a modern format and serve a size that actually matches where the image appears — including different sizes for mobile versus desktop, via a responsive srcset.
2. Optimize your CSS
Every WordPress theme and page builder loads CSS, and most of it loads the same way on every page whether that page needs it or not. Two techniques matter here:
- Critical CSS. This is the small subset of styles needed to render what’s visible without scrolling (“above the fold”). When this CSS is inlined directly into the page’s HTML, the browser can start painting content immediately instead of waiting on an external stylesheet to download.
- Deferred CSS. Everything else — styles for content further down the page, rarely-used components, etc. — can load after that first paint without the visitor noticing any delay.
On top of that, most WordPress sites accumulate unused CSS over time: leftover theme styles, plugin styles for features you don’t use, page-builder framework CSS that only applies to blocks you removed months ago. Trimming what’s genuinely unused shrinks every page load.
3. Lazy-load below-the-fold media
Lazy-loading tells the browser to skip downloading an image or video until the visitor is about to scroll to it. This is one of the simplest, highest-value changes you can make because it directly reduces how much needs to load before the page feels “done.”
WordPress has supported native lazy-loading (via the loading=”lazy” HTML attribute) on images since version 5.5, so a lot of this happens automatically. The nuance is making sure it’s applied correctly — and, just as important, making sure it’s not applied to the one image that should load immediately (more on that next).
4. Identify and prioritize your LCP element
LCP (Largest Contentful Paint) is one of Google’s Core Web Vitals — it measures the moment the largest visible element (usually a hero image, banner, or large headline) finishes rendering. It’s one of the clearest signals of how “fast” a page feels to a real visitor, and it directly affects your Core Web Vitals scores.
The LCP element needs the opposite treatment from everything else on the page: instead of being lazy-loaded, it should be prioritized. That means:
- Never lazy-loading the LCP image.
- Using fetchpriority=”high” or an equivalent hint so the browser fetches it early.
- Making sure the critical CSS needed to display it is inlined, not blocked behind an external stylesheet.
Getting this one element right often has a bigger impact on your Core Web Vitals report than a dozen smaller tweaks elsewhere.
5. Reduce or defer JavaScript
JavaScript is expensive in three ways: it has to download, then parse, then execute — and execution competes with the browser for the same thread that’s trying to render your page. Common sources of JavaScript bloat on WordPress sites include page builders, marketing/analytics scripts, chat widgets, and plugins that load their scripts on every page regardless of whether they’re used.
Practical steps:
- Defer or async non-essential scripts so they don’t block rendering.
- Only load a plugin’s JavaScript on the pages where that plugin’s feature actually appears.
- Audit third-party scripts (ads, trackers, embeds) periodically — they’re an easy source of creep.
6. Use caching and a decent host
No amount of front-end optimization compensates for a server that’s slow to respond in the first place. Two fundamentals:
- Caching. A caching plugin (or caching built into your host) serves a pre-built version of your page instead of rebuilding it from PHP and database queries on every single visit. For most WordPress sites this is a foundational, non-negotiable step.
- Hosting. Shared hosting on an overloaded server will bottleneck everything else you do. If your Time to First Byte (TTFB) is consistently slow even with caching enabled, the host itself is often the limiting factor.
7. Keep your plugin and theme footprint lean
Every active plugin is a potential source of extra CSS, JavaScript, and database queries — even ones you rarely think about. It’s worth periodically reviewing what’s installed and asking:
- Is this plugin still in use?
- Does it load assets on pages where its feature doesn’t even appear?
- Is there a lighter-weight way to get the same result (a theme feature instead of a plugin, for instance)?
This isn’t about running the fewest plugins — it’s about making sure each one pulls its weight.
Measuring your results
Once you’ve made changes, don’t guess — measure. Two free resources are the standard here:
- Google PageSpeed Insights gives you a page-by-page score along with a breakdown of Core Web Vitals (LCP, CLS, INP) and specific opportunities for improvement.
- The Core Web Vitals report in Google Search Console shows how real visitors experience your site over time, aggregated across the whole site rather than a single test run.
Test before and after each significant change so you know what actually moved the needle. Check both mobile and desktop — mobile scores are typically lower and matter more for search ranking.
Where AWP fits into this checklist
Everything above is achievable manually, but the image and CSS work in particular — sections 1 and 2 — is tedious to do by hand across a large, already-published site. That’s the specific gap AWP (Accelerate Website Pages) is built to close.
AWP is a free WordPress plugin. When you run a personalized optimization on a page, an optional cloud service (the AWP Exchange Server) looks at that page’s public output and works out the right image size per device and which CSS is critical for first paint. It sends back an instruction set — and your own WordPress site does the rest: it encodes right-sized AVIF variants directly into your own media library and stores the critical and deferred CSS for that page.
At serve time, your site then delivers AVIF images through a responsive srcset, inlines the critical CSS, loads the rest of the CSS after paint, and applies correct lazy-loading and LCP-priority hints automatically.
A few things worth knowing:
- Your images and content never leave your server as files — the cloud step only measures image dimensions, never contents, and retains nothing.
- Everything is applied at the output layer. Your original posts, pages, and uploaded media are never modified, so the optimization is fully reversible.
- AWP also includes an Images module (local AVIF conversion, EXIF stripping, max-dimension limits) and a CSS module (critical/deferred/footer CSS delivery) for handling new content going forward.
Whether you tackle this checklist by hand or let AWP automate the repetitive parts, the underlying goal is the same: serve visitors exactly what they need, no more and no less, as fast as your server can send it.
