Post 1444
Wordpress

RSS-Feed funktioniert nicht – XML Parsing Error beheben

Ein häufiges WordPress-Problem: Der RSS-Feed wirft einen XML Parsing Error und ist für Feed-Reader und Aggregatoren unbrauchbar. Meist steckt eine unsichtbare Leerzeile am Anfang der Ausgabe dahinter – verursacht durch einen falschen Zeilenumbruch in einer Konfigurationsdatei.

Das Symptom

Beim Aufruf des RSS-Feeds im Browser erscheint eine Fehlermeldung wie:

XML-Verarbeitungsfehler: XML oder Text-Deklaration nicht am Anfang der Entität
Adresse: https://example.com/feed/
Zeile Nr. 2, Spalte 1:

Oder in englischsprachigen Browsern:

XML Parsing Error: XML or text declaration not at start of entity
Location: https://example.com/feed/
Line Number 2, Column 1:

Das Problem: XML verlangt, dass das Dokument exakt mit <?xml beginnt. Steht davor irgendein Zeichen – auch ein unsichtbarer Zeilenumbruch oder Whitespace – ist das Dokument für Parser ungültig.

Die Ursache: Leerzeile in wp-config.php

In WordPress-Multisite-Installationen enthält die wp-config.php einen besonderen Abschnitt mit Multisite-Konfiguration. Wenn nach dem schließenden ?>-PHP-Tag (oder nach dem letzten Code-Block ohne PHP-Closing-Tag) ein Zeilenumbruch oder Leerzeichen steht, wird dieser als Ausgabe an den Browser gesendet – noch bevor WordPress den RSS-Feed aufbaut.

Konkretes Beispiel: In der wp-config.php stand am Ende des Multisite-Blocks:

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
// ... weitere Multisite-Einstellungen ...
?>
                          ← dieser Zeilenumbruch ist der Übeltäter

PHP gibt alles außerhalb von <?php ... ?>-Tags direkt aus – also auch diesen Zeilenumbruch. Der RSS-Feed beginnt dann mit einem Newline-Zeichen statt mit <?xml.

Die Lösung: Return-Zeichen entfernen

Die wp-config.php per SSH oder SFTP öffnen und den fehlerhaften Zeilenumbruch entfernen:

nano /var/www/vhosts/example.com/httpdocs/wp-config.php

Ans Ende der Datei navigieren. Falls ein schließendes ?> vorhanden ist – entfernen. PHP-Dateien brauchen kein Closing-Tag; es ist sogar Best Practice, es wegzulassen, um genau dieses Problem zu vermeiden. Sicherstellen, dass nach dem letzten Code-Zeichen kein Leerzeichen, Zeilenumbruch oder anderes Whitespace-Zeichen folgt.

Korrekte letzten Zeilen der wp-config.php:

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

Kein ?> danach, kein Zeilenumbruch nach der letzten Zeile.

Weitere Quellen für vorangestellte Ausgabe

Wenn das Problem nach dem Beheben der wp-config.php weiterhin besteht, gibt es weitere verdächtige Dateien:

functions.php des Themes: Gleiche Ursache – Zeilenumbruch nach ?> am Dateiende. Prüfen und ggf. das Closing-Tag entfernen.

Plugin-Dateien: Besonders ältere Plugins mit schlechter Code-Qualität. Das Deaktivieren aller Plugins und Test des Feeds hilft bei der Eingrenzung.

BOM (Byte Order Mark): Manche Editoren speichern PHP-Dateien mit einem UTF-8-BOM am Dateianfang. Dieser ist für Browser unsichtbar, bricht aber XML-Feeds. Mit file oder hexdump prüfen:

hexdump -C wp-config.php | head -2

Wenn die erste Zeile mit ef bb bf beginnt, ist ein BOM vorhanden. Entfernen mit:

sed -i '1s/^//' wp-config.php

Schnelltest: Was wird wirklich ausgegeben?

Mit curl lässt sich prüfen, womit der Feed tatsächlich beginnt:

curl -s https://example.com/feed/ | head -c 100 | xxd

Ein korrekter Feed beginnt mit 3c 3f 78 6d 6c (ASCII für <?xml). Steht davor 0a (Newline) oder 0d 0a (Windows-Zeilenumbruch), ist der Übeltäter eine Datei mit nachgestelltem Whitespace.

Fazit

XML Parsing Errors im RSS-Feed haben fast immer dieselbe Ursache: ein Zeichen vor dem <?xml-Tag. Die häufigste Quelle ist ein Zeilenumbruch nach einem PHP-Closing-Tag in wp-config.php oder einer Plugin-/Theme-Datei. Die Lösung ist einfach – das Closing-Tag entfernen und sicherstellen, dass PHP-Dateien ohne nachgestelltes Whitespace enden.