---
title: "Say when you'll be back · Agent Wranglers"
url: https://agentwranglers.se/playbook/website/errors-and-outages/maintenance-pages
id: WEB-221
level: Recommended
updated: 2026-10-22
build: a2a6bdfed830
tokens: 857
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Say when you'll be back

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Errors and outages](https://agentwranglers.se/playbook/website/errors-and-outages.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-22.

- ID: WEB-221
- Level: Recommended
- Chapter: [Errors and outages](https://agentwranglers.se/playbook/website/errors-and-outages.md)
- Rule: During planned maintenance, answer 503 with `Retry-After` and a clear page. Keep the health check working.
- Check: With the switch on, `curl -sI` on a page answers 503 with `Retry-After`, and the health check answers 200.
- How: Add a maintenance switch. When it is on, pages answer 503 with `Retry-After` and `Cache-Control: no-store`, while the health check stays up. Never answer 200 or redirect to a maintenance page, or search engines index it in place of your pages. Keep it under a day, because search engines start dropping pages after a few days of 503. Post the news on a separate status page, as [Keep users informed](https://agentwranglers.se/playbook/operations/incidents/status-updates.md) says.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### nginx example

```nginx
# Turn on with: touch /var/www/maintenance.on
location = /healthz { proxy_pass http://127.0.0.1:8080; }
location / {
  if (-f /var/www/maintenance.on) { return 503; }
  proxy_pass http://127.0.0.1:8080;
}
error_page 503 /maintenance.html;
location = /maintenance.html {
  root /var/www;
  add_header Retry-After 1800 always;
  add_header Cache-Control no-store always;
  internal;
}
```

## Sources

- [RFC 9110 (503 Service Unavailable)](https://www.rfc-editor.org/rfc/rfc9110#status.503)
- [Google crawling docs (HTTP status codes)](https://developers.google.com/crawling/docs/troubleshooting/http-status-codes)
- [Google Search Central – Temporarily pause or disable a website](https://developers.google.com/search/docs/crawling-indexing/pause-online-business)

## Related rules

- OPS-28 [Keep users informed](https://agentwranglers.se/playbook/operations/incidents/status-updates.md) in Operations and observability
- OPS-73 [Show each part's state on the status page from outside checks](https://agentwranglers.se/playbook/operations/incidents/status-page.md) in Operations and observability
- SEO-85 [Keep crawlers off 5xx and 429 answers for more than a day](https://agentwranglers.se/playbook/seo/crawling-and-indexing/server-errors-and-crawl-rate.md) in SEO

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/website/errors-and-outages/maintenance-pages">Agent Wranglers website playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Make error pages helpful and honest](https://agentwranglers.se/playbook/website/errors-and-outages/error-pages.md)
- Next: [Keep working when a script or service fails](https://agentwranglers.se/playbook/website/errors-and-outages/graceful-degradation.md)
- [Errors and outages](https://agentwranglers.se/playbook/website/errors-and-outages.md)
