WordPress is slow when you ask it to do too many things at once. The fix is to do fewer of them, not to install another plugin that promises to speed things up.

Every WordPress install reaches the moment where pages feel slow, the admin lags, and you start eyeing your plugin list with suspicion. The instinct is to install a caching or “optimization” plugin and hope for the best. That usually makes things worse, because most of those plugins solve a problem you can fix more cleanly without them.

This is the modern, honest playbook: fewer plugins, a real host, a modern PHP, and two cleanup tools you can run once a month. No magic, no thirty-step settings wizard.

The single biggest lever is plugins

Before anything else, count your active plugins. If the number starts with a 3 (or worse), that is almost certainly the reason your site is slow.

Each active plugin runs code on every page load, every admin click, every AJAX request. Even the well-written ones add a few milliseconds of overhead. Stack twenty of them and you have already spent more than a second before WordPress does anything you actually asked for.

The painful part is that “performance” and “optimization” plugins are often the worst offenders. They register hooks on every page, run their own background tasks, and add admin nag screens. The performance plugin is itself a performance problem 🙂

Audit your plugin list once a quarter. For each one, ask: do I actually use this? If not, deactivate and delete. Not just deactivate. Delete.

Get a real host

The second biggest lever is your hosting service. Cheap shared hosting at three dollars a month is fine for a static landing page. For anything with logged-in users, a shop, or non-trivial traffic, it is a daily drag.

What “a real host” means in 2026:

  • Managed WordPress hosting (Kinsta, WP Engine, Rocket.net, Pressable, SiteGround’s higher tiers). They run optimized server stacks, handle backups, and patch security at the OS level.
  • No shared CPU contention. Cheap hosts cram hundreds of sites onto one machine. If your neighbor on the box is hammering CPU, your site slows down through no fault of yours.
  • PHP-FPM with modern HTTP and caching at the server level. This is invisible to you, and that is the point. It is the host’s job, not a plugin’s.
  • Daily off-site backups included, not bolted on as a paid add-on.

Avoid raw VPS unless you have someone managing it for you. An un-tuned VPS is slower than decent managed hosting, and you also inherit every security patch as your problem.

See our Best Hosting Services for WordPress guide for current recommendations.

Use a modern PHP

Check what PHP version your host is running. In 2026, you want PHP 8.3 or newer. Anything below PHP 8.2 is end-of-life and no longer getting security patches, and PHP 8.2 itself stops getting them at the end of 2026. PHP 7.x is ancient.

The jump from PHP 7 to PHP 8 was a real performance win, sometimes 20 to 30 percent faster on identical code, with zero work on your side. If your host is still on PHP 7.x, that is not a host. That is a museum.

The Empty Request Time

Every request, before anything useful

1CoreWordPress loads
2ThemeLoads next
3Every pluginLoads and runs its init hooks
4Page queryFinally runs
5ResponseStarts being built

Here is a concept we made up at Meow Apps, but it is genuinely useful: the Empty Request Time is how long WordPress spends before it has done anything useful for a single request.

Every page load fires the full WordPress boot sequence: core loads, your theme loads, every active plugin loads, every plugin runs its init hooks, then your actual page query runs. Only after all of that does the response start being assembled. Even a “Hello World” page incurs this entire bootstrap.

Targets:

  • Under 500 ms = healthy.
  • 500 to 2,000 ms = your plugin stack is bloated.
  • Over 2,000 ms = you will hit timeouts regularly. Something is fundamentally wrong.

If you have any Meow Apps plugin installed, visit Meow Apps → Dashboard and start the speed test. It sends ten empty requests and shows the average, next to a disk test and a database test. The technique for finding your guilty plugin is straightforward: note the score, deactivate one plugin, run the test again, compare. Repeat until you find the culprit.

Clean the database

WordPress databases accumulate junk over time: post revisions (often hundreds per post), auto-drafts, expired transients, leftover sessions, orphaned tables from plugins you uninstalled years ago. None of this slows down browsing visitors directly, but it slows down the admin, every search, and every backup.

The clean way to do this in 2026 is Database Cleaner. It detects orphaned data, lets you preview what will be deleted, and runs the cleanup without you touching SQL. Honestly, it is better than most of the older all-in-one cleanup plugins, which is exactly why we built it 😉

If you prefer running raw SQL yourself, here are the basics:

-- Delete all post revisions
DELETE a, b, c FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision';

-- Delete auto-drafts
DELETE FROM wp_posts WHERE post_status = 'auto-draft';

-- Optimize the standard tables
OPTIMIZE TABLE wp_commentmeta, wp_comments, wp_links, wp_options,
  wp_postmeta, wp_posts, wp_terms, wp_term_relationships, wp_term_taxonomy;

You can also disable revisions entirely by adding this to wp-config.php (optional, only if you genuinely don’t use them):

define('WP_POST_REVISIONS', false);
define('AUTOSAVE_INTERVAL', 259200);

Clean the media library

Two cleanups, once a month

Database CleanerRevisions, auto-drafts, expired transients, orphaned data

Media CleanerFiles no post, page or product uses. Pro also scans the filesystem.

Your media library is the other side of the same problem. After a few years, you have hundreds or thousands of images that no post, page, or product actually references. They take storage space, slow down backups, and clutter the media picker.

Media Cleaner scans your install, finds the unused files, and lets you trash them in bulk. The Pro version goes further: it scans the actual filesystem to catch orphaned files that don’t even have a database entry. On an older site, that scan often finds a surprising share of the uploads folder that nothing uses anymore.

