WordPress-FehlerMeldungen von WordPress

WordPress-Warnung „headers already sent“: Ursache finden und abstellen

Die Warnung bedeutet: Eine PHP-Datei hat schon Text an den Browser geschickt, bevor WordPress Header wie Weiterleitungen oder Cookies setzen konnte. Schuld sind fast immer Leerzeilen oder Leerzeichen vor „<?php“ oder nach „?>“, ein unsichtbares BOM am Dateianfang oder eine andere PHP-Warnung, die zuerst ausgegeben wurde. Die Meldung verrät die Stelle: Hinter „output started at“ stehen Datei und Zeile. Entfernst Du dort die Ausgabe, verschwindet die Warnung.

So sieht die Meldung aus

  • Warning: Cannot modify header information - headers already sent by (output started at …)
  • Warning: session_start(): Session cannot be started after headers have already been sent
  • Error: Cookies are blocked due to unexpected output. For help, please see this documentation or try the support forums.
  • Fehler: Cookies sind wegen einer unerwarteten Ausgabe gesperrt. Hilfe findest du in dieser Dokumentation (engl.) oder wende dich an die Support-Foren.

Woran es liegt.

Leerzeichen vor <?php oder nach ?>

Alles außerhalb der PHP-Tags schickt der Server sofort an den Browser, schon eine einzelne Leerzeile. Steht so etwas am Anfang oder Ende der wp-config.php oder einer functions.php, ist die Ausgabe gestartet. Spätere Header schlagen dann fehl.

Unsichtbares BOM am Dateianfang

Manche Editoren speichern UTF-8-Dateien mit einer Byte-Reihenfolge-Markierung, kurz BOM. Diese drei Bytes sieht man im Editor nicht, PHP gibt sie aber als Text aus. Die Meldung zeigt dann auf Zeile 1 der Datei.

Eine andere Warnung kam zuerst

Ist die Fehleranzeige eingeschaltet, schreibt PHP Hinweise wie „Deprecated“ oder „Warning“ direkt in die Seite. Genau diese Ausgabe löst die Warnung zu den Headern aus. Die eigentliche Ursache ist dann die erste Meldung weiter oben.

Ausgabe mit echo an der falschen Stelle

Ein Plugin oder eingefügter Schnipsel gibt mit echo, print oder var_dump etwas aus, bevor WordPress fertig ist. Oft ist es Testcode, der nach der Fehlersuche vergessen wurde.

Pufferung auf dem neuen Server fehlt

Mit der Einstellung output_buffering hält PHP die ersten Kilobytes einer Seite zurück. Kleine Ausgaben fallen dann nicht auf. Nach einem Umzug zu einem Server ohne Pufferung erscheint die Warnung plötzlich, obwohl sich am Code nichts geändert hat.

So behebst Du den Fehler.

