WordPress Cron – How WP-Cron Works, Why It Slows Down Your Site, and How to Replace It with System Cron
Published: March 20, 2026 · Author: Marcin Szewczyk-Wilgan
WordPress has a built-in background task scheduling mechanism – WP-Cron. It handles publishing scheduled posts, checking for updates, running backups, sending newsletters, and dozens of other operations. The problem is that WP-Cron is not a real cron – it does not run continuously but only fires when someone visits the site. This leads to two scenarios: on low-traffic sites tasks are delayed, and on high-traffic sites – every page load adds server overhead by checking the database. The solution is simple and recommended even by the official WordPress documentation: disable WP-Cron and replace it with system cron.
How WP-Cron Works
WP-Cron is a “virtual cron” – an emulation of system cron implemented in PHP. It was designed in the era when WordPress primarily ran on shared hosting without access to system crontab.
WP-Cron Performance Problems
WP-Cron was designed as a pragmatic solution for limited hosting environments. On modern sites with traffic, caching, and performance requirements – it becomes a problem.
Overhead on every page load
Every page view triggers a database check for cron tasks. On a site with 10,000 visits per day, that is 10,000 extra SQL queries. If there are no free PHP-FPM processes, cron waits in the queue, blocking the response for the user. This is a measurable impact on TTFB.
Tasks fail to run
A blog with a dozen visits per day – a post scheduled for 8:00 AM will not publish if the first visitor arrives at noon. Backups, update checks, syncing – everything waits for a visit. This is unreliable for time-critical operations.
Conflict with page caching
Caching plugins serve static pages, bypassing PHP. If most requests hit the cache – WP-Cron is not triggered. Tasks pile up and fire all at once when someone hits a non-cached page – causing a server load spike.
Public endpoint
The wp-cron.php file is publicly accessible. Bots can call it repeatedly, forcing repeated task checking and execution. This consumes server resources and can lead to duplicate operations – e.g., double email sends or multiple backups.
Solution: Disabling WP-Cron and Configuring System Cron
The official WordPress documentation (Plugin Handbook) recommends disabling WP-Cron and replacing it with system cron. This is a simple, safe operation with immediate results. Here is the step-by-step procedure:
When Optimizing WP-Cron Makes Sense
Not every site requires a full WP-Cron replacement with system cron. Here are scenarios where optimization is critical:
Summary
WP-Cron is a pragmatic solution from the shared hosting era – but on modern WordPress sites with traffic, caching, and performance requirements, it becomes a burden. Disabling WP-Cron and replacing it with system cron is one of the simplest and most effective WordPress optimizations. The operation takes a few minutes, is recommended by the official documentation, and delivers immediate results – predictable task execution, lower server overhead, and better TTFB.
At WebOptimo, system cron configuration is a standard part of WordPress deployment and care. We optimize task schedules, monitor their execution, and eliminate unnecessary cron entries left by removed plugins. Contact us or check our WordPress care and server administration offer.
Frequently Asked Questions About WordPress Cron
WP-Cron is WordPress’s built-in mechanism for scheduling tasks – publishing posts, backups, updates, emails. It is not a real cron – it only fires when a user loads a page.
Every page load triggers a database check for cron tasks. On high-traffic sites, this means thousands of extra SQL queries. Conflict with caching – cached pages bypass PHP, so cron does not fire.
Add define('DISABLE_WP_CRON', true); in wp-config.php. After disabling, immediately set up system cron – otherwise scheduled tasks will stop working.
In the server’s crontab (SSH or hosting panel), add a task that calls wp-cron.php every 5–15 minutes. Command: */15 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Yes – provided you set up system cron as a replacement. This approach is recommended by the official WordPress documentation. System cron is more reliable and does not add overhead to the site.


