Blog · Guides

Uptime Monitoring That Wakes You Before Customers Notice

Most uptime monitoring setups only check one thing: does the homepage return a 200. That catches total outages, but it misses the failures that actually cost you customers, like a checkout page throwing a fatal error while the homepage loads fine. Building a monitoring setup that catches problems before your customers do means thinking beyond a single ping.

Why Homepage-Only Monitoring Isn’t Enough

A WordPress site has many moving parts: PHP-FPM or LiteSpeed handling requests, a database connection, an object cache like Redis, and often a payment gateway or external API. Any one of these can fail while the homepage keeps serving from full-page cache. If your monitor only checks the homepage, a cached page can mask a completely broken checkout flow for hours.

The fix is not more monitors on the homepage. It is monitors on the paths that actually matter to your business: the cart, the login screen, a key REST API endpoint, and anything that touches the database directly and cannot be served from cache.

Choosing Check Intervals

Interval choice is a tradeoff between how fast you find out about a problem and how much load and noise you generate.

  • 1 minute intervals are appropriate for revenue-critical endpoints like checkout or login on stores that cannot tolerate downtime. You will know within a minute or two of a real incident.
  • 5 minute intervals are a reasonable default for the homepage and other cached pages. Full-page caching from LiteSpeed Cache means these checks rarely touch PHP at all, so frequent checks are cheap for the server.
  • 15 minute or longer intervals are fine for secondary pages, sitemaps, or anything that would be an inconvenience rather than an emergency if it broke.

Avoid pushing every monitor to 30 second intervals just because you can. Aggressive polling against uncached, dynamic endpoints (a login form, a search page) adds real load to PHP workers and the database, and during an actual incident that extra load can make recovery slower, not faster.

Monitor From Multiple Locations

A single monitoring location can produce false alarms caused by a routing issue between that one location and your site, not an actual outage. Reputable monitoring services check from several geographically distributed points and only alert when a majority agree the site is down. If you are running your own health checks, replicate this logic: require two or three independent checks to fail before triggering a page. This single change eliminates a large share of nuisance 3 a.m. alerts caused by transient network blips rather than real problems.

If your site sits behind Cloudflare, remember that edge caching and the WAF sit between your monitor and your origin server. That is usually what you want to test, since it reflects what real visitors experience. But it is worth having at least one check that bypasses cache (a cache-busting query string, or a path excluded from caching) so you can tell the difference between “the edge is serving stale content fine” and “the origin server is actually healthy.”

What to Monitor Beyond the Homepage

A well-rounded monitoring plan for a typical WordPress or WooCommerce site includes:

  • Homepage: baseline availability, usually served from cache.
  • Checkout or cart page: this is dynamic and uncached, so it exercises PHP, the database, and often a payment gateway API.
  • Login page (wp-login.php): confirms the database connection and session handling work.
  • A REST API endpoint: many themes and plugins rely on /wp-json/ for search, forms, or headless front ends. A broken REST API can silently break features that never touch the homepage.
  • Scheduled tasks (WP-Cron): cron failures do not usually throw an HTTP error, so they need a different kind of check, described below.
  • SSL certificate expiry: Cloudflare’s Universal SSL handles renewal automatically at the edge, but if you also run origin certificates, monitor their expiry separately.

A Simple Health Check Endpoint

Rather than relying on visual checks alone, it helps to expose a small health check endpoint that confirms the database and object cache are actually responsive, not just that PHP is running. A minimal approach with wp-cli, run as a scheduled system cron job rather than relying on WP-Cron’s page-load trigger:

wp db check --path=/var/www/html
wp cache flush --path=/var/www/html --network

Wrap a command like this in a script that exits non-zero on failure, and have your system cron alert you (via email, a webhook, or your monitoring tool’s API) if the exit code indicates trouble. This catches database corruption or a Redis object cache drop-in that has stopped responding, situations where the site might still return a 200 for cached pages while quietly failing for anything that needs fresh data.

For WP-Cron specifically, disable the default page-load trigger and run it on a real system cron schedule instead, then monitor that the cron process itself is executing on time. A missed cron run rarely produces an HTTP error, so an uptime monitor watching only page responses will never catch it.

Alert Routing That Doesn’t Get Ignored

The best monitoring setup fails if the alerts get muted, buried in an inbox, or routed to a channel nobody watches. A few practical rules:

  • Escalate by severity. A slow homepage is not the same emergency as a failed checkout. Route low-severity issues to a ticket queue or Slack channel, and reserve phone calls or SMS for revenue-impacting failures.
  • Require confirmation before paging. As mentioned above, requiring two or three failed checks from different locations before an alert fires cuts down dramatically on false pages, which is the single biggest cause of alert fatigue and ignored notifications.
  • Set up a real on-call rotation, even a small one. If only one person can ever receive an alert, that person will eventually miss one. A simple rotation with a fallback contact closes that gap.
  • Alert on recovery too. Knowing when a site comes back up, and how long the outage lasted, matters for both your own postmortems and for any uptime commitments you have made to clients.

Some managed hosts, ServerBorn included, run their own infrastructure-level monitoring and will flag origin server issues on their end, but that is not a substitute for application-level checks on your own critical user flows. The host can tell you the server is up; only you can confirm checkout actually works.

Keep the Origin Address Private

If you run your monitoring checks directly against your origin server’s IP address rather than through Cloudflare, you risk exposing that address in logs, DNS records, or third-party tooling. An unpublished origin IP is one of the simplest and most effective protections against targeted DDoS attacks, since attackers cannot flood a server they cannot find. Route your monitoring traffic through the same domain your visitors use, and if a monitoring tool requires a direct IP for some specialized check, treat that credential and configuration with the same care you would any other production secret.

Uptime and Performance Are Related, Not the Same

A site that technically “responds” but takes eight seconds to render is not really up from a visitor’s perspective. Uptime monitoring tells you the server answered; Core Web Vitals tell you whether the experience was good. Keep an eye on both: a healthy site should return quickly (LCP at or under 2.5 seconds), respond to interaction promptly (INP at or under 200 milliseconds), and stay visually stable (CLS at or under 0.1). Pairing synthetic uptime checks with periodic Core Web Vitals monitoring gives you a fuller picture than either one alone.

The Takeaway

Good uptime monitoring is not about adding more checks, it is about checking the right things: real user flows like checkout and login, not just a homepage that might be served entirely from cache. Use multiple monitoring locations and require agreement before you page anyone, watch WP-Cron with a real system-level check, and route alerts by severity so the ones that matter never get lost in the noise. Set it up once, and it will quietly do its job until the day it saves you a very bad afternoon.