503 Service Unavailable: Check, Causes and Fixes
Check whether a URL is returning 503 Service Unavailable right now, how fast it answers and where it redirects, then work through the causes below. Enter a URL such as https://example.com.
- Free
- No signup required
- Live HTTP request
Common causes of 503 Service Unavailable
WordPress stuck in maintenance mode
During core, plugin or theme updates WordPress creates a .maintenance file in the site root and answers every request with "Briefly unavailable for scheduled maintenance" and status 503. If the update times out or the browser tab is closed halfway, the file stays and so does the 503. Delete .maintenance over SFTP or the cPanel file manager, then rerun the update.
No healthy backends behind the load balancer
An AWS ALB returns 503 when its target group has no registered or healthy targets. Kubernetes ingress-nginx returns 503 when the Service has no ready endpoints, for example because readiness probes fail or a selector does not match the pod labels. Check target health or kubectl get endpoints before looking at the app code.
The server is out of workers
Every PHP-FPM child, Gunicorn worker or IIS request slot is busy, often because a few slow requests hold them all. New requests queue until the server gives up with 503. Look at what is holding workers (slow queries, calls to slow external APIs), then raise pm.max_children or the worker count only if memory allows.
A rate limit that answers 503
nginx's limit_req and limit_conn reject excess requests with 503 by default, so rate limiting can look like an outage. If that is the source, set limit_req_status 429 so clients can tell "slow down" from "broken", and check whether the limit is too tight for normal traffic.
IIS application pool stopped
On Windows servers, IIS returns 503 when the site's application pool is stopped. Rapid-Fail Protection stops a pool after repeated worker process crashes, so it will stop again after a restart unless you fix the crash shown in the Windows event log.
Planned maintenance without Retry-After
503 is the right code for planned downtime because search engines treat it as temporary. Add a Retry-After header with a number of seconds or an HTTP date so crawlers and API clients know when to come back, and keep the window short: a 503 that lasts for days can get pages dropped.
How to troubleshoot a 503
- Enter the URL and click Check status to see whether the 503 is live.
- Read the error page text: maintenance message, load balancer page or server default.
- Check the layer it names: WordPress files, target group health, ingress endpoints or worker pool.
- Fix the cause and check again; add Retry-After if the downtime is planned.
What does 503 Service Unavailable mean?
503 Service Unavailable means the server is temporarily unable to handle the request. Unlike 500, which says something went wrong, 503 says "not right now": the service is overloaded, in maintenance, or has nothing healthy to send the request to.
Because it is meant to be temporary, a 503 can carry a Retry-After header. Its value is either a number of seconds or an HTTP date. Well-behaved crawlers and API clients wait at least that long before trying again.
That temporary meaning is also why 503 is the correct answer during planned maintenance. Returning 200 with a maintenance page would tell search engines your real content was replaced. Returning 503 tells them to keep the old copy and check later.
The tricky part is that many different layers can send a 503: the CMS, the application server, the load balancer, a Kubernetes ingress or a rate limiter. The body of the response usually says which, so read it before you start changing things.
HTTP/1.1 503 Service Unavailable Retry-After: 600 Content-Type: text/html; charset=UTF-8 <h1>Down for maintenance, back in 10 minutes</h1>
When to check for a 503
After WordPress auto-updates
Plugin updates that ran overnight can leave a site in maintenance mode. A quick check in the morning shows whether the .maintenance file is still there.
During a Kubernetes rollout
If new pods fail their readiness probe while old ones are already gone, ingress-nginx serves 503. Check the public URL while the rollout runs.
Ending a maintenance window
You switched the maintenance page off. Confirm the site really answers 200 again and not a cached 503 from your CDN.
Traffic spikes from a campaign
A newsletter or sale sends a burst of visitors to a WooCommerce or Magento store. If workers run out, the site answers 503 to some of them while it still works for others.
Check something else
- 502 Bad GatewayCheck if a URL returns 502 Bad Gateway right now, and find the cause: upstream down, PHP-FPM, Cloudflare or a load balancer.
- 429 Too Many RequestsCheck if a URL returns 429 Too Many Requests, read Retry-After, and fix rate limits on your server or in your API client.
- Website Down CheckerCheck if a website is down for everyone or just you, with status code, response time and final URL.
- HTTP Status Code CheckerCheck the HTTP status code any URL returns, with response time and every redirect on the way.
Frequently asked questions
How long does a 503 error last?
As long as the cause does. Maintenance mode lasts until it is switched off, overload until traffic drops or capacity grows. If the response has a Retry-After header, that is the server's own estimate.
Is 503 bad for SEO?
A short 503 is the safest way to take a site down, because search engines treat it as temporary and come back. If it lasts several days, pages can start dropping from the index.
What is the difference between 500 and 503?
500 means the server hit an unexpected error while handling the request. 503 means it chose not to handle it because it is unavailable for now. 503 suggests waiting, 500 suggests a bug.
What should Retry-After be set to?
Your honest estimate of when the service will be back, as seconds (Retry-After: 600) or an HTTP date. Avoid very small values during an overload, because clients that retry too fast make it worse.
Why does my host show 503 with resource limits?
Shared hosts such as cPanel servers with CloudLinux limit how many processes each account can run at once. When your site hits the limit, extra requests get 503. Caching pages or upgrading the plan helps.
Can a CDN serve a 503 when my server is fine?
Yes. A CDN can return its own 503 when it is overloaded or cannot pick an origin, and some CDNs cache error responses for a short time. Check the origin directly to tell them apart.
Do not find out from a customer
Maintenance mode left on, a load balancer with no healthy targets, a server out of workers: all look the same from outside. TinyPing checks every 5 minutes and alerts you when:
- the URL returns 503 or another error code
- the server stops answering in time
- the site recovers after an incident
US$6.99 a month or US$47 a year per 50 monitors, team members free. 7-day free trial, no card needed.
Want alerts in team chat? Follow the guide for Slack or Google Chat.