Switching from UptimeRobot? Import your monitors in one click with a read-only API key.Start free →
  1. Home
  2. Blog
  3. WordPress

WordPress monitoring: 7 things that break

Seven ways a WordPress site fails while still looking up: database errors, plugin fatals, dead wp-cron, bad caches, locked logins, expiry and hacks. How to detect and fix each.

WordPress

A WordPress site rarely fails in a way that a plain “is the server answering?” check understands. The server answers. It answers with a polite error page, a half-rendered theme or a login form that nobody can reach, and it often does so with HTTP 200.

These are the seven failures we see most often on client sites, with the check that catches each and the first move to fix it. A ready-made set of five checks is in the companion post; this one is organised by what breaks.

Where a WordPress site can fail, layer by layer A stack of layers from the domain at the top to the database at the bottom, with the seven failures marked on the layer where they occur: expiry on domain and certificate, bad cache on the cache layer, locked login and plugin fatals on the application layer, hacks on the content, dead wp-cron on the scheduler and the database error on the database. Domain name and DNS TLS certificate CDN and page cache Web server and PHP WordPress core, theme, plugins, login wp-cron (scheduled tasks) Database 6 6 4 2 257 3 1 1 Database error page2 Plugin fatal, white screen3 wp-cron stopped4 Cache serves the wrong page5 Login locked out6 Certificate or domain expiry7 Hack or injected spam
Failures sit at different layers. An external check sees all of them from the visitor's side.

1. The database is gone and WordPress says so politely

What happens: MySQL restarts, runs out of connections or loses its disk. WordPress renders “Error establishing a database connection” and returns it with a normal status code.

Detect: a keyword check on the home page that requires a phrase from the healthy page and forbids Error establishing a database connection. A keyword monitor reads the raw response body, so both rules work without a browser. See keyword monitoring.

First move on the server:

systemctl status mysql          # or mariadb
wp db check                     # WP-CLI, run from the site's directory
df -h /var/lib/mysql            # a full disk stops MySQL

2. A plugin update ends in a fatal error or a white screen

What happens: a plugin or theme update is incompatible with the PHP version or another plugin. The page is either blank with status 200, or a 500. On shared hosting a traffic spike can also produce 503 or 508 “resource limit reached” pages.

Detect: status code plus a keyword that must exist in a healthy page, such as wp-content, which appears in the asset URLs of every properly rendered WordPress page. A blank page contains no such string.

First move: disable plugins without the dashboard.

wp plugin deactivate --all
wp plugin activate woocommerce        # re-enable one by one, starting with the essentials

Without WP-CLI, rename wp-content/plugins to plugins-off over SFTP. If that restores the site, rename it back and rename the individual plugin folders until you find the one at fault.

3. wp-cron stops and scheduled work silently dies

What happens: WordPress runs scheduled tasks when someone visits. On a quiet site, or one where DISABLE_WP_CRON was set without a replacement, scheduled posts, backups, order emails and stock syncs just stop.

Detect: a heartbeat monitor. A scheduled task pings a URL every few minutes and you are alerted when the pings stop. Heartbeats start on the Starter plan; the cron monitoring guide has the full pattern.

First move:

wp cron event list              # what is scheduled, and what is overdue
wp cron event run --due-now     # run overdue events once

If you disabled wp-cron on purpose, make sure a real cron entry runs wp cron event run --due-now every few minutes.

4. The cache serves the wrong page to everyone

What happens: a page cache or CDN stores something it should not: a logged-in admin bar, an empty cart, a “we’ll be right back” maintenance page, or a redirect loop. Visitors see it until the cache is cleared.

Detect: keyword checks on the pages that matter (home, shop, checkout), and look at the response headers. The HTTP headers tool shows cache-control, age and typical CDN headers such as cf-cache-status. An age of several hours on a page that should be dynamic is the clue.

First move: purge the page cache and the CDN, then find out what made the page cacheable. Cart, checkout and account pages must be excluded from caching.

