Der Umzug einer WordPress-Website (z. B. von dev.site.de auf site.de) scheint einfach zu sein: Einfach “Suchen und Ersetzen” in der Datenbank ausführen, oder?
FALSCH.
Wenn Sie versuchen, eine rohe SQL-Abfrage wie diese auszuführen:
UPDATE wp_options SET option_value = replace(option_value, 'alt.de', 'neu.de')
…werden Sie Ihre Website beschädigen. Konkret: Sie verlieren Widgets, Theme-Optionen und die Konfiguration vieler Plugins.
Der häufige Fehler: Einfaches “Suchen & Ersetzen”
Viele Entwickler (und sogar einige Hosting-Anbieter) schlagen vor, eine einfache SQL REPLACE()-Funktion zu verwenden, um URLs zu aktualisieren. Dieser Ansatz scheint logisch, ist aber im WordPress-Ökosystem grundlegend fehlerhaft.
Die Versuchung:
-- Das sieht sicher aus, ist es aber NICHT
UPDATE wp_options
SET option_value = REPLACE(option_value, 'https://alt.de', 'https://neu.de');
Was passiert:
- Einige URLs werden korrekt aktualisiert (z. B. im Beitragsinhalt).
- Serialisierte Daten werden beschädigt.
- Widgets verschwinden.
- Theme-Optionen werden zurückgesetzt.
- Plugin-Einstellungen gehen verloren.
- Die Website wird teilweise unbrauchbar.
Warum es scheitert: WordPress speichert nicht alle Daten als reinen Text. Vieles davon wird als serialisierte PHP-Daten gespeichert, was eine spezielle Behandlung erfordert.
Serialisierung verstehen: Das Kernproblem
Was ist Serialisierung?
WordPress speichert komplexe Datenstrukturen (Arrays, Objekte) in der Datenbank als Serialisierte Strings. Die Serialisierung wandelt PHP-Datenstrukturen in eine Zeichenkette um, die in der Datenbank gespeichert werden kann.
Beispiel für serialisierte Daten:
// Originales PHP-Array
array(
'home' => 'https://alt.de',
'siteurl' => 'https://alt.de',
'admin_email' => 'admin@alt.de'
)
// Serialisierter String (in der DB gespeichert)
a:3:{s:4:"home";s:14:"https://alt.de";s:7:"siteurl";s:14:"https://alt.de";s:11:"admin_email";s:13:"admin@alt.de";}
Den serialisierten String aufschlüsseln
Lassen Sie uns s:14:"https://alt.de" entschlüsseln:
s= String (Zeichenkette)14= Länge des Strings (Anzahl der Zeichen)"https://alt.de"= der Wert
Der kritische Teil:
Die Zahl 14 repräsentiert die exakte Zeichenanzahl des Strings "https://alt.de".
Was passiert beim einfachen Ersetzen?
Original:
s:14:"https://alt.de"
Nach einfachem SQL-Replace (alt.de -> neue-domain.de):
Das Problem:
- Die Stringlänge hat sich von 14 auf 22 Zeichen geändert.
- Die Serialisierung sagt immer noch
s:14(erwartet 14 Zeichen). - PHP versucht, 14 Zeichen zu lesen:
"https://neue-dom" - Das Ende fehlt.
- Das gesamte Array wird ungültig.
- Die Daten sind korrupt.
Ergebnis: WordPress kann die Einstellungen oder Widgets nicht lesen, also werden sie ignoriert oder zurückgesetzt.
Wo befinden sich serialisierte Daten?
Häufige Orte
1. wp_options Tabelle:
siteurlundhome.- Widget-Daten (
sidebars_widgets). - Theme-Modifikationen (
theme_mods_*). - Plugin-Optionen.
2. wp_postmeta Tabelle:
- Benutzerdefinierte Felder (Custom Fields).
- ACF-Daten.
- Anhang-Metadaten.
Die Lösung: Serialisierungs-bewusste Tools
Sie benötigen ein Tool, das:
- Daten entserialisiert (String zurück in PHP-Array wandelt).
- Text innerhalb der Datenstruktur ersetzt.
- Zeichenanzahl neu berechnet.
- Daten neu serialisiert.
- Die Datenbank aktualisiert.
Methode 1: WP-CLI (Empfohlen)
Der professionelle Weg: Wenn Sie SSH-Zugang haben, ist WP-CLI das beste Werkzeug.
Grundlegende Nutzung:
wp search-replace 'https://alt.de' 'https://neu.de' --all-tables
Erweiterte Optionen:
## Dry run (Vorschau ohne Änderungen)
wp search-replace 'https://alt.de' 'https://neu.de' --all-tables --dry-run
Methode 2: Better Search Replace Plugin
Für Nicht-CLI-Nutzer: Wenn Sie keinen SSH-Zugang haben, nutzen Sie das Plugin Better Search Replace.
Anleitung:
- Installieren Sie das Plugin.
- Gehen Sie zu Werkzeuge > Better Search Replace.
- Geben Sie die alte und neue URL ein.
- Wählen Sie die Tabellen aus.
- Wichtig: Haken Sie zuerst “Run as dry run?” an.
- Klicken Sie auf “Run Search/Replace”.
Zusammenfassung
Im Jahr 2026 ist der korrekte Umgang mit serialisierten Daten keine Option, sondern Pflicht bei der WordPress-Migration.
- Verwenden Sie niemals einfaches SQL
REPLACE. - Bearbeiten Sie niemals Datenbank-Dumps mit einem Texteditor.
- Verwenden Sie immer WP-CLI oder Tools wie Better Search Replace.
Dies stellt sicher, dass Ihre Widgets und komplexen Einstellungen den Domainumzug überleben.



