Blog
„Bitte warten." Als meine Website plötzlich Türkisch sprach - und warum WordPress nervt
Man braucht keinen morgendlichen Kaffee mehr, wenn die eigene Website einen unbekannten Text in einer unbekannten Sprache zeigt. Bei einer meiner routinemäßigen Kontrollen traf mich ein riesiger Schreck. Statt meiner guten alten Website lud eine karge, fremdsprachige Zwischenseite. In freundlichem Grün stand darauf ein einzelner türkischer Satz:
„Bitte warten, während Ihre Anfrage überprüft wird."
Eine fremdsprachige Splash-Seite auf der eigenen Domain ist das Lehrbuchbeispiel eines Defacements. Der Verdacht lag nahe. Als WordPress-Betreiber sieht man täglich Brute-Force-Angriffe auf wp-admin. Sie laufen rund um die Uhr und im Minutentakt. Die erste, kalte Frage war klar. Hatte es diesmal einer geschafft? Also nahm ich die Website sofort offline. Dann begann die Analyse. Seite an Seite mit meinem Buddy (Claude Code) zerlegte ich den kompletten Webserver. Wir difften die WordPress-Dateien gegen die Originale. Wir durchsuchten die Datenbank. Cronjobs, Hooks, wp_options, Uploads: alles kam auf den Prüfstand. Jeder Winkel wurde ausgeleuchtet. Gefunden haben wir nichts. Kein fremder Code, keine Backdoor, keine manipulierte Weiterleitung. Die Installation war so sauber, wie eine fünfzehn Jahre alte WordPress-Installation nur sein kann.
Die Auflösung steckte in einem unscheinbaren Detail. Ein Pfad mit ?wsidchk=… und ein wssplashchk-Cookie führten mich auf die Spur. Verantwortlich war der Anti-Bot-Splash von Imunify360 WebShield. Das ist eine legitime Sicherheitssoftware, wie sie viele Shared-Hoster einsetzen. Sie fängt Anfragen kurz mit einer Prüfung ab. Wer sie besteht, bekommt einen Cookie und darf auf die eigentliche Seite. So weit, so harmlos. Nur bestellt habe ich diese Funktion nie. Sie kam still und unangekündigt. Mitgebracht hat sie die Übernahme meines Hosters DomainFactory durch GoDaddy. Von so einem Eingriff in meine eigene Website hätte ich vorher gerne gewusst.
Zum echten Ärgernis wurde die Schutzfunktion erst im Zusammenspiel mit meinem CDN. Cloudflare hatte ausgerechnet diese Challenge-Seite gecacht. Ihr cf-cache-status: HIT stand von Anfang an im Header. Von da an bekam jeder Besucher die Splash zu sehen. Sie lief in einer Endlosschleife und ließ niemanden auf die Website. Und das Türkische? Das ist die letzte kleine Pointe. WebShield lokalisiert seine Splash nach der Herkunft des Besuchers. Cloudflare hatte rein zufällig die türkische Variante eingefroren und für alle konserviert. So sah eine völlig legitime Sicherheitsprüfung plötzlich aus wie eine feindliche Übernahme. Es ist ein bekannter Cloudflare-Imunify-Konflikt. Ganze Forenthreads handeln davon. Es war kein Einbruch, sondern ein Fehlalarm. Harmlos in der Sache. Und trotzdem genau der Anlass, den ich gebraucht hatte.
Warum WordPress nervt
Bei der Spurensuche wühlte ich mich durch die Eingeweide eines WordPress 5.5 auf PHP 7.3. Dabei wurde mir bewusst, wie lange das alles schon läuft. Meine Website basiert seit 2010 auf WordPress (die Domains selbst sind noch viel älter). WordPress war damals der heiße Scheiß. Fünfzehn Jahre lang hielt ich sie mit immer neuen Sonderlocken zusammen.
Die Gründe zum Wechseln häufen sich. Ständig muss man WordPress updaten. Dazu die Themes und die Plugins. Macht man das nicht regelmäßig, klaffen schnell große Sicherheitslücken. Und für ordentliches SEO wird ebenfalls kassiert. Das bekannteste Plugin dafür heißt Yoast. Es packt gefühlt jede zweite nützliche Funktion hinter eine Bezahlschranke. Das sehe ich nicht ein. Bei vielen anderen Plugins ist es dasselbe. Sie sind entweder veraltet (so wie mein Plugin, gleich mehr dazu) oder kostenpflichtig. Und der absolute Hohn: Plugins veröffentlicht man bis heute über SVN. Im Jahr 2026. Irre.
Ehrlich gesagt war die Freude mit WordPress ohnehin verflogen. Das galt bis in den letzten Winkel. Sogar an markdown-shortcode hing kein Herzblut mehr. Dieses kleine Werkzeug hatte ich 2015 geschrieben. Damit konnte ich meine Beiträge endlich in Markdown verfassen, statt im WordPress-Editor. Denn weder der alte WYSIWYG-Editor noch der absurd komplexe Gutenberg-Editor haben mir je wirklich gefallen. „Damn simple markdown for WordPress via shortcode” lautete die Beschreibung. Über ein Jahrzehnt hat das Plugin genau das zuverlässig getan. Jetzt habe ich es archiviert. Damit muss ich das Plugin auch nicht mehr maintainen. Es hat seinen Zweck erfüllt. Und eigentlich hatte ich meine Posts ohnehin schon immer in Markdown geschrieben. Dann kann man auch gleich einen Static-Site-Generator nehmen.
Warum PHP nervt
PHP und ich, das war einmal eine Liebesgeschichte. PHP 3 fand ich damals richtig gut. Aber seitdem hat die Sprache zu viele Sprünge gemacht. Bei jedem großen Versionswechsel musste ich wieder ran und Code nachziehen. Zwischen PHP 4 und 5 wurde sogar das Objektmodell umgestellt, von Wertkopien auf Referenzen. Die Sprache ist über die Jahre zu einem Flickenteppich geworden. Das geht so gar nicht. JavaScript hat das viel schöner gelöst. Alter Code läuft dort bis heute. Man baut auf, statt ständig umzureißen.
Dazu kommt das Ausführungsmodell. Klassisch fährt PHP bei jedem Request neu hoch und danach wieder herunter. Nichts bleibt bestehen. Und die eingebaute Standardbibliothek ist bis heute ein Durcheinander. Immerhin hat Composer das alte PEAR-Debakel abgelöst. Aber richtig lieb gewonnen habe ich die Sprache nie wieder.
Warum DomainFactory nervt
Getragen hat meine Seite ein Hosting, dem ich längst entwachsen war. Ein Wort zu DomainFactory sei mir erlaubt. Dieser Hoster war einmal richtig gut. Ich war dort selbst Reseller und habe jahrelang für viele Kunden gehostet. Spätestens seit der Übernahme durch GoDaddy geht es aber spürbar bergab. Die ungefragte Schutzfunktion ist dabei nur das jüngste Symptom. Kleines Feedback an das womöglich gar nicht mehr existente Management von DF: niemand mag cPanel. Ich schieße mir lieber ins Knie, als es öfter als notwendig zu bedienen. Wer das entschieden hat, weiß ich nicht. Aber erstens haben die Achtziger angerufen und wollen ihr Interface zurück. Zweitens kommt das Ding direkt aus der Hölle. Features sind kaputt oder fehlen ganz. Und das UI ist einfach unnötig schlimm. Ein eigenes Kapitel ist die Mail-Umstellung auf Office 365. Die kann man ebenso vergessen. Und wo wir schon dabei sind: Wann kommt eigentlich das DomainFactory-Forum zurück? Wollt ihr überhaupt noch Neukunden haben? Oder nur noch die Kuh melken, bis sie tot umfällt? Obwohl, eigentlich wissen wir die Antwort ja.
Günstig ist WordPress-Hosting ohnehin nicht. Eine Seite lässt sich kaum mal eben für fünf Euro betreiben. Entweder legt man ordentlich Geld auf den Tisch. Oder man optimiert aggressiv und cacht am Edge. Genau das hat übrigens mein ursprüngliches Problem verursacht. Grund genug zu gehen. Geblieben ist zuletzt nur diese eine Seite, meine eigene. Mit ihrem Umzug kann ich den Account nun endgültig kündigen.
Was altert, und was nicht
Trotzdem gehört nicht alles Alte ausgemustert. Ich muss nur auf zwei eigene Projekte aus derselben Zeit blicken. Mongo2Go ist eine eingebettete MongoDB für .NET-Integrationstests. Laut Statistiken, Issues und PRs wird es bis heute intensiv eingesetzt. angular-cli-ghpages veröffentlicht Angular-Anwendungen mit einem einzigen Befehl. Laut GitHubs Dependency Graph setzen es über 66.000 Projekte ein. Beide sind alt. Hinter beiden stehe ich unverändert. Gute Technik altert eben in Würde. WordPress zählt für meinen Fall nicht mehr dazu. Das ist keine Abwertung, sondern eine Frage der Verhältnismäßigkeit. Ein voller PHP-und-MySQL-Stack samt Plugins bringt eine große Angriffsfläche mit. Für eine im Kern statische Website mit ein paar hundert Beiträgen ergibt das keinen Sinn mehr. Also: Danke, WordPress.
Hallo Astro
Astro kommt dem würdevoll gealterten Jekyll recht nahe. Nur baut es auf meinem gewohnten Stack auf. Ich bekomme Komponenten, TypeScript und MDX. Das fühlt sich sofort vertraut an. Die einzige Option war Astro dabei nicht. Klassische Generatoren wie Jekyll oder Hugo sind ähnlich schlank, setzen aber auf Ruby oder Go. Große Frameworks wie Next.js können auch statisch bauen, bringen dafür viel Laufzeit und React mit. Aus der Angular-Welt kam Analog in die engere Wahl. Aber dort war mir die Community noch zu klein. Am Ende bot Astro die beste Mischung aus schlank und vertraut.
Was mich überzeugt hat
Das Grundsätzliche zuerst. Meine Website ist heute nur noch eine Sammlung statischer Dateien auf einem CDN. Kein Server, keine Datenbank, keine Laufzeitumgebung. Und damit gibt es nichts großartig zu hacken (außer natürlich den GitHub-Account selbst). Meine Inhalte sind wieder schlicht Markdown, sauber versioniert in Git. Genau das hatte markdown-shortcode auf WordPress einst mühsam nachgebaut. Astro bringt es von Haus aus mit. Überzeugt hat mich am Ende aber erst, was die neue Seite alles kann. Sie sammelt meine Blogartikel automatisch von meinen drei Schwester-Websites ein. Das sind angular.schule, angular-buch.com und agentic.schule. Gefiltert wird auf die Beiträge, die wirklich von mir stammen. So entsteht ein einziger Ort für all meine Texte. Sie zieht meine Angular-Workshops direkt aus der GitHub-Organisation der Angular.Schule. Über einhundert sind es inzwischen. Das Ergebnis kann sich sehen lassen. In Lighthouse steht durchgehend eine glatte 100, in allen vier Kategorien. Die Blogartikel eingeschlossen.
Und weil ich ein Mensch der Tastatur bin, blättere ich mit den Pfeiltasten durch Listen und Artikel. Dazu kommen sanfte View Transitions und eine ruhige Typografie. Die Seite fühlt sich schnell an. Und zwar aus dem einfachen Grund, dass sie es ist.
Die ehrlichen Schattenseiten
Ganz ohne Reibung ging der Umzug natürlich nicht. Claude Code und ich haben ihn gemeinsam gestemmt, vom ersten Diff bis zur letzten migrierten Zeile. Die Migration war vor allem Arbeit. Hunderte Beiträge steckten voller WordPress-HTML und Shortcodes. Da waren Codes wie youtube, chapter und iframe. Dazu kamen ein one_half-Raster und betagte Popcorn.js-Videos. Alles musste in saubere MDX-Komponenten wandern. Was das Migrationstool turndown nicht automatisch schaffte, ging in Handarbeit. Die alten Nutzerkommentare habe ich nicht mitgenommen. Früher hat man unter Blogposts noch kommentiert. Das waren noch gute Zeiten. So viel zur Migration. Doch auch Astro selbst hat seine Kanten. Da sind die responsiven Bilder, die ein leeres alt stillschweigend verwerfen. Da ist Cloudflare Pages, das jede URL per 308 auf einen Trailing Slash umleitet. Am hartnäckigsten war Cloudflares „Rocket Loader”. Er schreibt type="module" um. Damit legte er mir jedes eingebettete Video lahm. Bis ich den Übeltäter fand, verging eine Weile. Und schließlich fehlt der bequeme CMS-Editor. Schreiben heißt jetzt Markdown-Datei und Git. Für mich ist das ein Gewinn. Für nicht-technische Redakteure ist es eine Hürde. Später ließe sie sich vielleicht mit einem Editor wie Keystatic abtragen. Unterm Strich tauscht man das „alles inklusive” von WordPress gegen ein „selbst zusammenstellen”. Also mehr Kontrolle gegen mehr Eigenverantwortung.
Fazit
Der Auslöser war ein Fehlalarm. Das Ergebnis war überfällig. Fünfzehn Jahre WordPress waren keine verlorene Zeit. Die Software hat nur aufgehört, mir Freude zu machen. Das Fundament darunter wurde brüchig, bei Hoster wie PHP wie Plugins. Ich weiß nicht einmal, ob sich WordPress überhaupt noch reformieren ließe. Früher konnte man mal eben etwas mit PHP ins Theme hacken. Diese Freiheit ist heute ein Bumerang. Die Sicherheit ist eine pure Katastrophe. WordPress hat seine Ära hinter sich. In Zeiten von Versionsverwaltung per GitHub und statischem Rendering gibt es deutlich schlankere und sicherere Alternativen. Manchmal braucht es eben eine „Bitte warten”-Seite, die man nicht selbst gebaut hat. Erst dann tut man das, was längst angestanden hätte. Mal schauen, ob Astro für mich die nächsten fünfzehn Jahre durchhält!