Als Betreiberin von Crest Datei habe ich in den letzten Jahren mehrfach komplette Websites und Content-Migrationen begleitet. Eine der häufigsten Fragen, die mir gestellt wird, lautet: Wie führe ich ein Headless CMS ein — konkret: von WordPress zu Strapi migrieren, ohne Datenverlust? In diesem Artikel teile ich meine praktische Anleitung aus echten Projekten, inklusive Fallen, die du vermeiden solltest, und konkreten Tools und Befehlen, die sich bewährt haben.

Warum Strapi? Warum Headless überhaupt?

Bevor ich in die Schritte eintauche: Ich entscheide mich für Strapi, weil es flexibel, Open Source und sehr gut erweiterbar ist. Headless-Trennung bedeutet: WordPress bleibt ein monolithisches CMS mit Frontend gekoppelt, Strapi trennt Content (API) und Präsentation. Das bringt Vorteile bei Performance, Multi-Channel-Ausspielung und Modernisierung des Tech-Stacks — aber die Migration ist ein nicht zu unterschätzendes Projekt.

Erste Vorbereitung: Audit und Strategie

Bevor du exportierst, solltest du den Bestand kennen:

  • Welche Content-Typen existieren? (Beiträge, Seiten, Custom Post Types, Produkte, Events...)
  • Welche Felder nutzt du? (Titel, Inhalt, Featured Image, ACF-Felder, SEO-Meta, Taxonomien)
  • Welche Medien sind kritisch? (Videos, PDF, große Bilder)
  • Gibt es Permalinks oder SEO-Meta, die erhalten bleiben müssen?
  • Ich lege eine Mapping-Tabelle an: WordPress-Feld → Strapi-Collection Type. Dabei halte ich fest, welche Felder als Text, Rich-Text, Relation, Media oder JSON in Strapi abgebildet werden.

    WordPressStrapiBemerkungen
    post_titletitle (Text)Einfach
    post_contentbody (Rich Text)Shortcodes prüfen
    post_name (slug)slug (UID)Wichtig für Redirects
    featured_mediaimage (Media)Medienpfad erhalten

    Datenexport aus WordPress

    Ich bevorzuge zwei parallele Exporte:

  • 1) Kompletter Datenexport (XML/JSON) mit WP-CLI oder dem WordPress-Export-Tool — nützlich als Archiv.
  • 2) Strukturiertes JSON/CSV pro Content-Type, ideal für automatisierten Import in Strapi.
  • Tools/Techniken, die ich nutze:

  • WP-CLI: wp export --dir=./exports
  • WP All Export (Plugin): sehr komfortabel, wenn du komplexe Filters/Custom Fields brauchst.
  • WP REST API / wp-json/wp/v2: für programmatischen Zugriff und inkrementelle Exporte.
  • Wichtig: Exportiere auch Taxonomien (Kategorien/Tags), Autoren, SEO-Meta (Yoast/RankMath-Felder) und Custom Fields (ACF) in die Exporte — sonst verlierst du wichtige Metadaten.

    Medienmigration: oft der kritischste Teil

    Bilder und Dateien müssen physisch verfügbar bleiben oder in Strapi importiert werden. Ich empfehle:

  • 1) Medien lokal herunterladen (rsync oder wget über die Uploads-URL) oder direkt in einen Cloud-Storage (S3, DigitalOcean Spaces).
  • 2) In Strapi entweder den Upload-Provider konfigurieren (z. B. strapi-provider-upload-aws-s3) oder Medien via API hochladen.
  • Für große Sites automatisiere ich den Upload mit einem Node-Skript, das Medien aufnimmt und per Strapi-Upload-Endpoint hochlädt, dabei die ursprünglichen Dateinamen und Pfade bewahrt. So kannst du später die URLs in Content ersetzen.

    Strapi aufsetzen und Content-Modelle anlegen

    Ich richte Strapi lokal oder in einer Staging-Umgebung ein und definiere Collection Types entsprechend meiner Mapping-Tabelle. Wichtige Hinweise:

  • Nutze das UID-Feld für slug — damit bleiben Seiten-URLs reproduzierbar.
  • Rich-Text-Felder: Entscheide zwischen WYSIWYG oder Rich Text (Editor-Plugin) — je nachdem, wie viele HTML-Elemente deine Inhalte enthalten.
  • Relations: Kategorien, Tags, Autoren als Relations abbilden (manyToOne, manyToMany).
  • Import: Strategien und Tools

    Drei Wege haben sich bewährt:

  • CSV/JSON-Import-Plugins für Strapi — gut für einfache Daten.
  • Custom Node.js-Skripte — flexibel und skalierbar; ideal wenn du Medien verknüpfen oder ACF-JSON verarbeiten musst.
  • strapi-plugin-migrations oder Community-Tools — können bei Standardfällen Zeit sparen.
  • Ich bevorzuge ein Node-Skript, das die WordPress-JSON liest, Felder mappt, Medien hochlädt (falls nötig) und dann per Strapi-REST-API den Content anlegt. So kannst du Transaktionen, Logging und Wiederholbarkeit einbauen.

    Praktisches Beispiel (Ablauf eines Imports)

  • 1) Medien hochladen: Für jeden Media-URL → herunterladen → POST /upload in Strapi → Media-ID speichern.
  • 2) Kategorien/Tags importieren: POST /categories, POST /tags und ID-Mapping erstellen.
  • 3) Autoren anlegen: ggf. mit Benutzerverknüpfung oder als separates Collection Type.
  • 4) Beiträge importieren: POST /articles mit title, body, slug, categoryIds, mediaId, seoMeta.
  • Wichtig: Beim Anlegen der Beiträge setze das ursprüngliche publish-Datum (created_at/updated_at) falls du Historie erhalten willst. Strapi erlaubt das, wenn du entsprechende Felder im Request spezifizierst (bei gegebener Berechtigung).

    Permalinks, SEO, Redirects

    URLs sollten erhalten bleiben oder korrekt weitergeleitet werden. Ich sichere folgendes:

  • Slugs in Strapi: gleiche Struktur wie WordPress (z. B. /blog/:slug).
  • 301-Redirects: Exportiere alle alten URLs und lege Redirect-Regeln im Webserver (Nginx/Apache) oder in einer Redirect-Liste (z. B. Netlify Redirects oder Vercel) an.
  • SEO-Meta: Yoast-Felder als separate JSON-Felder importieren und im neuen Frontend ausspielen.
  • Testing und Qualitätssicherung

    Bevor Live-Schaltung:

  • Stelle sicher, dass alle Seiten über die neue API korrekt ausgespielt werden.
  • Vergleiche Seitenzahl, Anhänge und Medienanzahl zwischen WordPress-Export und Strapi-Import.
  • Prüfe interne Links, Shortcodes und eingebettete Inhalte (oEmbed, iframes).
  • Führe Crawls (Screaming Frog oder vergleichbar) durch, um 404s zu finden.
  • Go-Live und Nacharbeiten

    Beim Umstellen empfehle ich eine Wartungsseite oder eine schrittweise Umstellung mit Feature-Flags. Nach dem Livegang beobachte:

  • Traffic-Änderungen und Search-Console-Fehler.
  • Cache- und CDN-Konfigurationen (CORS für API).
  • Automatisierte Backups für Strapi-Daten und Medien.
  • Wenn du möchtest, kann ich dir ein Beispiel-Node-Skript zur Verfügung stellen, das Medien hochlädt und Beiträge anlegt — das habe ich schon mehrfach für Kunden angepasst. Auf Crest Datei findest du später auch ein detailliertes Repo mit Scripts und Konfig-Beispielen unter https://www.crest-datei.de.