Farzad Roozbahani
← Back to blog

How to Speed Up a WordPress Site Without Breaking It

How to Speed Up a WordPress Site Without Breaking It

Every "make WordPress faster" checklist tells you to install a caching plugin, compress images, and pick a good host. All true, all incomplete. What actually matters is the order you do things in, because performance fixes have a habit of breaking each other when applied all at once.

Start by measuring, not guessing

Run the page through Google PageSpeed Insights or an equivalent tool and note the three Core Web Vitals separately: LCP (how fast the main content appears), CLS (how much the layout jumps around while loading), and INP (how responsive the page feels to interaction). Each has a different cause, so "the site feels slow" isn't specific enough to fix.

Caching first, always

A page cache (full HTML pages served without hitting PHP or the database again) is the single biggest win on almost every WordPress site, and it's also the safest — it doesn't touch your code. If your host provides a server-level cache (LiteSpeed Cache is common on Iranian hosting), use that before adding a second caching plugin on top of it; two caching layers fighting each other causes more "why isn't my change showing up" support tickets than any other single issue.

Then object caching, if your host supports it

Object caching stores database query results in memory instead of re-running them on every page load. It matters most on sites with a lot of dynamic content — WooCommerce stores, membership sites, anything logged-in-heavy. Skip it if your host doesn't support persistent object caching (Redis or Memcached); a half-configured object cache is worse than none.

Images: format and loading strategy, not just compression

Compressing a JPEG helps, but converting to WebP and adding native lazy-loading (loading="lazy" — WordPress does this automatically for images below the fold since core added it) usually helps more. The one place to be careful: never lazy-load your hero image or anything above the fold — that actively hurts LCP, since the browser has to wait to discover it needs to load it at all.

Audit plugins before you optimize them

Every inactive plugin still gets scanned on load in some setups, and every active one that enqueues its own CSS/JS on every page — even pages that don't use it — adds weight nobody asked for. Before reaching for a "minify everything" plugin, go through the plugin list and ask honestly whether each one is still needed. I usually find two or three that were installed for a feature that got abandoned months ago.

Database cleanup, carefully

Post revisions, spam comments, and expired transients accumulate for years on sites nobody's touched. Clean them out — but always with a backup first, and never with a plugin that runs automatically on a schedule without you reviewing what it's about to delete.

Last: defer and minify JS/CSS

This step comes last on purpose. Deferring render-blocking scripts and minifying CSS/JS gives real gains, but it's also the step most likely to break something — a slider that stops working, a menu that won't open. Do it last, test every interactive element on the page afterward, and keep the ability to exclude specific scripts from optimization when (not if) something breaks.

Speed work on WordPress is rarely one big fix. It's five or six small, safe changes made in the right order, each one verified before moving to the next.