WordPress: Weblog als statisches HTML exportieren

Nehmen wir mal an du hast ein Weblog oder ein sonstiges Webprojekt welches mit WordPress betrieben wird. Und eines Tages kommt der Zeitpunkt wo man entweder endgültig oder zumindest für einen längeren Zeitraum nicht mehr bloggen möchte oder es nicht mehr kann.

WordPress-"Export" per Wget

Ursachen dafür können verschieden sein: man startet ein neues Projekt, man hat einfach keine Zeit, Motivation ist futsch, Das Thema interessiert einen nicht mehr etc. Für ein paar Tage kann man eine WordPress-Installation unbeaufsichtigt lassen. Aber danach wird es gefährlich: Kommentare müssen moderiert werden und die Installation und die Plugins wollen gepflegt sein. Man will ja schließlich nicht das Feld den Spammern und Konsorten überlassen, die auf Sicherheitslücken lauern.

Löschen oder behalten?

Gut man kann die ganze Website löschen oder mit einem Passwort schützen, aber das will man auch nicht immer machen. Immerhin steckt in jeder ernsthaften Website viel Herzblut und evtl. sind auf der Website interessante Kurzgeschichten oder immer noch hilfreiche Anleitungen vorhanden (siehe auch Vergänglichkeit von Websites).

Am besten wäre es meiner Meinung nach wenn man daher die komplette Website als statisches HTML exportieren könnte. Das hätte mehrere Vorteile. Statische Webpräsenzen sind von Natur aus sicherer als dynamische Systeme und sie sind auch ressourcensparender als ein Redaktionssystem. Der Server kann die statischen HTML-Dateien direkt ausliefern und muss nicht noch zusätzlich mit PHP kommunizieren, der dann die Inhalte aus Textdateien oder aus der Datenbank herauskratzen muss.

Zuerst habe ich mich auf der Suche nach einem WordPress-Plugin begeben, in der Hoffnung, dass es da etwas gibt. Entweder habe ich falsch gesucht oder es gibt tatsächlich nichts. Auf jeden Fall fand ich nichts. Nach etwas Recherche fand ich dann eine viel versprechende Anwendung mit dem Namen wpxslgui, die angeblich aus der Export-Datei von WordPress entweder ein Word-Dokument oder eine statische HTML-Site erstellen kann.

Habe die Anwendung installiert, aber ich konnte weder ein Word-Dokument noch eine HTML-Site erstellen. Schade. Und für eine Anwendung die aus XML-Dateien (die Exportdatei ist XML) HTML-Dokumente erstellt wollte ich auch kein Geld ausgeben, zumal es sich um ein Testballon handelte.

Wget: Kommandozeile aka DOS-Box ahoi

Nach noch ein bisschen Recherche mehr bin ich dann auf ein Kommandozeilen-Tool Wget gestoßen, welches es auch für Windows gibt. War mir auf die Schnelle nicht sicher ob ich da richtig bin und wie man da am besten vorgeht. Glücklicherweise hatte Kollege Peter Kröner ein Link parat der mir auf einen Blick zeigte, dass man mit Wget komplette Websites kopieren kann und wie man es bedient.

Zuerst lädt man von dieser Website das Programm herunter (Direktlink). Dann installieren und anschließend die DOS-Box starten (z. B. cmd in die Programm-Suche tippen).

Anschließend “navigiert” man mit Hilfe von cd (Change Directory) zu dem Ordner wo sich die wget.exe befindet, üblicherweise C:\Programme\GnuWin32\bin\. Dort startest du das Programm in dem du wget aufrufst, allerdings wird das Programm ohne die Angabe von Parametern nicht starten. Folgendes habe ich eingegeben:

wget -r -x http://www.alte-website.de

Unter anderem hier gibt es die Auflistung von den Parametern. Die Angabe von -r ist notwendig, damit auch die komplette Website heruntergeladen wird und mit -x erzwingt man das exakt die gleiche Ordner-Struktur abgebildet wird. Dann fängt das Programm an die Website herunterzuladen und je nach dem wie umfangreich das Weblog ist, kann man eine Tasse oder eine ganze Kanne Kaffe trinken. 🙂

Vorbereitung der Website von den Einsatz von Wget

Damit der Download so schnell wie möglich abläuft und man damit auch Zeit spart und den Server schont kann man einiges am Weblog im Vorfeld erledigen. Zuerst einfach alle nicht wirklichen benötigten Plugins deaktivieren: speziell diejenigen die sich im Frontend verewigen, wie z. B. Erweiterungen für das Kommentarformular.

Anschließend noch die Anzahl der Artikel pro Seite erhöhen, denn je mehr Unterseiten um so länger braucht auch Wget. Hilfreich ist es auch das Kommentarformular auszblenden. Das kann man u. a. dadurch erreichen in dem man unter Einstellungen » Diskussion » Kommentare schließen die älter als xy Tage sind zum Beispiel 1 Tag einträgt.

