Choose a message for planned work, an unexpected outage or an upgrade, add your site name, when you expect to be back and how to reach you. You get a single HTML file to show visitors, plus the 503 status and Retry-After header that tell search engines the downtime is temporary.
| Piece | Purpose | Where it is set |
|---|---|---|
| Maintenance page | Tells people what is happening and when you return | The HTML file from this tool |
| 503 status code | Marks the outage as temporary | Server, host or app code |
| Retry-After header | Says when to check again, as seconds or a date | Server, host or app code |
| robots.txt | Should keep working normally, not return 503 | Leave it out of the maintenance rule |
Updated
A friendly page is only half the job. If the server sends that page with a normal 200 status, crawlers may treat your maintenance notice as the new content of every URL. This generator writes the page and shows how to send it with the status that keeps your listings intact.
Message preset: Planned work, Unexpected outage, Upgrade
Site or business name: Corner Street Bakery
Heading: We are doing some planned maintenance
Message: Our site is offline for scheduled work so it runs better for you.
Expected back (shown to visitors): Today at 3 PM
Contact email: [email protected]
maintenance.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Corner Street Bakery: We are doing some planned maintenance</title>
<style>
body { margin: 0; min-height: 100vh; display: grid; place-items: center; font: 17px/1.6 system-ui, sans-serif; background: #f6f5f2; color: #1f1f1f; }
main { max-width: 520px; margin: 24px; padding: 32px; background: #fff; border-radius: 16px; box-shadow: 0 2px 12px rgba(0,0,0,.08); }
h1 { font-size: 1.6rem; line-height: 1.25; margin: 0 0 12px; }
.site { font-weight: 700; color: #555; margin: 0 0 16px; }
a { color: #1d4ed8; }
</style>
</head>
<body>
<main>
<p class="site">Corner Street Bakery</p>
<h1>We are doing some planned maintenance</h1>
<p>Our site is offline for scheduled work so it runs better for you.</p>
<p><strong>Expected back:</strong> Today at 3 PM</p>
<p>Need us now? Email <a href="mailto:[email protected]">[email protected]</a></p>
</main>
</body>
</html>Pick the example that matches how your site runs. Each one sends the 503 status, a Retry-After value and a no-store cache rule, then the page itself.
Retry-After here is one hour in seconds. A date also works.
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
Cache-Control: no-store
Content-Type: text/html; charset=utf-8
<!doctype html> ...your maintenance page...Status and headers must be sent before any output, so this goes at the very top of the entry file.
<?php
http_response_code(503);
header("Retry-After: 3600");
header("Cache-Control: no-store");
readfile(__DIR__ . "/maintenance.html");
exit;A tiny server that answers every request with the page, except robots.txt, which keeps returning a normal file.
import { createServer } from "node:http";
import { readFileSync } from "node:fs";
const page = readFileSync("maintenance.html");
const robots = "User-agent: *\nAllow: /\n";
createServer((req, res) => {
if (req.url === "/robots.txt") {
res.writeHead(200, { "Content-Type": "text/plain" });
return res.end(robots);
}
res.writeHead(503, {
"Retry-After": "3600",
"Cache-Control": "no-store",
"Content-Type": "text/html; charset=utf-8",
});
res.end(page);
}).listen(8080);
Planned work: say what is being improved and when it ends. An unexpected outage: apologise briefly, say you are on it, and give a contact. An upgrade: tell people what will be better afterwards, which turns a delay into something to look forward to.
Whatever the preset, include a way to reach you. A store owner can still take an order by email or phone while the checkout is offline.
Many hosted platforms have their own maintenance or password mode, and you cannot always set headers yourself. Check what status code that mode sends before relying on it for a long window.
Google's guide to pausing an online business recommends an informational error page with a 503 status instead of all content. A 503 says the server is temporarily unable to handle the request, so your real pages are not replaced in search.
Either a number of seconds, such as Retry-After: 3600, or an HTTP date, such as Retry-After: Thu, 15 Oct 2026 15:00:00 GMT. Google asks for a best effort date or duration.
No. A status code is sent by the server before any HTML, so a plain file cannot change it. Your host's settings, server configuration or application code must send it.
Google does not give a fixed number of days. Its crawling documentation says 5xx errors slow crawling down and that indexed URLs are preserved but eventually dropped, so keep the window short.
No. A coming soon page is for a site that has not launched yet. This page is for a live site that is briefly unavailable.
Related: How to make a coming soon page, Website maintenance checklist, Google Search Console guide, Website maintenance packages.
Start for free or see all free tools. We.Inc is free to start, with no card needed. AI building is on paid plans from $20 a month.
We.Inc is an AI-powered website builder you can resell under your own brand. Launch a branded client dashboard, bill on Stripe Connect, and deliver AI-generated websites in minutes. White-label plans start at $99 a month for 25 client sites, with a 7-day free trial and no per-site fees.