Skip to content

WordPress maintenance

WordPress 503 service unavailable: three causes our lab reproduced

In short

A WordPress 503 service unavailable error means the server is up but will not build pages right now. In our 17 Oct 2026 lab it came from three places: a .maintenance file, a stopped PHP service, and every PHP worker busy with a full queue. The page text and the server logs tell you which one you have.

Seeing this on your own site? Send us the address for a free site check, and a written report comes back within 2 business days.

Key points

  • With a .maintenance file in place, every WordPress address returned 503 with a Retry-After header of 600 seconds, while a plain image still loaded.
  • With the PHP service stopped, Apache answered 503 in under a millisecond with its own short page, and its error log said it could not connect to the backend.
  • With both PHP workers busy, new visitors waited 19 seconds and then got the page. The 503s started only once the PHP queue was full too.
  • A shorter server timeout turned the same busy workers into 504 Gateway Timeout, not 503, so the code alone can point you at the wrong fix.
On this page (10)
  1. What does WordPress 503 service unavailable mean?
  2. How did we test it?
  3. What happens when WordPress is left in maintenance mode?
  4. What does a 503 look like when PHP is down?
  5. Do busy PHP workers cause a 503?
  6. Why did the same busy site give a 504?
  7. How do you fix a WordPress 503 service unavailable error?
  8. What did we not test?
  9. Is your site showing a 503 right now?
  10. Questions and answers

What does WordPress 503 service unavailable mean?

A WordPress 503 service unavailable error means the server answered, but said it cannot build the page right now. Unlike a 500, it suggests the problem is temporary. That is true in some cases and not in others.

We made three different 503s on one test site. They look alike in a browser tab, and each one needs a different fix.

Telling those apart on a client site, from its logs and a staging copy, is routine in our WordPress maintenance work.

How did we test it?

Our test site was WordPress 7.1.3 on Apache 2.4.67, and PHP 8.4.13 ran as a separate php-fpm service, as it does at many hosts. We gave that service two workers, which is small but not unusual on a cheap plan. The run took place on 17 Oct 2026.

To start, five addresses answered normally: home, one post, login, the dashboard redirect and a logo PNG. Every change below was followed by curl requests to the same five, with codes and times saved.

What happens when WordPress is left in maintenance mode?

We put a .maintenance file in the site folder with the current time in it, the way WordPress does during an update.

All four WordPress addresses gave a 503 and the same 2,500-byte page: “Briefly unavailable for scheduled maintenance. Check back in a minute.” The response carried a Retry-After header of 600 seconds. The logo PNG still loaded, because a plain image never reaches WordPress.

With the time in the file set 11 minutes back, every address returned 200 again, file still on disk. We wrote up that 10 minute rule, and what to check when the message lasts longer, in our guide to WordPress stuck in maintenance mode.

What does a 503 look like when PHP is down?

Different. We stopped the PHP service and left Apache running.

Every WordPress address returned 503 in under a millisecond, with Apache’s own 339-byte page titled “503 Service Unavailable”. No maintenance message, no WordPress styling. The PNG still loaded, since Apache serves images itself.

Apache’s error log said exactly why: “AH01079: failed to make connection to backend”, after “Connection refused” on the PHP port. Nothing reached the WordPress or PHP logs, because PHP was not there to write them.

When we started PHP again, the next request returned 200. The site did not recover on its own while PHP was stopped.

Do busy PHP workers cause a 503?

Not at first. We added a test plugin that holds a PHP worker for 20 seconds, as a stuck call to an outside service would, and sent two of those requests so both workers were busy.

A normal visitor who arrived a second later did not get an error. The request waited 19 seconds and then got the home page. PHP’s own log wrote “server reached pm.max_children setting (2), consider raising it”. The PNG kept loading at once the whole time.

