Troubleshooting guide · http-status · Published 2026-08-15 · 4 min read

HTTP 503 service unavailable

HTTP 503 service unavailable explained: the maintenance and overload status, examples with Retry-After, and the ordered fixing sequence.

What a 503 means

A 503 Service Unavailable says the server, or the app behind it, is temporarily unable to serve this request, but expects to be back. Unlike a 500, the server is healthy enough to say "not now". Unlike a 502, there was no gateway in the middle to confuse; the app issued the 503 directly. The headers usually carry Retry-After, and it may carry a real number or an HTTP-date the client can parse and wait on.

OwnerTypical messageTrue state
The app in maintenance modeA branded "back soon" pageDeploy or maintenance files are active
nginx/LB rate or upstreamPlain "Service Unavailable"Backend exhausted or drained
Platform (host, Cloudflare)Cloudflare-branded 503Edge or origin slot temporarily unavailable

Causes

The ordered fix

  1. Check the obvious toggle first. A stale .maintenance file, an old deploy marker, or a "maintenance" plugin is the cause nine times out of ten. In WordPress, look for a dead maintenance file in wp-content/ or a plugin still publishing its maintenance page.
  2. Reproduce the state. Ask who else sees the 503: visit in a private window, then curl the home and one deep page. A private window that loads the site normally points to a cache your own browser keeps.
  3. Read the log and the rate. A Retry-After: 600 plus a load-bound error means the server expects you to wait; a Retry-After: 0 plus an app trace means maintenance or a bot attack.
  4. Fix the maintenance marker. Remove the file or toggle the mode and reload. Keep a checklist: deploy scripts must clean the marker in the same job that deploys the app.
  5. If overloaded: scale temporarily (more workers, a second process) or offload a heavy endpoint. On MySQL, confirm the DB is reachable before touching frontend rules.
  6. If the health gate stalled: check the app's health endpoint; a 503 is often the LB eagerness. Fix the process, then bring the instance into rotation.
curl -sI https://example.com/
HTTP/1.1 503 Service Unavailable
retry-after: 300

When 503 is the right answer

A 503 is the correct status during maintenance, deploys, and genuine overload, and it beats a 200 with a "coming soon" page for two reasons. A 200 maintenance page gets cached and ranks, which misleads users and crawlers. A 503 tells bots to come back; you keep the URL in the crawl queue and lose no equity while the gap holds.

Prevention

When to involve a professional

If the 503 line in the log is a timeout or an exhausted connection pool and the page is yours, a host or an AWS/LB specialist will map the backpressure. Do not disable Retry-After or the maintenance file holding the site up; fix the underlying cause first.

Need a website built, fixed, optimised, migrated or replaced?

This technical resource is written by CSMBAC, a small design and development studio. If you would rather hand the problem to a professional, the website service page explains how we build enquiry-ready websites.

Explore website services