von WordPress
WordPress bringt einen eigenen Wartungsmodus mit. Das Frontend schaltet automatisch um, sobald zum Beispiel ein Update läuft. Sie können ihn auch selbst auslösen: Legen Sie im Hauptverzeichnis eine Datei namens `.maintenance` an (mit Punkt am Anfang) und schreiben Sie diese eine Zeile hinein:
<?php $upgrading = time();Die Zeitangabe ist Pflicht. WordPress liest die Datei bei jedem Aufruf ein und vergleicht den Zeitstempel mit der aktuellen Uhrzeit. Fehlt er, greift der Wartungsmodus nicht.
Weil `time()` dabei jedes Mal neu ausgewertet wird, bleibt dieser Wartungsmodus bestehen, bis Sie ihn beenden. Wartung fertig? Löschen Sie die Datei, dann ist die Seite sofort wieder da.
Das unterscheidet Ihre Datei von der, die WordPress bei einem Update selbst anlegt: Dort steht ein fester Zahlenwert (`<?php $upgrading = 1712345678; ?>`, ein Beispielwert aus dem Jahr 2024), und den ignoriert WordPress zehn Minuten nach diesem Zeitpunkt.
Sie können das auch selbst so machen, wenn die Wartung von allein enden soll. Dann muss dort aber der aktuelle Unix-Zeitstempel stehen, etwa die Ausgabe von `date +%s` auf dem Server. Ein alter Wert schaltet den Wartungsmodus gar nicht erst ein, und Ihre Seite bliebe während des Updates offen sichtbar. Das Fenster beträgt dabei immer genau zehn Minuten ab dem eingetragenen Zeitpunkt; länger lässt es sich nicht ziehen. Für alles darüber brauchen Sie die `time()`-Variante und löschen die Datei am Ende von Hand.
Die Datei sperrt auch Sie selbst aus, samt `wp-admin`: Die Prüfung läuft ab, bevor irgendjemand angemeldet ist. Wer sie danach vergisst, hat eine Website, die für alle offline bleibt. Sie kommen dann nur noch über FTP, den Dateimanager Ihres Hosters oder SSH an die Datei heran.
Zugegeben, die Standard-Wartungsseite wird keinen Schönheitspreis gewinnen.