Then we cut the PHP queue to one waiting slot, the listen.backlog setting in the PHP-FPM configuration, and sent six slow requests. Four got a 503 after 7.9 seconds. Apache logged “attempt to connect to 127.0.0.1:9736 … failed” and “failed to make connection to backend”. The two that got a place returned 200 after about 21 seconds.

So a busy site first feels slow. The 503s arrive when the queue in front of PHP is full as well.

Why did the same busy site give a 504?

The server’s timeout decides it. Apache’s Timeout directive defaults to 60 seconds, and at 60 our waiting visitor got the page.

We set it to 5 seconds and ran the same test. All three requests, the two slow ones and the normal one, got a 504 Gateway Timeout after 5.0 seconds, and Apache logged “The timeout specified has expired”. The PHP workers kept running behind it, so a request sent right after still got a 504. Once the slow requests finished, the home page was back to 200 in 0.06 seconds.

Busy workers can show up as a slow page, a 504 or a 503, depending on settings you may not see on shared hosting. Treat all three as one clue.

How do you fix a WordPress 503 service unavailable error?

  1. Read the page. If it says “Briefly unavailable for scheduled maintenance”, look for .maintenance in the folder that holds wp-config.php, check the time inside, and delete it once no update is running.
  2. If it is a short plain page titled “503 Service Unavailable”, open /wp-includes/images/w-logo-blue.png on your domain. An image that loads while pages fail puts the fault behind the web server, in PHP.
  3. Open the server error log in your hosting panel. “Failed to make connection to backend” means PHP is stopped or full. Restart PHP from the panel, or ask the host to, if that option is missing.
  4. If the 503s come and go, look for a PHP log line about max_children. Then find the slow requests: a plugin calling an outside service, a cron job, or a crawl hitting search pages.
  5. Raise the worker count only after that. More workers holding the same slow call will fill up again.

When we take on a 503 as a one-off fix, we work in that order: the page text, then the Apache log, then PHP’s own log, then whichever plugin or setting kept the workers tied up. The site comes back, and you get a short written note on the cause.

What did we not test?

  • nginx or LiteSpeed, which have their own error pages and may not use the same codes.
  • A host’s branded 503 page, or a CDN such as Cloudflare in front of the site.
  • A plugin or firewall that sends a 503 on purpose, for example to slow down bots.
  • Real traffic. Our busy workers came from a test plugin, and our one slot queue is far smaller than a host would set.

Seeing a 500 instead? Our WordPress 500 internal server error lab covers .htaccess faults and PHP fatals.

Is your site showing a 503 right now?

Tell us what the page says and when it started. Those two facts usually separate maintenance mode, PHP and the host.

Not down now, but slow at busy times? Our free site check looks at the whole site, with a written reply within 2 business days. For a single known problem, one-off WordPress fixes lists what we take on.

Where did these facts come from?

Questions and answers

What causes a 503 service unavailable error in WordPress?

In our lab, three things. A .maintenance file left in the site folder, a PHP service that had stopped, and more requests than the PHP workers and their queue could hold. A plugin or a host can also send a 503 on purpose; we did not test those.

How do I know if my 503 is maintenance mode?

Read the page. WordPress maintenance mode shows "Briefly unavailable for scheduled maintenance. Check back in a minute." A 503 from the server itself shows a short plain page titled "503 Service Unavailable" instead.

Will a WordPress 503 fix itself?

Sometimes. In our lab the .maintenance page stopped by itself once the file was over 10 minutes old, and the busy worker 503s stopped when the slow requests finished. A stopped PHP service stayed down until it was started again.

Why did I get a 504 and not a 503?

Both can come from PHP workers that are all busy. In our lab, when the server would wait 60 seconds, a new visitor waited and got the page; when it would wait only 5 seconds, it gave up with a 504. The 503 came only when the PHP queue itself was full.

Rather hand this to us? See the WordPress maintenance plan Want to know if the problem stops here? Ask for the free site check.

We write up one real fix or build a few times a week on LinkedIn. Follow DistroCode there: linkedin.com/company/distrocode