Domain Move
Move WordPress to a new domain safely. A serialization-safe search and replace across the whole database, with a dry run first.
Free, GPLv2. Coming soon to the WordPress.org plugin directory.
- Domain Move by Quintaphon
Domain Move replaces an old domain with a new one everywhere in your database: posts, meta, options, widgets, page builder data and plugin tables. A dry run shows every change before anything is written, serialized data stays valid, and subdomains such as a media CDN are left alone. It was built for moving the WordPress admin to a private host while a static copy of the site keeps the public domain, and works just as well for any domain change.
Features
- Dry run firstSee every table, row and replacement before anything is written, with before and after examples. The replace warns you when no dry run was made with the same settings.
- Serialization-safeSerialized data is rewritten token by token and every string length is recalculated. Nothing is ever unserialized, so no plugin objects are created while the data changes. A value that does not parse is left exactly as it was and reported.
- Exact host matching
example.comandwww.example.comare replaced, but never a subdomain such ascdn.example.comand never a longer name such asexample.com.au. Subdomains it finds are listed in the report. - Every link formatPlain links, JSON-escaped links (
https:\/\/) and URL-encoded links (https%3A%2F%2F), in posts, meta, options, widgets, page builder data and plugin tables. - Made for a private admin with StaticPushMove WordPress to a private host such as
admin.example.netwhile StaticPush keeps publishing the public domain. Its settings, including the static site address, are always protected. - Small batches, site address lastRows are processed 200 at a time, so large databases never hit a server timeout, and you can stop between batches. Option tables run at the very end, so the site keeps working until the run is done.
- You choose what changesUpgrade
http://links tohttps://, replace or keep email addresses, include or leave out post GUIDs, pick the tables, and keep extra options untouched with a skip list (*works as a wildcard). - Health Check and HistoryLists wp-config.php constants that still hold the old domain, tables without a primary key and object cache notes, and keeps the last 20 dry runs and replaces.
Screenshots
How to use
- Download the ZIP, then in WordPress go to Plugins > Add New Plugin > Upload Plugin, choose domain-move.zip, install and activate it.
- Point the new domain at your server and add it to the web server and SSL certificate.
- Take a full database backup.
- Open Tools > Domain Move, check the old domain and enter the new one.
- Click Dry run and review the Results: tables, examples, subdomains and email addresses.
- Click Run replace, confirm your backup, then log in again on the new domain.
FAQ
Can I undo a replace?
Only from a backup. Domain Move asks you to confirm that you have a fresh database backup before every replace, so take one first.
Does it change wp-config.php?
No. If wp-config.php defines
WP_HOME,WP_SITEURL,DOMAIN_CURRENT_SITEor a similar constant with the old domain, the Health Check lists it so you can edit the file by hand right after the run.Does it work with page builders?
Yes. Builder data is stored as serialized or JSON text, and both are handled, including JSON-escaped and URL-encoded links.
Why are some rows skipped?
Rows are skipped when their option name is in the skip list or protected (StaticPush settings), or when a table has no primary key. A row without a primary key cannot be updated safely, so its matches are counted but never changed.
What does "unreadable values" mean?
The value looked like serialized data but did not parse, usually because it was already damaged before the move. It is left exactly as it was and listed in the results.
Why do I have to log in again?
Your login cookie belongs to the old domain. When the replace finishes, Domain Move shows a link to log in on the new one.
Is it free?
Yes. Domain Move is free and open source under the GPLv2 license, with no locked features. If it saves you time, you can support its development with a coffee.
How do I get help?
Read the documentation, or reach us through the support page.
What's new
- 1.1.1StaticPush settings, including the static site address, and its cached data are always protected, even when the skip list is empty or edited. The skip list is only for extra options.
- 1.1.0New admin screens in the StaticPush design: Results, Health Check and History pages. The replace asks for confirmation and warns when no dry run was made with the same settings, a run can be stopped between batches, and the form remembers your choices. Requires WordPress 6.2.
- 1.0.1Faster batches on large tables.
- 1.0.0First release.