WhatsApp alerts when your WordPress site goes down — or WP-Cron quietly stops
WordPress has two failure modes and most monitoring only catches one. The obvious one is the site going down, which an external check finds in a minute. The quiet one is WP-Cron stopping.
WP-Cron is not a real cron. It only runs when somebody visits the site, so on a quiet site it can stall for weeks — taking scheduled posts, backups and subscription renewals with it. The site stays up the whole time and reports nothing wrong.
Add to wp-config.php to run WP-Cron from a real scheduler
// Stop WordPress firing cron on page loads...
define( 'DISABLE_WP_CRON', true );
// ...then drive it from system cron and report in afterwards:
// */5 * * * * curl -fsS -m 20 https://example.com/wp-cron.php?doing_wp_cron >/dev/null \
// && curl -fsS -m 10 https://hb.alertkite.com/p/YOUR_TOKENSetting it up
- Add an HTTP monitor for the site's homepage — that covers the site being down.
- Create a heartbeat monitor with a period slightly longer than your cron interval.
- Set DISABLE_WP_CRON and drive wp-cron.php from real cron, pinging on success.
- Or install the AlertKite plugin, paste one token, and it reports WP-Cron health for you.
Why a plugin cannot monitor uptime
If the site is down, any plugin on it is down too. Uptime has to be checked from outside — that is not a limitation of a particular plugin, it is arithmetic. What a plugin uniquely sees is what happens inside WordPress: WP-Cron firing, fatal errors triggering recovery mode, automatic updates failing.
Watch a page that touches the database
A homepage can be served from a full-page cache long after MySQL has gone away. Monitoring a URL that has to hit the database — a search results page, or a route that skips the cache — catches an outage that the cached homepage will happily hide for an hour.
Keyword checks catch the half-broken deploy
A WordPress site with a fatal error in a template often returns 200 with a blank or partial page. Checking that the page still contains a word you expect — your site name in the footer, a nav item — catches that; a status-code check never will.