Je nach dem könnte es auch notwendig sein bei den Wget-Parametern auch -w seconds anzugeben. Hiermit wird bestimmt wie viele Sekunden Wget warten soll bis er die nächste Datei herunterlädt. Speziell bei schwächeren Servern ist das zu empfehlen.

Und hinterher?

Nun erstellst du einen kompletten Backup deines Weblogs und löschst anschließend die WordPress-Dateien und die Datenbank wo WP installiert war bzw. entfernst die WP-Tabellen. Anschließend lädst den Wget-Download hoch. Nun hast du immer noch eine Website. Zudem ist sie sicherer und serverschonender und dadurch das du ein WordPress-Backup hast, kannst du auch jeder Zeit wieder zurück.

Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienst­leistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.

Verwandte Beiträge:

31 Kommentare

  1. Ich habe es nicht ausprobiert, aber bei Blogs die keine Permalinks haben, sondern nur per ?p=… über die index.php angesprochen werden, wird das so einfach nicht klappen.

    Und selbst bei den Blogs mit Permalinkstruktur wie hier z.B. muss man noch Sorge dafür tragen, dass eine Datei “wordpress-weblog-als-statisches-html-exportieren” auch als html ausgeliefert wird.

    1. Hallo Dirk,

      ja, Wget erzeugt dann an Hand der “WordPress-Ordner” richtige Ordner mit je einer index.html drin.

  2. OK, sieht so aus, als ob wget da überall tatsächlich ein Verzeichnis mit einer index.html angelegt hat, richtig?

    Das sollte dann ja sogar mit einer “falschen” Verlinkung klappen, also wenn jemand das “/” am Ende der URL vergessen hat.

  3. Und dann beten das kein Artikel einen More-Link hat? Ich denke mal nicht das wget mit dem “#more” umgehen kann. Bei vielen Blogs dürfte die Sidebar auch recht problematisch werden, da dort häufig keine statischen Daten hinterlegt sind.

    Ein PHP-Script das aus dem Export-XML HTML-Seiten baut, ist nicht ganz so umfangreich. Da die Export-XML von WP allerdings lediglich die reinen Artikel enthält, müsste man sich noch einen Weg überlegen wie man das ganze optisch umsetzt. Es würde wohl auf eine Aneinanderreihung von Single-Ansichten der Beiträge hinaus laufen. Und damit ist das Ende der Hürden noch lange nicht erreicht. Also kaum verwunderlich das es dazu kaum oder gar keine Plugins gibt.

    1. @Ralf, ich sehe kein Problem mit more-Link, der führt auf die Unterseite (die ist vorhanden) und spziell auf einen Anker. Der dürfte mitkommen, wenn nicht, ist auch nicht schlimm, dann landet man dennoch auf die Unterseite. Die Kommentar-Links funktionieren auch prima.

  4. Eine sehr interessante Methode. Ich hoffe zwar, dass ich das für meine Website nie brauche, aber dein Artikel ist auf jeden Fall in meinen Bookmarks gelandet.

    Grüße vom Bodensee
    Wolfgang

  5. Alternativ kann man einfach ein Plugin oder statische Datei erstellen, was nach einen $_POST oder Datei-Aufruf den Standard-Loop aufruft, in dem alle via -1 alle Beiträge abgeholt werden; ein wenig HTML dazu und schon hat man alles in einer HTML-Datei. Ich mache das immer mal so, auf Anfrage im Unternehmen, da einige Proxies die Sites sperren.

    Einziges Manko sind die Bilder und Downloads, da ja im Ausgeleiteten Inhalt die URLs stehen und das Bild nicht mitgezogen wird, dazu muss man den Uplaod-Ordner mit holen und die URLs ändern, geht aber auch im in dieser Datei oder Plugin.

  6. Hey Dirk,

    ich habe es ausprobiert und es funktioniert! Habe keine Fehler gefunden.

  7. Warum nicht einfach ein Caching Plugin auf ein Erneuerungsintervall von mehrern Monaten einstellen. Es spart Resourcen, es wird reines HTML ausgeliefert und man kann sich später evtl, noch mal umentscheiden 😉

    1. @Felix,

      mit der statischen Methode kannst du auch zurückkommen und das hat gegenüber deiner vorgeschlagenen Methode den Vorteil, dass man sich auch mehrere Monate um die Seite nicht kümmern muss ohne das man Angst vor Spammern hat oder sich Sorgen machen muss ob die Seite gehackt ist oder nicht.

  8. Leider funktioniert’s bei meiner Seite nicht; möglicherweise liegt’s daran, das ich WordPress in einem Unterverzeichnis liegen habe und via Backend die entsprechende Einstellung General SettingsWordPress address (URL) / Site address (URL) getätigt habe (siehe: «Giving WordPress Its Own Directory») und daher wget sich nicht »zurechtfindet« …

    Werde das später noch mal testen.

  9. funktioniert hervoragend! ich hatte mit httrack “gearbeitet”, aber die software lief sich leider immer wieder tot bzw es fehlten sogar dateien. warum bin ich nciht auf wget gekommen?

  10. Hallo,
    Sehr interessanter Artikel, jedoch hatte ich das Problem das ich mit wget den Fehler 403 bekam und er nichts heruntergeladen hat.
    Also habe ich bisschen gegoogelt und wenn man dann noch den Befehl -U firefox mit einfließen lässt funktioniert das auch bei mir.

    Also bei mir funktioniert der Code so:
    wget -r -x -U firefox http://www.arminpasic.de
    (Das -U steht für Userstring)

  11. Kleiner Tipp: Wer ein Kommandozeilentool wie Putty benutzt, der kann dies auch direkt auf seinem Linux-Server ausführen. Funktioniert einwandfrei und man muss nicht extra WinGnu auf seinem Windows-Rechner installieren.

  12. Was mir dabei noch einfällt: Die Suchfunktion sollte man vorher auch entweder entfernen oder durch eine Google-Suche o.ä. ersetzen.

  13. @Perun,
    verstehe ich das richtig das ich lediglich die Parameter und eine URL eingeben muss und schon wird die gesamte Page mit allen Daten gesaugt?

    Wenn das tatsächlich so einfach ist und mit jeder Page Funktioniert ist dem Datenklau ja nichts mehr entgegenzubringen oder kann man seine Page auch davor schützen?

    1. @redblue,

      wget macht nichts anderes was ein ein Browser auch macht: er erstellt sich eine Website und lädt sie herunter. Der Browser in seinem Cache und wget ebenfalls auf die Festplatte. Willst du das verhindern, dann müsstest du die Website mit Passwort schützen.

  14. @redblue
    Es ist tatsächlich so einfach.

    Die einzige Methode, dir mir einfällt ist es die Permalinks mit ?p= zu belassen, da wget -wie der normale Besucher der Seite- die .htaccess nutzt um mehrere Ordner zu emulieren (oder so ähnlich)
    Wordpress kann wohl nur “?p” benutzen, wenn die ID dahinter hängt. (?p=123) Macht blöde URLs und wäre nicht zu empfehlen.

    Vielleicht wäre es eine Möglichkeit die Webseite nur per SSL zugänglich zu machen, aber selbst da dürfte wget (der sich im Grunde als Browser tarnt) keine Probleme haben draufzukommen.

  15. Ich hätte noch eine kleine Ergänzung beizutragen. Es gibt ja Fälle, in denen die Permalink-Struktur ohne ein Slash endet, wenn man etwa .html als Endung bei den Optionen eingetragen hat. Das hat zur Folge, dass Seiten, Kategorien und Tags ebenfalls nicht mit einem Slash enden. Wget lädt diese Dateien zwar korrekt herunter und man kann sich diese dann auch lokal anschauen. Ein Browsen funktioniert dann allerdings nicht mehr, wenn alles auf den Server geladen wurde, weil die Dateien dann vom Browser nicht verarbeitet werden können.

    Abhilfe schafft in dieser Situation, die Permalinkstruktur mit einem Slash am Ende zu versehen. Das sieht zwar seltsam aus, wenn bspw. etwas mit eineseite.html/ endet. Aber wget legt die entsprechenden Ordner mit index-Dateien an. Und die Verlinkungen stimmen, funktionieren und auch aus SEO-Sicht sollte man keine Probleme bekommen.

  16. Links ZweiNull im Zeitraum 5. April bis 18. April » April, Google, Links, Installationen, Einfluss, Social » Generation ZweiNull sagt:

    […] WordPress: Weblog als statisches HTML exportieren 8. April none […]

  17. Ich kann Thomas nur zustimmen. HTTrack ist das Tool der Wahl. Nach der Installation des Programms und runterladen der gewünschten Seite, wird statisches html erzeugt und man hat die Seite als permanentes Abbild zur freien Verfügung!

    Glück Auf

  18. super lösung. ich hab damit vorhin ein paar sehr alte und nicht mehr gepflegte blogs gesichert und wordpress ersetzt. die seiten funktionieren einwandfrei. echt klasse

  19. Ich persönlich würd HTTrack nehmen. Habe damit bisher sehr gute erfahrung gemacht. wget habe ich bisher noch nicht probiert, aber es scheint ganz gut zu sein muss ich vielleicht auch mal ausprobieren.

  20. Vielverprechender Titel, leider doch nicht ganz was ich seit Ewigkeiten suche – aber ein möglicher Schritt. Ich suche nämlich ein System, mit dem ich eine WP Instanz deployen kann, sprich die Inhalte normal verwalten und bei jedem neuen Abspeichern eine neue komplett statische Version auf den Server legen – rennt wie sau und theoretisch genau so bequem.

    Ich fand das beim Contens CMS so nett…

    1. @Viktor,

      Weblication kann das z. B.: HTML-Export einer dynamischen Website auf den Live-Server … kostet aber nur ab 2.600 Euro 😉

  21. uff…
    Ich habe mal sowas für WP schon gesehen, aber bei einem Systemcrash den Link verloren und finde es nicht wieder ;(

Kommentare sind geschlossen.