#

Maintenance

Subscribe
Maintenance October 29, 2026·15 min read

How to Migrate WordPress to a New Host: Tests and Cutover

For a self-hosted WordPress site that keeps its domain, pick a method that moves the complete files and database, test the new installation before changing DNS, and keep the old host running until you have verified the move. If the site takes orders, registrations, or other changes during the transfer, plan a final sync or a maintenance window before switching visitors. Start by finding out who controls the site's files, database, backups, DNS, and email.

A new server can look ready and still be missing recent comments, stored images, or an essential integration. Visitors can also reach the new server before every cached DNS answer has changed.

Choose the right way to move your WordPress site

WordPress migration methods

If your domain and public page URLs stay the same, the migration is mainly a change of hosting infrastructure, and the new server serves the existing addresses. The WordPress migration handbook treats a move with unchanged URLs differently from a move that changes the site's address.

A move to a different public domain also needs URL updates and a separate search-engine relocation plan. The steps here cover keeping the original domain.

MethodBest fitAccess and work involvedWhen to reconsider
Host-assisted migrationConventional sites covered by the destination provider's serviceGive the provider the access it requests, and find out what its team transfers and testsCustom services, transactions, or external infrastructure fall outside the service scope
Migration pluginCompatible single-site installations with ordinary file and database requirementsWordPress administrator access, a supported destination import process, and enough server resourcesArchive size, extraction limits, access restrictions, or custom components prevent a complete move
Manual file and SQL transferInstallations that need direct control over files, database, and server configurationFilesystem and database access, server-administration skills, and responsibility for the full cutoverYou lack essential access, compatibility knowledge, or recovery capability
Migration route selection

Ask what each method does if the copy stalls, who tests the new site, and who handles changes made while the old site is still live. WordPress Multisite, a large custom installation, or a store taking orders needs a more specialized process.

Inventory the site and check the new host before copying anything

WordPress dependency inventory

List what the site relies on and who has access to each part. A migration tool can copy WordPress and still leave scheduled tasks, email accounts, custom APIs, and DNS settings with the old provider.

  • Site access: WordPress administrator login, hosting panel, SFTP or SSH, database export access, and any files stored outside the usual WordPress directory.
  • WordPress content: Core files, plugins and themes, custom code, uploads, database tables, and the active table prefix.
  • Destination compatibility: PHP version and extensions, database compatibility, disk and processing resources, required writable paths, and web-server rewrite behavior.
  • External dependencies: CDN or proxy, scheduled jobs, contact forms, SMTP, payment integrations, subscriptions, webhooks, and services tied to a fixed domain or server configuration.
  • Domain control: Registrar, authoritative DNS provider, current web and mail records, root and www hostname configuration, the current web-record TTL (and whether your DNS provider lets you change it ahead of time), and certificate provisioning.
  • Recovery access: Source-host account, destination account, backup storage, and the person authorized to stop or reverse the move.
Server access requirements

A contributor on r/webhosting described a 35 GB WordPress installation with custom APIs, mail, DNS dependencies, and no working credentials for the existing host: “I need to migrate a wordpress site that will be very tricky.”

On a store or a heavily customized site, one side service can decide which migration method works.

Stop condition: If you can't confirm the source data, administrative access, or destination compatibility, resolve that before starting an import that modifies anything.

Capture the full site and confirm you have a usable recovery point

WordPress recovery assets

The file set covers wp-content/uploads, plugins, themes, custom files, and wp-config.php.

The database holds posts, comments, users, settings, and much plugin state. Export it as a separate SQL file.

Store dated copies outside any destination that an import can overwrite. SQL exports can contain personal data or credentials, so protect them.

Check that both sets open and contain the expected files and tables. A finished export doesn't prove the backup restores, so where you can, restore it in a test environment and try a few representative site functions.

Prepare the destination and move WordPress files and database

WordPress database transfer

Build the destination following its provider's import procedure. Identify the target database and document root before replacing or clearing an existing installation.

Two documented hosting models: Kinsta's manual migration procedure uses an empty destination environment, because the incoming files include WordPress core. DreamHost's documented manual procedure begins with WordPress preinstalled on the destination. Deleting unrelated destination files or tables can destroy existing data.

Manual migration: files, SQL, and configuration

  1. Prepare the receiving environment. Create or find the destination site, its document root, and its database service. Make sure its PHP version, extensions, storage, and web-server configuration can run the existing installation.
  2. Export the source files. Use the source host's file-transfer or archive tools to collect WordPress core, wp-content, wp-config.php, custom code, and any other application files. Include hidden files and any custom server configuration the new environment needs.
  3. Export the source database. In the source host's database tool, find the database this WordPress installation uses and export its tables to an SQL file.
  4. Transfer the files. Use SFTP, SSH-based transfer, or the provider's file manager. Put the WordPress files in the document root the new site actually serves, and keep a safe copy of anything already there that you can't lose.
  5. Create or identify the destination database and account. Check the database name, connection host, and user permissions, and whether the provider expects an empty database or an existing WordPress installation.
  6. Import the SQL export. Use phpMyAdmin or the provider's import tool, select the destination database, and confirm the import finished without errors.
  7. Connect the installation. In wp-config.php, set the destination database name, account, password, and host. Keep the table prefix that matches the imported tables. Restore file ownership, writable directories, and rewrite configuration for the new environment.
