Skip to content

How to actually hit 99.9% WordPress uptime

99.9% uptime still allows 43 minutes of downtime a month. Where those minutes go on a WordPress site, and the habits that keep you inside the budget.

Nearly every host prints “99.9% uptime” on the pricing page. Almost none of them explain that 99.9% still allows your WordPress site to be down for 43 minutes every month, and that hitting even that modest number takes real engineering, not just a good host. Most guides stop at the math. This one is about the other side: where those 43 minutes actually go on a WordPress site, and how we close each gap.

What 99.9% really costs you

The math is worth pinning down first, because the marketing rounds it to “basically always up”:

Uptime Downtime per month Per year
99% (“two nines”) 7.2 hours 3.65 days
99.9% (“three nines”) 43.8 minutes 8.76 hours
99.99% (“four nines”) 4.4 minutes 52.6 minutes

Two things jump out. A host promising “99%” is quietly reserving the right to be down three and a half days a year. And the jump from three nines to four is not a small polish. It is a roughly ten times harder engineering problem. For most business WordPress sites, a real, honestly-measured 99.9% is the sensible target. Four nines is a different budget and a different architecture, and most sites do not need it.

Your uptime SLA is not your uptime

Here is the sentence that trips people up: a host’s 99.9% SLA covers their infrastructure, meaning power, network, and the hypervisor. It says nothing about the far more common ways a WordPress site actually goes down. In our incident logs, the hosting company is rarely the culprit. The 43 minutes almost always come from inside the tent:

  • A plugin or theme update that white-screens the site
  • A PHP fatal error after a version bump
  • A traffic spike the current plan cannot absorb
  • A database that fell over under load or ran out of connections
  • An expired TLS certificate that never auto-renewed
  • A backup or cron job that pegged the CPU at the wrong moment

You could host on the most reliable platform on earth and still miss 99.9% because of a Tuesday-afternoon plugin update. Uptime is something you engineer on top of a good host, not something you buy from one.

Kill the deploy-time downtime first

The single biggest source of self-inflicted downtime we see is updates run straight on production. Someone clicks “update” on a plugin, it conflicts with another, and the site is white for however long it takes to notice and roll back. That is not bad luck, it is a missing process.

The fix is boring and it works: a staging copy where updates land first, a quick smoke test, then promote to production. Pair it with a backup taken immediately before any change, so rollback is minutes not hours. On sites we maintain, this one habit removes the majority of downtime, and it costs nothing but discipline. Our tested comparison of WordPress backup methods gets into which ones actually restore fast when you need them, which is the part that matters here.

Catch the slow failures before your visitors do

Some outages announce themselves; many creep. A disk fills over a week. A database connection count climbs as traffic grows. Memory leaks until PHP starts killing workers. None of these trip a simple “is the homepage up” check until they have already caused an outage.

Two layers of watching cover it. An external uptime monitor pinging the site every minute tells you the instant it goes hard-down. Server-side threshold checks on disk, memory, load, and database connections warn you while there is still time to act. The external ping tells you the house is on fire; the internal checks smell the smoke first. You want both, because each is blind to what the other catches.

Give the database and PHP room to breathe

When a WordPress site falls over under load, the database is usually where it breaks. The application layer scales more forgivingly than a MySQL instance starved of connections or memory. A few unglamorous wins buy most of the resilience:

  • Full-page caching so most visitors never hit PHP or the database at all
  • Object caching with Redis so logged-in and dynamic requests stop hammering the DB
  • Sane PHP worker and MySQL connection limits matched to the box, not left at defaults
  • Enough RAM headroom that a traffic bump does not trigger the OOM killer

Under a real traffic spike, a cached page is served in a couple hundred milliseconds and never touches the database, while an uncached one drags the whole box down with it. Caching is not only a speed feature, it is an uptime feature. Our writeup on concrete WordPress speed wins covers the same stack from the performance angle.

Plan the maintenance you can actually schedule

Some downtime is chosen, and chosen downtime should never cost you a visitor. Kernel patches, PHP upgrades, big plugin migrations: do them at your genuine low-traffic hour, behind a proper maintenance page, ideally validated on staging first. A five-minute planned blip at 4am on a Sunday does not dent 99.9%. The same work fumbled live at noon on a Monday can blow your whole monthly budget in one go. The difference is not skill, it is scheduling.

The honest target

Chasing 100% is a mug’s game. Even the hyperscalers do not claim it, because hardware, networks, and software all fail eventually. The goal is not zero downtime; it is downtime that is rare, short, and mostly on your terms. A real 99.9% on WordPress comes from a handful of habits: update through staging, back up before every change, watch from both inside and outside the box, cache aggressively, and schedule the disruptive work. None of it is exotic. It is just done consistently, which is exactly the part most sites skip. If you would rather that consistency were someone else’s job, keeping sites inside that 43-minute budget is what our ongoing WordPress support and maintenance is for.

Start here

Hit this one
yourself?

If any of the above is happening on your stack, send us the symptoms. We triage the same day and quote before we start.

Which layer is on fire?
Your details stay with us. Always.