Migrating a WordPress site—whether moving to a new host, changing domains, or transferring from a staging environment to production—is a task that most WordPress users face at some point. Done correctly, a migration takes 30-60 minutes with zero downtime. Done incorrectly, it can result in broken links, missing images, database errors, and hours of troubleshooting.
In this guide, we cover three migration methods: manual migration (for full control), plugin-assisted migration (for simplicity), and hosting provider migration (for convenience). Each method includes step-by-step instructions and a verification checklist.
Before You Migrate: Preparation Checklist
| Step | Why It Matters | How to Do It |
|---|---|---|
| Create a full backup | Safety net if migration fails | Use UpdraftPlus or manual export |
| Document current settings | Reference for post-migration verification | Screenshot wp-admin settings, active plugins list, permalink structure |
| Check server requirements | Ensure new host meets WordPress minimums | PHP 8.0+, MySQL 5.7+ / MariaDB 10.4+, HTTPS support |
| Note DNS settings | You will need to update DNS after migration | Export current DNS records from registrar |
| Reduce TTL | Speeds up DNS propagation after migration | Set DNS TTL to 300 seconds (5 minutes) 24 hours before migration |
Method 1: Manual Migration (Full Control)
Manual migration gives you complete control over the process. It is the preferred method for developers and for complex sites with custom configurations.
Step 1: Export the Database
Connect to your current hosting via SSH or phpMyAdmin and export the WordPress database:
Using command line (SSH): For related information, see our guide on How to Configure WooCommerce Shipping: Zones, Meth.
- Run:
mysqldump -u username -p database_name > backup.sql - Download the backup.sql file to your local machine
Using phpMyAdmin: For related information, see our guide on How to Back Up Your WordPress Site: Methods, Plugi.
- Select your database → Export → Quick export → SQL format → Go
- Save the .sql file
Step 2: Copy All Files
Download all WordPress files from the current server:
- Connect via SFTP (FileZilla, WinSCP, or Cyberduck)
- Download the entire WordPress directory (wp-content, wp-admin, wp-includes, root files)
- Alternatively, create a compressed archive:
tar -czf wordpress-backup.tar.gz /path/to/wordpress/
The wp-content directory is the most important—it contains your themes, plugins, uploads (images), and configuration files.
Step 3: Upload Files to New Server
- Upload via SFTP or extract the archive on the new server
- Ensure file permissions are correct: directories at 755, files at 644
- Verify the wp-config.php file is present but will need updating
Step 4: Create Database on New Server
- Create a new MySQL database and user on the new hosting
- Grant the user full privileges on the new database
- Import the database:
mysql -u new_username -p new_database < backup.sql
Step 5: Update wp-config.php
Edit wp-config.php on the new server with the new database credentials:
DB_NAME→ New database nameDB_USER→ New database usernameDB_PASSWORD→ New database passwordDB_HOST→ Usually 'localhost' but check with your host
Step 6: Search and Replace URLs (If Changing Domains)
If your domain is changing, you need to update all URLs in the database. WordPress stores absolute URLs for images, links, and serialized data. Use the WP-CLI tool or the Search Replace DB script:
wp search-replace 'https://old-domain.com' 'https://new-domain.com' --all-tables- This handles serialized data correctly (unlike a simple SQL find-and-replace)
Step 7: Update DNS
Point your domain's DNS records to the new server's IP address. Update the A record (and AAAA for IPv6) at your domain registrar. With TTL set to 300 seconds (from preparation), propagation typically completes within 5-30 minutes.
Method 2: Plugin Migration (Simplest)
Migration plugins handle the technical details automatically. This is the recommended method for users who are not comfortable with SSH and database management.
Recommended Migration Plugins
| Plugin | Free Limit | Key Features |
|---|---|---|
| All-in-One WP Migration | 512 MB export | One-click export/import, URL replacement included |
| UpdraftPlus Premium | Backup free, migration Premium | Incremental backups, cloud storage, site cloning |
| Duplicator Pro | 500 MB export (free) | Creates installer package, handles serialized data |
| WP Migrate | Limited (free) | Push/pull between environments, database-only migration |
Migration Process (All-in-One WP Migration)
- Install on source site: Install and activate the plugin on the current site
- Export: Go to All-in-One → Export → Export To → File. The plugin creates a .wpress archive
- Install WordPress on destination: Set up a fresh WordPress installation on the new host
- Install plugin on destination: Install the same plugin on the new WordPress installation
- Import: Go to All-in-One → Import → Upload the .wpress file
- Done: The plugin replaces the database, files, and updates URLs automatically
Method 3: Hosting Provider Migration
Many hosting providers offer free migration services or built-in migration tools:
- SiteGround: Free WordPress migration with their Migrator plugin
- Cloudways: Free first migration by their team
- Kinsta: Free migration included with all plans, handled by their team
- WP Engine: Automated migration plugin
Hosting-assisted migration is the easiest option but gives you the least control. For sites with custom configurations, cron jobs, or non-standard setups, manual or plugin migration is more reliable.
Post-Migration Verification Checklist
| Check | How to Verify | If It Fails |
|---|---|---|
| Homepage loads correctly | Visit your domain in a browser | Check DNS propagation, verify database connection |
| Admin login works | Go to /wp-admin and log in | Check wp-config.php database credentials |
| Permalinks work | Click on any post or page | Go to Settings → Permalinks → Save (regenerates .htaccess) |
| Images display correctly | Browse several pages with images | Run search-replace for old domain in uploads paths |
| Forms submit successfully | Test all contact forms | Check SMTP settings, form plugin configuration |
| SSL certificate active | Check for padlock icon in browser | Install SSL on new host, update WordPress URL to https |
| Email delivery works | Trigger a password reset email | Configure SMTP plugin (WP Mail SMTP) |
| WooCommerce functioning | Test add-to-cart and checkout flow | Verify payment gateway keys, shipping zones |
| Cron jobs running | Check scheduled tasks in WP-Crontrol | Verify wp-cron is enabled or set up server cron |
| Search functionality | Test site search | Rebuild search index if using a search plugin |
Common Migration Issues and Solutions
| Issue | Cause | Solution |
|---|---|---|
| White screen after migration | PHP version mismatch or plugin conflict | Enable WP_DEBUG, check PHP version, disable plugins via FTP |
| Mixed content warnings | Some URLs still use http:// instead of https:// | Run search-replace: http://domain.com → https://domain.com |
| Broken images | Upload paths not updated or files missing | Verify wp-content/uploads directory, run URL search-replace |
| Database connection error | Wrong credentials in wp-config.php | Verify DB_NAME, DB_USER, DB_PASSWORD, DB_HOST |
| 404 on all pages except homepage | Permalink .htaccess not regenerated | Settings → Permalinks → Save Changes |
| Redirect loops | Old CDN or caching rules conflicting | Clear all caches, check .htaccess for conflicting redirects |
For more details, refer to the official documentation: WordPress Migration Documentation.
Frequently Asked Questions
How long does a WordPress migration take?
A typical migration takes 30-60 minutes for the technical process. DNS propagation can add 5 minutes to 48 hours depending on your TTL settings and ISP caching. Reducing TTL to 300 seconds 24 hours before migration minimizes propagation delays.
Will I lose any data during migration?
Not if you follow the backup-first approach. Create a full backup before starting, and do not delete the old site until you have verified everything works on the new host. The backup ensures you can restore the original state if anything goes wrong.
Can I migrate a WordPress site without downtime?
Yes. The key is to complete the migration on the new server before updating DNS. Set up the site on the new host, verify everything works (using a temporary URL or hosts file entry), then update DNS. Users will be served by the old server until DNS propagates, then seamlessly switch to the new server.
Do I need to reinstall plugins and themes after migration?
No. A full migration (files + database) includes all plugins, themes, uploads, and settings. Everything transfers as-is. You should verify that plugins are active and configured correctly, but reinstallation is not necessary.
What if my site is too large for a migration plugin?
Sites exceeding 2-5 GB (common with media-heavy sites) may hit upload limits or timeout issues with migration plugins. In this case, use the manual method: transfer files via SSH/SFTP and import the database via command line. Large databases can be split using the --max_allowed_packet parameter.
Should I update WordPress, plugins, and themes before or after migration?
Update before migration on the source site, and verify everything works after updating. Migrating an already-updated site avoids the complexity of troubleshooting update issues on an unfamiliar server. For security and performance best practices, see our WordPress maintenance checklist.
Reliable WordPress Backup and Migration
Get UpdraftPlus Premium for automated backups, cloud storage integration, and one-click site migration. GPL licensed for unlimited sites.
Browse UpdraftPlus Premium →


