12 December 2025
WP-Cron: the quiet source of WordPress slowness
If your WordPress site is mysteriously sluggish for some visitors but fine for others, WP-Cron is the first thing to suspect. Here's what it is and how to fix it.
By Lewis Cornwell
Every WordPress site has a scheduler called WP-Cron. It runs scheduled tasks, publishing scheduled posts, sending emails, checking for plugin updates, triggering backup plugins.
By default, it runs on every page load. That is a baffling design choice. It means that your visitors trigger your scheduled jobs, and the first unlucky visitor after a scheduled task is due pays the performance penalty of running it.
On a quiet site with no tasks, this barely matters. On a busy site with a chatty backup or email plugin? The visitor who triggered the cron run waits 8 seconds for the page to load. Every other visitor in the meantime waits behind them.
How to tell if this is hurting you
Open your site in Chrome DevTools, Network tab, and reload a few times. If most loads are ~300ms and occasional loads are 3+ seconds with no obvious cause, WP-Cron is the first suspect.
On the server side, slow-query logs and PHP-FPM slowlog will show clusters of slow responses that correlate with your scheduled jobs (typically on the hour, every 15 minutes, or daily at midnight UTC).
The fix, in two steps
Step 1: Disable WP-Cron running on page load. Add to wp-config.php:
define('DISABLE_WP_CRON', true);
Step 2: Run WP-Cron via a real cron job. On our servers, we add a system cron entry that hits wp-cron.php every five minutes, server-side, invisible to your visitors:
*/5 * * * * php /var/www/yoursite.com/wp-cron.php > /dev/null 2>&1
That’s it. Every scheduled task still runs; your visitors never wait for it.
Why most hosts don’t do this for you
Two reasons. One: it requires touching wp-config.php, which means you need actual filesystem access and a willingness to change WordPress defaults. Two: it requires setting up a system cron, which requires root, something shared hosts don’t grant.
Every site we host has this configured by default. It’s one of those silent, invisible wins that doesn’t have a marketing page, but reliably shaves 1-3 seconds off the worst tail of your page load times.
If your current host can’t do this, you’ve outgrown your current host.
- wordpress
- performance