Die eigene Vorlage
Für eine schöne Wartungsseite speichern Sie Ihre HTML-Vorlage als `maintenance.php` und laden sie in das Verzeichnis `/wp-content/` (bzw. in Ihr Inhaltsverzeichnis, falls `WP_CONTENT_DIR` verschoben wurde). WordPress bindet sie ein, sobald der Wartungsmodus aktiv ist. Wichtig ist der Abschluss der Datei mit `die();`, wie im Beispiel unten: Ohne diesen Abbruch hängt WordPress seine eigene Meldung hinter Ihre Wartungsseite.
Und noch eine Falle: Die Datei wird geladen, bevor WordPress selbst bereitsteht. Keine Datenbank, kein Theme, keine Template-Tags. Wer aus Gewohnheit `bloginfo()` oder `wp_head()` einbaut, bekommt einen Fatal Error statt einer Wartungsseite. Es gilt reines HTML plus die `header()`-Zeilen, Bilder und CSS über absolute Pfade.
Eine Ausgangsvorlage kann z.B. diese hier sein:
<?php
header( 'HTTP/1.1 503 Service Unavailable', true, 503 );
header( 'Content-Type: text/html; charset=utf-8' );
?>
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Wartung</title>
<style type="text/css">
body {
background: #ffffff;
color: #000000;
}
</style>
</head>
<body>
<h1>Website in Wartung</h1>
<p>Wegen Wartungsarbeiten ist diese Website kurzzeitig nicht verfügbar. Wir sind gleich zurück!</p>
</body>
</html>
<?php die(); ?>Die Statuszeile ist die wichtigste Zeile
Ganz oben im Code steht eine Zeile, die man leicht für Beiwerk hält:
header( 'HTTP/1.1 503 Service Unavailable', true, 503 );Sie sagt Google: Diese Seite ist vorübergehend nicht erreichbar, komm später wieder. Die Standardseite von WordPress sendet diesen Status bereits selbst, zusammen mit `Retry-After: 600`. Sobald Sie eine eigene `maintenance.php` hinterlegen, übernehmen Sie diese Aufgabe, denn Ihre Datei wird eingebunden, bevor der Core seine Header setzt.
Ohne die Zeile liefert der Server Status 200 aus, also „alles in Ordnung”. Google indexiert dann im Zweifel Ihre Wartungsseite anstelle der echten Inhalte. Bei zwanzig Minuten Wartung merkt das niemand. Bei einem Relaunch über ein Wochenende kann es Rankings kosten.
Die `header()`-Zeilen müssen vor jeder Ausgabe stehen, also ganz oben in der Datei vor dem `<!doctype html>`. Steht davor auch nur ein Leerzeichen, meldet PHP „headers already sent” und der Status bleibt bei 200. Moderner als die hartkodierte Protokollzeile ist übrigens `http_response_code( 503 );`.
Weil Ihre Datei den Request beendet, entfällt auch der `Retry-After`-Header des Cores. Setzen Sie ihn deshalb selbst:
header( 'Retry-After: 3600' );Der Wert steht für Sekunden und sollte zur geplanten Dauer passen; hier ist es eine Stunde. WordPress selbst setzt an dieser Stelle 600, also zehn Minuten. Verbindlich ist die Angabe nicht, aber sie ist ein sauberes Signal.
Text für den Wartungsmodus: was auf die Seite gehört
Auf den üblichen Wartungsseiten steht „Wir sind gleich zurück” und sonst nichts. Wer gerade etwas von Ihnen wollte, steht damit vor einer verschlossenen Tür ohne Zettel.
Nennen Sie eine Uhrzeit oder ein Datum, auch grob geschätzt. Schreiben Sie dazu, wie man Sie in der Zwischenzeit erreicht: Eine Wartung ist kein Grund, für einen Tag nicht ansprechbar zu sein, und mancher Anrufer wollte gerade kaufen. Und nennen Sie den Anlass in einem Satz. „Wir spielen ein Update ein” beruhigt mehr als Schweigen, weil klar wird, dass hier niemand insolvent ist.
Textbausteine zum Übernehmen
Für eine kurze, planbare Wartung:
Unsere Website befindet sich gerade in der Wartung. Wir sind gegen 14 Uhr wieder für Sie da. Wenn Sie etwas Dringendes haben, erreichen Sie uns unter 0123 456789 oder per E-Mail an info@ihre-domain.de.
Für eine Störung, deren Ende Sie nicht kennen:
Unsere Website ist derzeit nicht erreichbar. Wir arbeiten an der Behebung und melden uns, sobald alles wieder läuft. In der Zwischenzeit erreichen Sie uns telefonisch unter 0123 456789.
Für einen längeren Umbau:
Diese Seite wird gerade überarbeitet und ist in wenigen Tagen wieder online. Unser Angebot besteht unverändert weiter. Rufen Sie uns gern an: 0123 456789.
Für einen Onlineshop, bei dem Bestellungen betroffen sind:
Unser Shop pausiert wegen Wartungsarbeiten bis voraussichtlich 18 Uhr. Bereits eingegangene Bestellungen sind davon nicht betroffen und werden wie gewohnt bearbeitet. Fragen dazu beantworten wir unter 0123 456789.
Für einen Serverumzug:
Wir ziehen gerade auf einen neuen Server um. Die Seite ist im Laufe des Tages wieder erreichbar. Falls Sie uns in der Zwischenzeit brauchen: 0123 456789.
Und die kurze Variante, wenn nur ein Hinweisbalken Platz hat:
Wartungsarbeiten bis ca. 14 Uhr. Danach sind wir wieder für Sie da.
Was zählt, sind nicht die Formulierungen, sondern dass Uhrzeit, Kontakt und Anlass vorkommen.
Kurze Wartung oder längerer Umbau?
Für Besucher sehen beide Fälle ähnlich aus, technisch sind es verschiedene Dinge.
Bei einer Wartung von Minuten bis Stunden ist der Weg über `maintenance.php` und den 503-Status genau richtig. Die Seite bleibt im Index, an der Struktur ändert sich nichts.
Bei einem Umbau über Wochen wird daraus ein Problem. Eine Website, die wochenlang mit 503 antwortet, verliert Sichtbarkeit, die man danach mühsam zurückholt. Besser ist eine schlanke Übergangsseite, die normal mit Status 200 ausgeliefert wird und sagt, was Sie anbieten und wie man Sie erreicht.
Zwei Dinge gehören dabei mitbedacht. Die alten URLs sollten erhalten bleiben oder gezielt weitergeleitet werden, sonst liefern alle Unterseiten denselben Inhalt aus und Google wertet das als Dubletten. Und noch etwas gerät leicht in Vergessenheit: Die Impressumspflicht endet nicht, wenn die Seite gerade eine Baustelle ist. Impressum und Datenschutzerklärung sollten deshalb auch von der Übergangsseite aus erreichbar sein. Wie das im Einzelfall auszusehen hat, klären Sie am besten mit Ihrem Rechtsbeistand.
Was dabei schiefgehen kann
Nach einem abgebrochenen Update bleibt die `.maintenance`-Datei im Hauptverzeichnis liegen. Die von WordPress selbst angelegte trägt einen festen Zeitstempel, ihre Sperre endet also nach zehn Minuten von allein. Ist die Seite danach immer noch weg, liegt es nicht an dieser Datei, sondern das Update hängt tiefer. Anders bei einer selbst angelegten Datei mit `time()`: Die bleibt, bis jemand sie löscht.
Der zweite Klassiker: Auf der Wartungsseite steht mehr, als draußen jemanden angeht. Versionsnummern oder Fehlermeldungen im Klartext gehören nicht auf eine öffentlich erreichbare Seite, und das gilt besonders für die Meldungen, die WordPress bei Datenbankproblemen selbst ausgibt.
Zuletzt der Klassiker, den man sich am leichtesten spart: Die Außensicht prüft niemand. Ein Blick in ein privates Fenster dauert zehn Sekunden und zeigt, was Ihre Kunden tatsächlich vorfinden. Dabei sehen Sie auch, ob der 503 wirklich ankommt.
Wenn sich jemand darum kümmern soll
Wenn Sie sich um Wartung und Updates nicht selbst kümmern möchten, übernehmen wir das mit Hosting, Wartung & Monitoring.
Und wenn niemand mehr da ist, der sich um Ihre Seite kümmert: Wir übernehmen bestehende Websites samt Pflege, Updates und Weiterentwicklung – Website übernehmen.
Wenn Sie sich um Wartung und Updates nicht selbst kümmern möchten, übernehmen wir das mit Hosting, Wartung & Monitoring.
Und wenn niemand mehr da ist, der sich um Ihre Seite kümmert: Wir übernehmen bestehende Websites samt Pflege, Updates und Weiterentwicklung – Website übernehmen.
Sie sind unsicher, ob bei Ihrer Installation alles sauber eingerichtet ist? Schreiben Sie uns über das Kontaktformular, wir sehen es uns an.