WordPress transfer verification

For host-assisted and plugin methods, follow that service's own procedure. Don't apply the manual deletion or import steps to a plugin installation that handles them itself.

Decide whether WordPress URLs need replacing

WordPress keeps two addresses: WordPress Address (siteurl) and Site Address (home). Both must match the URL you want the public to use.

Say example.com is the public domain before and after the move. Copying the installation to a new server doesn't require a database-wide replacement of example.com.

If the domain or URL scheme changes, update the stored references. Some database values hold serialized PHP data, and plain text replacement can damage it. The WP-CLI search-replace reference covers serialized-data handling and --dry-run, which shows the changes it would make without saving them. Its default scope is the registered tables, narrower than the --all-tables-with-prefix option.

Test the new site privately before changing public DNS

WordPress private preview

Preview the new site while ordinary visitors still reach the source host. Use a provider-supported preview service, a temporary hostname, or a local hosts-file override that points the intended domain to the new origin on your testing machine.

Check the hosting panel or the server logs to confirm your test request reached the new server.

A temporary hostname can change redirects, cookies, plugin-license behavior, or third-party callbacks. A hosts-file override keeps the real hostname on your testing machine but can't create a valid TLS certificate by itself.

On r/Wordpress, an owner moving from Linode to DreamHost described repeated migration problems: “It's usually caused by wrong URL.” Use the real hostname and HTTPS in your tests wherever the preview method allows.

FeaturePrivate testWhat you should see
Homepage and deep linksLoad the homepage and one internal permalinkExpected content, navigation, and URLs
Media and downloadsOpen a few uploaded images and downloadable filesAssets load from the right paths
Administrator loginSign in and out on the domain you are testingLogin and session work as expected
FormsSend a test submission that doesn't reach real customersThe form processes and delivers safely
HTTPSInspect the certificate and the hostname you requestedValid TLS for that hostname
Critical integrationsRun one feature in its safe test modeExpected response with no unintended external actions
Search visibilityCheck which restrictions the test environment usesThe test copy is protected, and you know which settings change for launch
Preview acceptance checks

Google's hosting-change procedure recommends testing pages, images, forms, and downloads before changing DNS. A temporary hostname can use access restrictions or a test-only noindex setting. Remove any such crawl or indexing block before the production site serves public traffic.

Certificate provisioning differs by host. Let's Encrypt's HTTP-01 validation uses a token served from the domain beneath /.well-known/acme-challenge/ on port 80. DNS-01 checks a TXT record under _acme-challenge instead, so some setups can validate the certificate before the web-routing switch.

Keep new posts, comments and orders from disappearing at cutover

Database write timeline

A database import captures the source at one moment. Before the new site takes over, carry over any comments, orders, uploads, or registrations created after that moment. At cutover, verify DNS resolution, the certificate, redirect destinations, and both admin and public pages.

Say you copy a WooCommerce database at T1. Between T1 and T2, a customer places an order on the old site. At T3, DNS starts sending visitors to the new one. Unless you saved or reconciled that order, the new database is missing a real transaction.

WooCommerce's live-deployment guidance warns against overwriting newer production orders and customer activity with older staging data.

WordPress cutover decisions

Choose the final-write strategy

  • Site with little or no changing data: Set aside a period with no content changes. After the first copy, move the final database state and confirm the new site has it before routing requests there.
  • Store or membership application: Use a provider service or a qualified operator with a defined plan for orders, customers, inventory, registrations, and other writes around the switch. Confirm how the final data reaches the new site.
  • Background or external writers: Account for scheduled tasks, webhooks, payment callbacks, APIs, and integrations. They can still change data while WordPress maintenance mode is on.

Decide when the old site takes its last write, when you copy the final database, and when the new site starts accepting new writes, orders included.

Make a go/no-go decision

  • Backup: You can open the recovery set and you know what it contains.
  • New site: The critical private checks passed, including the business actions your site relies on.
  • Data: Changes made after the earlier snapshot are frozen, transferred, queued, or reconciled through a procedure you understand.
  • Control: The person who switches traffic and starts a recovery has the access to do both.

A missing recovery path, a failed essential function, or unresolved live writes means NO-GO. A small cosmetic glitch can wait.

Switch web DNS without breaking HTTPS or email

DNS service ownership

DNS cutover sends public web requests to the new server. Your authoritative DNS provider and any CDN or reverse proxy in front of the host decide which records you change.

The registrar handles domain registration and delegation. Authoritative DNS serves the domain's records. The web host serves the website, and a separate email provider can run the mailboxes.

On r/webhosting, someone rebuilding a client's former cPanel site described the remaining difficulty: “The issue I’m running into is email functionality.”