What not to use

The three plugin categories that promise speed but usually deliver pain:

  • Caching plugins (WP Rocket, W3 Total Cache, WP Super Cache, and friends). They turn dynamic WordPress pages into frozen copies, which is exactly where the trouble starts. More on that below.
  • “Optimization” plugins that minify, defer, and concatenate scripts. They break things subtly. Six months later you have a broken checkout and no idea which plugin to blame.
  • Security plugins that run firewalls inside PHP. They slow every request and open their own attack surface. Let your host and Cloudflare handle security.

Why caching plugins cause trouble

This isn’t a criticism of the people who build them. WP Rocket, for example, is made by a hardworking team that puts real effort into compatibility. The trouble is the approach itself: a plugin has to guess which pages are safe to freeze, and on a dynamic site, the guesses go wrong in ways that are hard to trace.

  • Stale pagesYou update a page, but visitors keep seeing the old copy until the cache is cleared or expires.
  • Expired security tokensMany forms and widgets carry a WordPress nonce that lasts 12 to 24 hours. A page cached longer than that hands out an expired one, and the form fails.
  • Personal contentMost caching plugins skip logged-in users and the usual cart and checkout pages. Anything else that changes per visitor needs its own exclusion rule, and it’s easy to miss.
  • Delayed scriptsOptions like WP Rocket’s “delay JavaScript execution” make the first paint faster, but a chatbot, a form or a checkout that must run right away waits, or breaks.

Then there is the extra layer. These plugins come with many settings, and a wrong combination can make a site slower or break it. When something goes wrong, the cache is the first suspect, and the first thing we ask in support is to turn it off and try again. Expired tokens, for example, often show up as “Cookie nonce invalid” or “The link you followed has expired”.

When does a caching plugin make sense? On a purely static, informational site: no logins, no store, no forms. Even then, turn on one feature at a time and test after each. And if your whole site really is static, it’s worth asking whether WordPress is the right tool, since a static site generator would be faster and cheaper to host.

Cloudflare as your caching layer

If you genuinely need caching, do it at the edge. Cloudflare’s free tier sits in front of your site, caches static assets (images, CSS, JavaScript), serves them globally, and absorbs traffic spikes. No PHP code runs and there is no plugin to misconfigure. By default it leaves your HTML pages alone, which is why it can’t break logged-in pages. If you later cache full pages there too, make sure logged-in visitors are skipped (Cloudflare’s WordPress add-on, APO, does this for you).

Setup: change your DNS to point at Cloudflare, enable proxy mode, set a sensible cache policy, done. Fifteen minutes once and that is it for the next several years.

Questions people ask

What is the single most effective way to make WordPress faster?Remove plugins you don’t actually use. The number of active plugins is the strongest predictor of WordPress speed. A clean install with 10 plugins outperforms a bloated install with 40, regardless of which caching or optimization plugins are layered on top.

Do I need a caching plugin like WP Rocket?Almost never. Caching at the server level (your host) and at the edge (Cloudflare) covers the same ground without breaking logged-in pages, dynamic content, or your editing flow. Caching plugins solve a problem that has been solved better elsewhere.

What PHP version should WordPress run on in 2026?PHP 8.3 or newer. PHP 8.2 stops getting security fixes at the end of 2026, and PHP 7.x is unsupported and a security liability. Most managed hosts let you switch PHP version in one click.

How many plugins is too many?For a content-only site, more than 15 starts hurting. For a store with logged-in users, more than 30. These are rules of thumb. A single heavy plugin can do more damage than ten well-written ones, so the count is a signal, not a verdict.

What’s the Empty Request Time and why does it matter?It’s the time WordPress spends booting up before it does anything useful: loading core, theme, and every active plugin’s init code. Under 500 ms is healthy. Over 2,000 ms means timeouts and a bad admin experience. Every Meow Apps plugin ships a dashboard that measures it.

Should I optimize the database manually with SQL or use a plugin?Either works. Manual SQL gives you precise control if you’re comfortable with it. Database Cleaner is the cleaner option if you’d rather not, with a preview step so you see what will be deleted before anything happens. Whichever path you pick, back up first.

How much storage can I recover by cleaning the media library?It depends on the site’s history, but on an older site Media Cleaner‘s filesystem scan often finds a good share of the uploads folder that nothing uses. Sites that changed themes or page builders usually have the most.

Is VPS hosting faster than shared hosting?Only if it’s managed and tuned. A raw, un-optimized VPS is often slower than decent managed shared hosting, and you also become responsible for all OS updates and security patches. Unless you have a sysadmin in the loop, managed WordPress hosting is the better default.

Jordy’s take

After fifteen years of building WordPress plugins and watching how sites actually break, my honest opinion is this: the WordPress performance industry exists because people would rather buy a $50 plugin than spend an afternoon deleting things they don’t need. The plugin sells the dream that you can stack complexity and then sprinkle magic on top.

Doesn’t work. Never has. The fastest WordPress site is the simplest one, on a real host, with a recent PHP, cleaned once a quarter. Everything else is theater 🙂

In short

  • Count your plugins. If you have more than 15 on a content site, that is your problem.
  • Spend on hosting before you spend on plugins.
  • Run PHP 8.3 or newer.
  • Aim for Empty Request Time under 500 ms.
  • Clean the database with Database Cleaner (or raw SQL if you prefer).
  • Clean the media library with Media Cleaner.
  • Don’t use caching, optimization, or PHP-firewall plugins. Use Cloudflare and a real host instead.