Leg vor jeder Änderung eine Sicherung von Dateien und Datenbank an. Geh die Schritte der Reihe nach durch und prüf nach jedem, ob die Seite wieder lädt.

  1. Die Meldung richtig lesen

    Die Warnung enthält zwei Pfade. Entscheidend ist der in Klammern hinter „output started at“: Dort begann die Ausgabe, die Zeilennummer folgt nach dem Doppelpunkt. Der Pfad am Ende, oft wp-includes/pluggable.php, zeigt nur, wo WordPress danach scheiterte. Diese Datei änderst Du nicht.

  2. Datei sichern und im Code-Editor öffnen

    Lade die Datei aus der Klammer per FTP herunter und leg eine Kopie beiseite. Öffne sie in einem Editor, der Leerzeichen und Kodierung anzeigt, zum Beispiel Visual Studio Code oder Notepad++.

  3. Leerzeilen vor <?php und nach ?> löschen

    Die Datei muss mit „<?php“ ganz oben in Zeile 1 beginnen, ohne ein Zeichen davor. Nach einem schließenden „?>“ am Ende darf nichts mehr folgen. Am sichersten entfernst Du das „?>“ am Dateiende ganz. Bei reinen PHP-Dateien ist das erlaubt und in WordPress üblich.

  4. BOM entfernen

    Zeigt die Meldung auf Zeile 1 und ist davor nichts zu sehen, steckt fast immer ein BOM in der Datei. Speichere sie als „UTF-8“ statt „UTF-8 with BOM“ oder „UTF-8-BOM“. Per SSH findest Du alle betroffenen PHP-Dateien mit dem Befehl unten.

    Terminal (SSH)
    grep -rl --include='*.php' $'^\xEF\xBB\xBF' wp-config.php wp-content/
  5. Frühere Warnungen zuerst beheben

    Stehen über der Warnung weitere Meldungen, kümmere Dich zuerst um die oberste. Auf einer Live-Seite gehören Fehlermeldungen außerdem ins Protokoll statt auf den Bildschirm. Mit diesen Zeilen in der wp-config.php landen sie nur noch in wp-content/debug.log.

    wp-config.php
    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    define( 'WP_DEBUG_DISPLAY', false );
    @ini_set( 'display_errors', 0 );
  6. Ausgaben im eigenen Code entfernen

    Stammt die Stelle aus einem Schnipsel, such dort nach echo, print_r oder var_dump außerhalb von Vorlagen. Code, der weiterleitet oder Cookies setzt, muss vor jeder Ausgabe laufen, etwa auf dem Hook init oder template_redirect.

  7. Plugin als Auslöser eingrenzen

    Führt der Pfad in einen Plugin-Ordner, aktualisiere das Plugin oder deaktiviere es unter Plugins → Installierte Plugins. Bleibt die Warnung danach weg, melde sie dem Entwickler mit dem vollständigen Text.

  8. Beim Hoster nach output_buffering fragen

    Taucht die Warnung erst nach einem Serverwechsel auf, frag den Hoster, ob output_buffering aktiv ist. Den Wert einzuschalten verdeckt das Problem aber nur. Sauber gelöst ist es erst, wenn die Ausgabe aus der Datei verschwunden ist.

Zuletzt geprüft am 25. September 2026.

So kommt er nicht wieder.

  • PHP-Dateien immer als UTF-8 ohne BOM speichern und das schließende ?> am Dateiende weglassen.
  • Auf der Live-Seite Fehlermeldungen ins Protokoll schreiben lassen statt auf den Bildschirm.
  • Testausgaben mit var_dump oder echo nach der Fehlersuche sofort wieder löschen.
  • Die wp-config.php nur in einem Code-Editor bearbeiten, nie in einem Textprogramm.

Fragen zu Cannot modify header information: headers already sent

Was bedeutet „headers already sent“ bei WordPress?
PHP wollte einen Header setzen, etwa eine Weiterleitung oder ein Cookie, hatte aber schon Text an den Browser geschickt. Header müssen vor jeder Ausgabe kommen. Wo die erste Ausgabe passierte, steht in der Meldung hinter „output started at“.
Warum kann ich mich wegen der Warnung nicht einloggen?
Beim Login setzt WordPress Cookies und leitet danach weiter. Beides sind Header. Kommt vorher eine Ausgabe, fehlen die Cookies. WordPress meldet dann „Cookies are blocked due to unexpected output“.
Warum tritt der Fehler nur auf einem Server auf?
Viele Server puffern die ersten Kilobytes einer Ausgabe. Dort fällt eine Leerzeile nicht auf. Auf einem Server ohne Pufferung erscheint dieselbe Leerzeile sofort als Warnung. Die Ursache steckt in beiden Fällen in der Datei.
Reicht es, die Warnung auszublenden?
Nur, wenn die frühe Ausgabe selbst eine angezeigte Warnung war. Stammt sie von einer Leerzeile, einem BOM oder einem echo, scheitern Weiterleitungen und Cookies trotzdem. Entferne deshalb die Ursache in der genannten Datei.

Lieber eine Website, die einfach läuft?

Wir bauen Websites, die schnell laden und ohne Update-Stress laufen. Oder wir übernehmen Deine WordPress-Seite samt Pflege. Erst Dein Paket, dann ein Termin per Video.

Kevin Baum im Videocall an seinem Schreibtisch, im Hintergrund eine Holzlattenwand mit farbigem Licht.

Erst Dein Paket, dann der Termin

Im Preisrechner tippst Du an, was Dich bremst. Du siehst sofort Dein Paket mit Preisspanne. Danach wählst Du direkt einen Termin, das Gespräch läuft per Video.

Dein Preis in 2 Minuten