Website Migration Checklist: Move Hosts Without Losing Pages, Media, or Your Rollback Path

Moving a website is not a file-copying task. A working migration needs the files, database, configuration, URLs, media, and traffic switch to agree with one another.

Before accepting a host's migration promise, use the backup, migration, and support evaluation guide to define the written scope, exclusions, access requirements, and validation owner.

This checklist is designed for a small WordPress site or a lightweight web application. It does not promise zero downtime. Its purpose is to make failures visible before users are affected and to preserve a way back if the destination is not ready.

The principle: validate a destination before moving traffic

The safe sequence is:

inventory → backup → restore to a separate destination → validate → switch traffic → monitor → keep rollback available

Do not change DNS first and hope the destination works. Build and verify the destination through a temporary address, staging URL, hosts-file override, or equivalent non-production route before the public switch.

1. Make an inventory before touching the old host

Record the facts that a future-you will need during an incident:

For WordPress, also record the active theme, plugins, PHP version, permalink structure, upload path, and any custom configuration. A host label is not enough: WordPress itself recommends verifying the PHP, database, and HTTPS environment that a host actually provides. See the current WordPress requirements.

Put legacy PHP behind a compatibility gate

Do not discover during cutover that the source runs a PHP version the destination will not provide. Record the exact source PHP version, required extensions and configuration, then confirm the destination's supported versions in current documentation or a test environment.

Choose and document one path before migration:

  1. Preserve the runtime temporarily: use a supported destination environment that can reproduce the required PHP behavior while you plan a separate application upgrade.
  2. Upgrade before migration: update PHP on a non-production copy of the source, then test WordPress core, the active theme, every required plugin, scheduled jobs, forms, admin actions, and error logs before moving hosts.

Do not combine a PHP upgrade and host migration into one untested change. If they must happen in the same maintenance window, preserve a restorable source, define which PHP or application errors trigger rollback, and assign an owner who can make that decision. WordPress warns that legacy runtime versions can be insecure even when the application still runs, so “it loads” is not a sufficient long-term compatibility decision. Check the current WordPress requirements and legacy-version warning.

2. Create backups you can identify and restore

Take separate backups of:

  1. application files;
  2. database data;
  3. configuration and environment settings; and
  4. any user-uploaded media stored outside the normal application directory.

Label each backup with a date and origin. Record a checksum for each archive or export. A backup that cannot be located, identified, or read is not yet a reliable recovery option.

In our local WordPress rehearsal, we created separate file and database backups and recorded SHA-256 values before restoring them to a different local database. That exercise caught a URL issue that a simple file-count check would have missed.

For a database-and-media migration, record more than archive sizes:

After restoration, compare those records and sample recent posts, images, downloads, thumbnails, and administrator uploads. A matching file count does not prove that URLs, permissions, metadata, or serialized database values are correct.

3. Restore into a separate destination

Do not overwrite the source while testing the move. Create a distinct destination environment with:

For a self-managed VPS, do not assume that the provider will perform this work. Some VPS products are self-managed, which can make the user responsible for operating system updates, application installation, DNS, SSL, mail, and migration work. Hostinger describes that boundary for its VPS product.

4. Update the destination carefully

Copying a database does not automatically make it correct for a new address.

At minimum, review:

Treat caches as part of the cutover plan. Identify every cache layer—WordPress/plugin cache, page cache, object cache, reverse proxy, CDN, and browser cache—and record who can purge or bypass it. Before changing DNS, verify the destination with caches bypassed where possible. After the switch, purge only the reviewed layers, then confirm that public requests no longer serve stale source URLs, redirects, assets, or application data.

Treat URL replacement as a data change

WordPress and many other systems can store values in serialized or structured formats. A blind global database replacement can corrupt that data. Use a reviewed, serialization-aware migration tool where appropriate; make a backup first; and document what changed.

Our local rehearsal showed why this matters. The destination database restored correctly and the article loaded, but one internal link still pointed to the source address. We corrected the known test URL only in the destination fixture, then confirmed that the source URL no longer appeared in the page output. That is evidence for a checklist item—not a claim that every site can be repaired with a simple text replacement.

5. Verify the destination before changing DNS

Run a written checklist on the destination. At a minimum, test:

AreaWhat to verify
Home pageIt loads, renders correctly, and does not redirect to the old host
Key pages and postsTitles, body content, internal links, and canonical URLs are correct
MediaImages, downloads, and uploads resolve from the destination
AuthenticationA designated test account can sign in; do not rely only on a public page
Forms and emailTest delivery, reply address, spam controls, and attachments using non-sensitive data
Payments and integrationsUse test mode or a controlled test transaction where available
TLS and redirectsHTTPS, www/non-www rules, and old URLs work as intended
Background workCron jobs, queues, scheduled tasks, and webhooks are active only where intended
RecoveryYou can explain exactly how traffic returns to the source

The local rehearsal covered home pages, posts, pretty permalinks, internal links, database counts, a test media file, and a simulated rollback. It did not cover production DNS, TLS, email, CDN, forms, payments, plugins, or real users. Your own checklist must cover the components your site actually uses.

6. Plan the traffic switch and the rollback

Choose a low-traffic window where possible. A provider’s migration guidance may recommend allowing time for DNS propagation, but actual behavior depends on TTL, DNS provider, resolver caches, and your architecture. Hostinger’s VPS migration guidance recommends planning for a low-traffic period and allowing time for DNS propagation.

Before changing traffic, write down:

If email shares the domain, preserve and review the complete mail path before the DNS change: MX, SPF, DKIM, DMARC, mailbox/alias/forwarding rules, SMTP credentials, sending-service verification, and any application mail configuration. A website migration is not accepted while forms or transactional mail silently use the wrong server. Test send and receive behavior with independent accounts before and after cutover.

For DNS, record the current zone and nameserver state, the intended changes, current TTLs, and the time each change is made. Do not promise instant propagation or zero downtime. Verify the destination directly before the switch, then resolve the production hostname from more than one independent resolver or network after the change.

Keep the source available until the destination is verified under real traffic conditions. In the local rehearsal, stopping the destination and returning to the source restored the tested article successfully. A real rollback needs equivalent planning for DNS, data writes, email, and any external services.

Prove that rollback is executable

“We can change DNS back” is not a complete rollback test. Before cutover:

After any rollback, repeat the same page, login, media, form/email, DNS, and database checks used to accept the destination. Traffic returning to an HTTP 200 home page does not by itself prove that the original service is safe to resume.

7. Monitor after the switch

For at least the first day, inspect:

Do not take “the home page loads” as the whole acceptance test.

Common migration mistakes

Before the final traffic switch, work through the printable WordPress Pre-launch Checklist for HTTPS, search controls, email, access, monitoring, DNS, and launch ownership.

A concise handover record

At the end of the migration, preserve a short record with:

That record is more useful than a vague “migration completed” message when you need to troubleshoot later.