Preserve records for services that are staying put

  • Website: Find the A, AAAA, or CNAME records your new host designates for the domain root and www, including any routing through a CDN or proxy.
  • Delegation: Leave nameservers alone if the current authoritative DNS service keeps managing the zone. If delegation changes, make sure the new zone has the necessary records for every service before the switch.
  • Inbound mail: Keep the MX configuration if mail stays with its current provider.
  • Mail authentication: Carry over the SPF, DKIM, and DMARC configuration when you change authoritative DNS zones.
  • HTTPS: Get a certificate that is valid for your public hostname and works with the new host's issuance and routing setup.
DNS routing dependencies

Account for DNS caching before cutover

DNS TTL sets how long resolvers cache a response. Google's hosting-change guidance gives the example of lowering the relevant TTL to a few hours at least a week before the move, so older, longer-lived cached answers expire before the switch.

Cloudflare documents a 300-second Auto TTL for proxied DNS records. Those records resolve to Cloudflare edge addresses, and the published DNS response doesn't expose the origin address. Changing the origin behind Cloudflare and changing a DNS-only web record therefore route traffic differently.

Once the new site and data gates pass, change the web-routing record or provider setting your new host specifies. Check the authoritative DNS response and several recursive results, for both the root domain and www. Confirm that HTTPS works and the email records are still in place.

Verify the live site and watch both hosts after the switch

Live WordPress verification

After cutover, check production traffic and the functions that matter to your site.

Public functionExpected behaviorEvidence to record
Homepage and internal URLsCorrect content, navigation, and HTTP behaviorPublic response and web-server logs
Media and downloadsRequired resources openResource response and asset errors
WordPress administrationLogin and essential administrative operations workSession result and application errors
Forms and integrationsTest submissions reach their destinationSubmission record and service response
Transactions, if applicableAn authorized safe test reaches the expected application stateTransaction and system records
Crawling accessProduction URLs have the indexing and crawl settings you wantSearch Console status and configuration check
Old new server monitoring

The Google Search Central hosting-change guide recommends monitoring both old and new servers and checking whether Googlebot still reaches the old host.

Keep your Search Console ownership verification in place.

Fix common WordPress migration errors by identifying the failing layer

WordPress migration errors

Use the symptom to pick the subsystem to inspect, and start with the evidence in that row before changing files or database records.

SymptomSubsystem to investigateFirst evidence to inspectEscalation when unresolved
Extraction stalls or freezesArchive handling and destination resourcesInstaller logs, archive integrity, available storage, PHP execution or memory limitsSwitch to a supported alternative transfer method, or contact host or plugin support
Admin login fails or redirectsDomain, sessions, URL and HTTPS configurationhome, siteurl, redirects, cookies, and the login resultFollow WordPress URL or login troubleshooting
Database connection errorDatabase service and credentialswp-config.php database name, account, host, and whether the service is reachableFollow database connection troubleshooting
Default or empty WordPress site appearsWrong database, import, prefix, or document rootImported tables, table prefix, configuration, and served filesCompare the restored or transferred data with the source
Images or styles are missingFiles, URLs, cache, or generated assetsRequested URL, browser errors, uploads, paths, and relevant plugin settingsRepair the media, or the page builder's generated files
HTTP 500, 502, or 503Web server, PHP runtime, or applicationServer and PHP logs, service status, application errorsAsk the host for a server-level diagnosis
Website works but email failsMail provider, DNS, or SMTPMX and mail configuration, application delivery settingsContact your mail or DNS provider's support
Error cause isolation

Elementor's migration guidance covers wrong URLs and missing generated styles, with remedies such as Replace URL and Clear Files & Data. Use them only for matching Elementor problems.

Duplicator published an analysis on August 20, 2026, based on more than 8,000 structured support requests gathered over several years. About one in five of its migration-related tickets concerned installation or extraction stalls, and nearly one in ten involved trouble logging into WordPress administration.

Fix the failing subsystem and repeat the affected check. Before any import or replacement that can damage a working site, save its current state.

Know when to roll back and when the old host can be closed

WordPress rollback decision

Fix some post-cutover faults on the new host. A form configuration problem or a missing generated stylesheet needs a targeted fix. A failed checkout, missing transactions, or a sustained inability to serve critical functions justifies invoking the recovery plan you prepared.

Before you roll back, find out which database holds the newest orders and comments. If visitors have already submitted comments, registrations, payments, or orders on the new host, the old database doesn't have those records. Reversing DNS moves traffic back but doesn't merge the databases or restore those newer writes.

Recovery data reconciliation

Preserve the post-cutover changes and decide how to reconcile them before moving traffic back. If the new records can't be saved in a safe reversal, don't point DNS back. Have your administrator or provider fix the data first.

Google's hosting-change process advises keeping the old infrastructure available while traffic moves and shutting it down only when users and Googlebot no longer use it. Keep watching requests on both hosts, and base the decision on traffic evidence and a working production site, not on a fixed waiting period.

When you close the old hosting account, keep the final DNS configuration, the recovery assets, the transfer and acceptance records, and the administrator's contact details.

NoScript Team