5. Nobody can log in, including you

What happens: a security plugin rate-limits the login, a firewall rule challenges every request, or an update renames the login URL. The public site is fine and the client cannot publish.

Detect: monitor /wp-login.php (or your custom login URL) with a keyword such as user_login. If a WAF blocks the monitor, allow-list it first; the Cloudflare allow-list guide shows how, and the checker IP list has the addresses.

6. The certificate or the domain expires

What happens: renewal automation breaks quietly and browsers show a full-page warning, or the domain lapses and the site becomes a registrar parking page.

Detect: SSL and domain expiry monitors with alerts at 30, 14 and 3 days. Both start on the Starter plan. See the SSL expiry guide for the inventory approach and the one-line openssl check.

7. The site is hacked and still returns 200

What happens: a vulnerable plugin lets an attacker add spam pages, inject links into the footer or redirect mobile visitors. The site stays up and looks normal to its owner for weeks.

Detect: two things together. A keyword rule that must not contain words that have no business on the page (pharma, casino, or the name of a known spam network seen in your logs), and a change monitor on the home page that alerts when its content changes unexpectedly. Change detection starts on the Starter plan; see web change detection.

First move: take a backup before changing anything, compare core files with wp core verify-checksums, and update or remove the vulnerable plugin. Then rotate admin passwords and keys.

Choosing the right keyword for each check

A keyword check is only as good as the phrase you choose. Use a phrase that is in the page when everything works and absent when anything is wrong:

PageMust containMust not contain
Homewp-content or the footer’s company nameError establishing a database connection, Fatal error
Shop or checkoutA product name or Add to cartSorry, this site is experiencing technical difficulties
Loginuser_loginToo many failed login attempts
ContactThe form’s submit button labelThe words Maintenance and Briefly unavailable

Avoid phrases that change often, such as a news headline or a date, or the check fails every time the editor publishes.

False alarms and who gets the alert

Plugin updates, nightly backups and cache rebuilds can make a site slow for a minute. Two settings keep the noise down: a second check that confirms a failure before an alert goes out, and a maintenance window around planned work, so a scheduled update does not count as downtime. Send the first alert to you, not the client, and add the client as a contact only after you trust the setup.

The minimum set per client site

If you only create a handful of monitors for each site, make them these:

  1. Home page: status code, required text, forbidden error strings (covers 1, 2, 4).
  2. Money page (checkout, booking): same.
  3. Login page keyword (5).
  4. A heartbeat for wp-cron (3).
  5. SSL and domain expiry (6).
  6. Change detection on the home page (7), where your plan includes it.

That is six monitors, so a portfolio of 40 sites is 240. On Tenium that fits the Pro plan (300 monitors, $29 a month); the Free plan covers 30 monitors with HTTP and keyword checks, and Starter ($7) adds the heartbeat, SSL, domain and change checks. The WordPress monitoring page describes the full set, and if you also use a WordPress management suite, the Tenium vs ManageWP comparison explains how the two fit together.

Frequently asked questions

Why does my WordPress site show an error but the uptime monitor says it is up?

Because WordPress often returns HTTP 200 with an error message in the page, for example Error establishing a database connection. A status-code check passes. Add a keyword check that requires text which only appears on a healthy page and forbids the known error strings.

How often should I monitor a WordPress site?

Every minute for a shop or lead-generation site, every five minutes for a brochure site. Tenium Free checks every 5 min; Starter ($7) checks every 1 min.

Can I monitor wp-cron?

Yes, with a heartbeat monitor: a scheduled task requests a URL on a regular basis, and you are alerted when the requests stop. Heartbeat monitors start on the Starter plan.

Do I need a plugin to monitor WordPress?

No. The checks that matter are external: they see what a visitor sees, and they keep working when WordPress itself is broken. A plugin cannot report that the site is down because it is down with it.


Related

Related Tenium pages

Monitor your first site free

30 monitors free, checks from 2 regions, no card. SSL and domain expiry from $7 a month.