- Home
- Monitoring
- WordPress monitoring
WordPress monitoring: the checks a WordPress site actually needs
A keyword check on the home page, a status check on wp-login.php, a heartbeat for scheduled jobs, SSL expiry and DNS. Assemble them once per site from the standard monitor types.
- 30 monitors free
- No credit card
- Failures confirmed from other regions
- Amsterdam97msfound
- London142msfound
- Keyword“Add to cart” present
- Forbidden“Error establishing” absent
- TTFB55 ms
Illustrative example
Check it now, in your browser
No account. WordPress monitoring: type a target and see roughly what it looks at. Nothing you type is stored.
One real request from a Tenium checker. It follows redirects and reads the certificate. Nothing is saved.
The public test checks that the page answers. The keyword rule itself (must contain, must not contain) runs in a saved monitor.
What a wordpress monitor looks at
Home page keyword
Require a phrase from your footer and forbid "Error establishing a database connection". A 200 page that is really an error no longer passes.
wp-login.php reachable
A status check on the login URL shows when a security plugin or WAF rule has locked everyone out.
Scheduled jobs
A heartbeat pinged from a real system cron job tells you when backups or scheduled publishing quietly stop.
Certificates and domain
SSL / domain monitors cover the certificate and registration expiry for each client site.
WordPress monitoring: what an alert looks like
The same event arrives as an e-mail, a Telegram message or a Slack card. This is the wording the channels send; the host, times and numbers are made up.
clienta.com
clienta.com · Keyword "Add to cart" missing · confirmed from Amsterdam (AMS), London (LON)
| Error | Keyword "Add to cart" missing |
|---|---|
| Confirmed by | Amsterdam (AMS), London (LON) |
| Since | 14:02:11 UTC |
| Target | clienta.com |
| Next step | Check the server / hosting panel. Acknowledge so the team knows you are on it. |
AcknowledgeOpen incident
<h1>Error establishing a database connection</h1>
Tenium · checked from Amsterdam · 14:02 UTC
Tenium alerts
🔴 DOWN · clienta.com · Keyword "Add to cart" missing · confirmed from Amsterdam (AMS), London (LON)
reply /ack or acknowledge · open incident
TTenium APP 2:02 PM
DOWN · clienta.com
clienta.com · Keyword "Add to cart" missing · confirmed from Amsterdam (AMS), London (LON)
- Error: Keyword "Add to cart" missing
- Confirmed by: Amsterdam (AMS), London (LON)
- Target: clienta.com
AcknowledgeOpen incident
Check the server / hosting panel. Acknowledge so the team knows you are on it. · checked from Amsterdam
WordPress monitoring: e-mail, Discord and Google Chat work on every plan; Slack, Telegram, Teams and Mattermost start on Starter. There are no SMS or voice-call alerts.
Response time with a threshold
Every check stores how long the response took. WordPress monitoring: drag the threshold and see when a slow-response alert would have fired.
How fast you find out
Pick a plan to see its check interval and how long a failure takes to reach you, including the confirmation round.
WordPress monitoring: a failure lands at a random moment between two checks, so on average you wait half an interval, and the worst case is a whole interval plus the confirmation window. A single failing region is not enough: all two regions must agree before an incident opens. The other regions are asked straight away, and we allow up to 60 seconds for the answers.
How to set up wordpress monitoring in 30 seconds
Add the home page as a Keyword monitor
Present: a phrase from the footer. Absent: Error establishing a database connection.
Add wp-login.php as an HTTP monitor
Use the full URL. Expected status 200-299 normally; use 200-399 if your login redirects to https.
Add a heartbeat for scheduled work
Call its ping URL from the end of a server cron or a WP-CLI job that runs wp cron event run --due-now.
Add SSL / domain, then tag the set
Give all of a site's monitors the same tag so you can find them together.
What each error means
This is the text an incident shows in its Error line, the usual cause, and the first thing to look at.
KEYWORDKeyword "Add to cart" missing
The page answered but the phrase is not in it: a cached error page, a half-rendered template, an empty product feed. This is exactly what status-only checks miss.
Shown as: Keyword "Add to cart" missing
KEYWORDForbidden keyword "Error establishing a database connection" present
The error text appeared in the body, usually with a cheerful 200. WordPress and many CMSs do this when the database is gone.
Shown as: Forbidden keyword "Error establishing a database connection" present
BLOCKEDBlocked by WAF challenge (Cloudflare)
A bot challenge replaced the page, so the keyword cannot be found. Flagged as blocked, not down; allow the checker and it clears.
Shown as: Blocked by WAF challenge (Cloudflare)
TIMEOUTTimeout after 15 s
The page never finished. Keyword checks read up to about 1 MB of the body, so a very slow origin fails here before the text is judged.
Shown as: Timeout after 15 s
CERT_HAS_EXPIREDTLS error: certificate has expired
The certificate is no longer valid, so the page cannot be fetched securely. Renew it.
Shown as: TLS error: certificate has expired
WordPress monitoring by plan
| Free $0/mo | Starter $7/mo | Pro $29/mo | Agency $59/mo | |
|---|---|---|---|---|
| Full monitor set | — | ✓ | ✓ | ✓ |
| Monitors | 30 | 100 | 300 | 1000 |
| Fastest interval | 5 min | 1 min | 30 s | 30 s |
| Regions | 1 | 2 | 2 | 2 |
| Custom headers | — | — | ✓ | ✓ |
| Response-time alerts | — | — | ✓ | ✓ |
| Escalation to a second contact | — | — | ✓ | ✓ |
| Status pages | 1 | 3 | 10 | Unlimited |
JSON/API, DNS, UDP, heartbeat, SSL / domain and change checks start on Starter; HTTP(S), keyword, ping and port checks are on every plan.
Other monitor types
A monitor set for one WordPress site
WordPress has no special monitor type, and it does not need one. A solid set is built from the standard types, and for a typical site it takes five to six monitors:
- Keyword on the home page: a footer phrase must be present, and "Error establishing a database connection" must be absent (Starter plan and above).
- HTTP on /wp-login.php with the default 200-299 range, or 200-399 if it redirects to https.
- JSON API on /?rest_route=/ with the path name and your site title as the expected value; this works without pretty permalinks and proves PHP, the database and the REST layer together.
- Heartbeat for scheduled work (next section).
- SSL / domain for the certificate and registration dates.
- Optionally DNS for the A record, or an HTTP monitor that expects 403 on /xmlrpc.php if you have blocked it on purpose.
wp-cron is not a clock
By default WordPress runs scheduled tasks only when somebody visits the site. A quiet site therefore publishes scheduled posts late, sends mail queues late, and skips backups. Worse, a busy one can trigger the same job twice. The fix that most hosting guides recommend is to set DISABLE_WP_CRON to true in wp-config.php and run the task from a real scheduler every five minutes: */5 * * * * cd /var/www/site && wp cron event run --due-now && curl -fsS https://YOUR-APP-HOST/hb/hb_TOKEN. Create a heartbeat with a period of 600 seconds and a grace of 300. Now a missing ping means the actual scheduler stopped, which also explains why backups and scheduled posts went missing.
Heartbeats start on Starter, and the allowances are generous: 20 on Starter and 100 on Pro, so one per site is feasible even for a studio.
The first five minutes after an update
Most WordPress outages begin with a plugin, theme or core update. Three failure screens deserve their own absent-phrase checks, because each can be served with a normal status code by a cache or a custom error template: "There has been a critical error on this website" (the fatal-error screen), "Briefly unavailable for scheduled maintenance" (an update that stalled and left the maintenance file behind), and "Error establishing a database connection". Put them in separate keyword monitors or pick the two you see most; the failure message then names which one appeared.
Pair the checks with a maintenance window when you update on purpose, so a few minutes of deliberate downtime do not alarm the client or ruin the uptime figure in the monthly report.
Caches can hide an outage
Page caches and CDNs are designed to keep serving the last good copy, which is wonderful for visitors and terrible for monitoring. With the database down, a cached home page can stay green for hours. Keep at least one monitor on something that must run PHP and touch the database: wp-login.php is never cached by sensible setups, and the REST root at /?rest_route=/ is dynamic as well. If your cache serves error pages for a while, the absent-phrase check catches those too.
The reverse also happens: a security plugin or WAF treats a monitoring IP as an attacker. Wordfence, Cloudflare rules and fail2ban may all block it after a few requests. Allow-list the checker IP list or send an X-Tenium-Secret header that your rule can match, and the monitor is no longer part of your attack surface. A bot challenge shows up as a "blocked" incident rather than "down".
Running forty sites
At five monitors a site, the Pro plan's 300 monitors cover about 60 sites and Agency's 1000 cover 200. Consistency matters more than cleverness: use the same monitor names (Client A, home keyword), the same tags, and the same alert contacts everywhere, so incidents read the same on the status page and in the report. A CSV import can create the monitors in bulk; the import docs list the columns. On the Agency plan, give each client a workspace with their own viewer login and branded monthly report; see for agencies.
Know the boundary. Tenium looks at your site from outside, so it will tell you the site is unreachable, which a plugin cannot do after the site is gone. It does not see plugin versions, file changes, malware, or backups. Tools like ManageWP and MainWP do that job, and they complement rather than replace this.
WordPress monitoring questions
Do I need a plugin installed on the site?
No. Every monitor works from the outside through public URLs. The only thing you add is a line in the server's scheduler for the cron heartbeat, if you want one.
Which WordPress URLs are safe to monitor?
Pages that are public and cheap to render: the home page, /wp-login.php and /?rest_route=/. Avoid /wp-admin, which redirects to the login for anonymous users, and never include credentials in a monitored URL.
Is there a ready-made WordPress template?
Not as a one-click product. The set above is quick to create by hand or by CSV import, and tags keep the group together.
Will multisite work?
Treat each site in the network as its own hostname and monitor them separately, plus one REST check on the main site. A network-wide failure then shows up as many incidents at once.
Start wordpress monitoring free
30 monitors on the Free plan, no card needed, with failures confirmed from other regions (2 regions live today). Upgrade when the client list grows.