Irgendwann hatte ich das mal angedroht. Eine Migration sollte kommen! Und ich habe mir mehr oder weniger sehr viel Zeit dafür gelassen. Zum einen, weil ich generell nicht mehr so viel für den Blog getan hatte und zum anderen weil ich Ghost erstmal lokal testen wollte.

Inzwischen ist Ghost bei Version 0.8 angekommen und NodeJS bei Version 4.5... und ich habe jetzt auch die Zeit gefunden die Sache in Angriff zu nehmen.

Das ganze war jetzt nicht ganz so einfach wie zunächst angepriesen. Mit dem Ghost Plugin für WordPress konnte ich alle Beiträge in ein passendes Format für Ghost exportieren. Allerdings musste ich dafür zunächst alle Kategorien in Tags umwandeln und alle Bilder auf einen externen Dienst auslagern.

Aus Kategorien werden Tags

Den ersten Schritt konnte ich mit dem WordPress Plugin Categories to Tags Converter Importer umsetzen. Doch dann stellte ich fest, dass ich bereits Tags mit der entsprechender Kategorie Bezeichnung hatte. Deshalb musste ich erstmal alle Tags bereinigen und alle doppelten löschen bzw. neu zuweisen. Denn manchmal habe ich die Tags nicht so sauber gepflegt, wie man es eigentlich machen sollte... Doch zum Glück waren es nicht so viele, wie zunächst vermutet.

Ab in die Cloud

Nachdem ich dann alle Kategorien und Tags gesäubert habe, machte ich mich daran, alle Bilder zu Cloudinary umzuziehen. Einen Account hatte ich bereits, da ich den Dienst schon für eine andere App genutzt hatte. Für den Export habe ich mir dann auch das Plugin Cloudinary in mein WordPress installiert und dann konnte es losgehen.
Zu meiner Verwunderung wurden alle Bilder auch in den Beiträgen neu-verlinkt. Das war extrem praktisch, da ich jetzt nicht mehr alle Beiträge überarbeiten muss.

Redirects nicht vergessen!

Natürlich darf man die Suchmaschinen nicht vergessen. Dabei ist es wichtig, möglichst wenige 404-URL nach einem Umzug zu erzeugen. Ein kurze Analyse der Indexierten URLs ergab recht schnell die Lösung: ich muss zum einen die Beiträge neu-indexieren bzw. weiterleiten und ich muss die Kategorie-URLs weiterleiten.
Nach ein wenig Recherche-Arbeit habe ich den für mich passenden .htaccess Code zusammenbasteln können:

# Redirect for {ID}/{TITLE}
RedirectMatch permanent ^/[0-9]{1,4}/(.*)$ /$1
# Redirect for category/{CAT_NAME}
RedirectMatch permanent ^/category/(.*)$ /tag/$1

Damit leite ich alle Beiträge von der Id-basierten URL {id}/{title} zu den typischen Ghost-Urls /{post-url}. Und die Kategorien sind jetzt unter der tag-Url weiterhin verfügbar. Die Pages-URLs ändern sich nicht, deshalb musste ich hier nichts anpassen oder weiterleiten. Es gibt zwar noch weitere URLs, die evtl. praktisch wären, aber die werden einfach über 404-Response aus dem Index entfernt.
Ich bin gespannt, wie die Crawler das finden...

An dieser Stelle kam mir irgendwann der Gedanke, dass man den Permalink im Grunde auch als Post-URL exportieren könnte... aber da hatte ich bereits alle Export-Tätigkeiten abgeschlossen... :D
Und außerdem ist im Moment noch gar nicht klar, ob die Post-URL nicht auch irgendwann im Ghost-Core Einstellbar wird.
Ein Hinweis an alle, die ein Datums-Format in den Permalinks genutzt haben:

In den General-Settings kann man Dated Permalinks aktivieren

Leider kam das für mich nicht in Frage, da ich lieber die ID - Titel Kombination verwende.

Wer hat's geschrieben?

Ein weiterer Punkt, den ich nach dem Import noch überarbeiten musste, ist die Zuweisung des korrekten Autors. Der Export hat auch die WordPress Benutzer mitgenommen und nun sind alle Beiträge, die ich nicht in Ghost geschrieben habe einem falschen Benutzer zugewiesen.

Inzwischen konnte ich mit Hilfe eines SQL Befehls dieses Problem korrigieren.
Dazu habe ich auf der Konsole die Datenbank mit sqlite3 [PFAD_ZUR_DB] die Datenbank von Ghost geöffnet und anschließend den folgenden Befehl genutzt um die IDs für die Beiträge anzupassen:

update posts SET author_id=[NEUE_ID] WHERE author_id=[ALTE_ID];

Falls man nicht weiß, welche Id die Autoren haben kann man sich das mit diesem SQL Befehl helfen:

select id,slug,email from users;

Beiträge überarbeiten

Nun zunächst hatte ich das gehofft, dass jetzt alles in Ordnung wäre. Aber nachdem ich den Export - Import durchgezogen hatte und mir einzelne Beiträge angesehen habe, stellte ich fest, dass ich ein weiteres Plugin für Bildergalerien genutzt hatte.
Das hat mir in die Beiträge ein bisschen CSS und mehrere unnötige HTML-Tags eingebaut.
Nach gefühlten 300 Stunden Korrekturen der Beiträge habe ich jetzt auch diese fertig, neu querverlinkt und teilweise auch inhaltlich angepasst. Nach 5 Jahren WordPress war es jetzt wohl an der Zeit die Texte zu revidieren.

Und jetzt?

Jetzt fehlt eigentlich nur noch ein neues und hübsche Theme für den Blog.
Auch wenn das Casper Theme schon sehr cool ist, ist es für mich zu minimalistisch. Hier muss einfach mehr Klicki-Bunti rein.

Also, auf bald und

kkthxbb