Moving a WordPress site to a new cPanel host should not cost you a single second of downtime. Whether you are leaving a slow host, consolidating multiple sites onto one account, or upgrading to better infrastructure, the migration process follows a predictable sequence: copy the files, export the database, set up the new hosting environment, import everything, verify, and then — only then — point your DNS to the new server. If you handle the DNS cutover correctly, your visitors never see an error page or a moment of unavailability.
This guide covers three migration approaches ranked by complexity: using a migration plugin (easiest), using cPanel's built-in tools (intermediate), and manual migration via command line (advanced). All three achieve the same result — a complete, working copy of your WordPress site on a new host with zero downtime.
Before You Start: Pre-Migration Checklist
Every migration, regardless of method, requires the same preparation:
- Take a full backup on the old host. Use your existing backup method — Softaculous, a plugin, or a manual cPanel backup. Having a backup you can restore to the original server if anything goes wrong is non-negotiable. Our WordPress backup strategies guide covers all the options.
- Note your DNS TTL — Check the current TTL (Time To Live) on your domain's A record. If it is set to 86400 (24 hours), reduce it to 300 (5 minutes) at least 24–48 hours before the migration. This ensures that when you point DNS to the new server, the change propagates quickly.
- Document your setup — Record your WordPress version, PHP version, active plugins and versions, active theme, permalink structure, and any
wp-config.phpcustomizations. You will need to match these on the new host. - Check resource limits on the new host — Ensure the new cPanel account has enough disk space, databases, and the correct PHP version. See our guide on best cPanel settings for WordPress performance to configure the new environment optimally.
Method 1: Migration Plugin (Easiest)
Migration plugins handle the entire process — packing files and database, transferring them to the new server, and unpacking everything. This is the best method for sites under 2GB and for users without SSH access.
Recommended Plugins
| Plugin | Free Tier Limit | Best For | Notes |
|---|---|---|---|
| All-in-One WP Migration | 512MB import (extendable) | Simple sites under 512MB | Handles search-replace automatically |
| Duplicator | 500MB package | Sites needing precise control | Creates installer + archive package |
| UpdraftPlus (Premium) | Paid migration addon | Sites already using UpdraftPlus for backups | Migrates directly between servers |
| Migrate Guru | Unlimited (free) | Large sites (no size limit) | Uses external server for migration, no local storage needed |
Step-by-Step: Duplicator
On the old host:
- Install and activate the Duplicator plugin.
- Go to Duplicator > Packages > Create New.
- Run the system scan. Fix any warnings (large files, non-standard permissions).
- Click Build. Duplicator creates two files: an archive (your entire site) and an installer.php file.
- Download both files to your local computer.
On the new host (MassiveGRID's cPanel hosting or any cPanel host):
- Create a new MySQL database and database user in cPanel > MySQL Databases. Note the database name, username, and password.
- Upload the archive and installer.php to the new domain's document root using cPanel's File Manager.
- Access
yournewdomain.com/installer.phpin your browser (or use a temporary URL / hosts file edit — see the DNS section below). - The Duplicator installer walks you through extracting files, connecting to the new database, and running the search-replace to update URLs.
- Verify the site works on the new server.
Method 2: cPanel-to-cPanel Migration
If both your old and new hosts run cPanel, you can transfer the entire account (or specific components) using cPanel's built-in tools.
Using cPanel Backup + Restore
On the old host:
- Go to Backup in cPanel.
- Under "Partial Backups," download a Home Directory Backup and a MySQL Database Backup for your WordPress database.
On the new host:
- Go to Backup in cPanel.
- Under "Restore," upload and restore the home directory backup.
- Upload and restore the MySQL database backup.
- In MySQL Databases, create a new database user and assign it to the restored database with All Privileges.
- Edit
wp-config.phpin File Manager to update the database name, username, password, and host if they differ on the new server. - If your domain name is changing, run a search-replace on the database. Use the WP-CLI command
wp search-replace 'olddomain.com' 'newdomain.com'or the Better Search Replace plugin.
Using Transfer Tool (WHM)
If your new host provides WHM access or offers migration assistance, the Transfer Tool in WHM can pull an entire cPanel account from the old server automatically. This is the cleanest method because it preserves all settings, email accounts, databases, and cron jobs. On MassiveGRID's high-availability cPanel hosting, the support team handles cPanel-to-cPanel migrations at no additional cost.
Method 3: Manual Migration (SSH)
For developers and system administrators who prefer command-line control, manual migration via SSH is the most precise method and works for sites of any size.
Step-by-Step
On the old server (via SSH):
# Export the database
mysqldump -u dbuser -p dbname > wordpress_backup.sql
# Compress the site files
tar -czf wordpress_files.tar.gz -C /home/username/public_html .
Transfer files to the new server:
# From the old server, push to the new server
scp wordpress_backup.sql newuser@newserver:/home/newuser/
scp wordpress_files.tar.gz newuser@newserver:/home/newuser/
On the new server (via SSH):
# Extract files to document root
tar -xzf /home/newuser/wordpress_files.tar.gz -C /home/newuser/public_html
# Create the database
mysql -u root -p -e "CREATE DATABASE wpdb; GRANT ALL ON wpdb.* TO 'wpuser'@'localhost' IDENTIFIED BY 'strongpassword'; FLUSH PRIVILEGES;"
# Import the database
mysql -u wpuser -p wpdb < /home/newuser/wordpress_backup.sql
# Update wp-config.php
nano /home/newuser/public_html/wp-config.php
# Update DB_NAME, DB_USER, DB_PASSWORD, DB_HOST
# Search-replace if domain changed
wp search-replace 'olddomain.com' 'newdomain.com' --path=/home/newuser/public_html
# Fix file permissions
find /home/newuser/public_html -type d -exec chmod 755 {} \;
find /home/newuser/public_html -type f -exec chmod 644 {} \;
The Zero-Downtime DNS Cutover
This is the critical step that makes the difference between a seamless migration and a period of downtime. The principle is simple: do not touch DNS until the new server is fully verified and ready to serve traffic.
Step 1: Verify the New Site Without DNS
You need to see your site on the new server before changing DNS. There are two ways to do this:
Option A: Edit your local hosts file
Add a line to your computer's hosts file that maps your domain to the new server's IP address. This forces your browser to connect to the new server while the rest of the world still sees the old server.
# On macOS/Linux: /etc/hosts
# On Windows: C:\Windows\System32\drivers\etc\hosts
123.456.789.10 yourdomain.com www.yourdomain.com
Option B: Use a temporary URL
Most cPanel hosts provide a temporary URL (like server123.yourhostname.com/~username or an IP-based URL). Check with your hosting provider.
Step 2: Test Everything
With the hosts file edit or temporary URL, thoroughly test your site on the new server:
- Load the homepage and several inner pages
- Test the WordPress admin dashboard
- Verify images and media files load correctly
- Test forms, WooCommerce checkout (if applicable), and any interactive features
- Check that SSL is working (no mixed content warnings)
- Verify permalink structure matches the old site
Step 3: Freeze Content on the Old Site
Once you are ready to cut over, stop making changes on the old site. If the site accepts user-generated content (comments, orders, registrations), consider putting it in maintenance mode briefly or making a final database sync.
Step 4: Update DNS
Change the A record (and AAAA record for IPv6) for your domain to point to the new server's IP address. If you reduced the TTL earlier, the change will propagate within minutes. Most visitors will reach the new server within 5–15 minutes; global propagation typically completes within 1–2 hours.
Step 5: Remove Hosts File Edit
Remove the hosts file entry you added in Step 1. From now on, your browser resolves DNS normally, and you should reach the new server.
Step 6: Monitor
Watch your new server's logs and cPanel resource usage for 24–48 hours. Verify that traffic is arriving at the new server and that no errors are appearing. Keep the old server active for at least a week in case you need to roll back.
Post-Migration Tasks
- Regenerate permalinks — Go to Settings > Permalinks in WordPress and click Save Changes (even without making changes). This refreshes the
.htaccessrules. - Clear all caches — Flush your caching plugin's cache, clear OPcache in cPanel, and clear any CDN cache.
- Verify cron jobs — Check that WordPress cron (or server cron if you use it) is running correctly. Go to cPanel > Cron Jobs and verify any custom cron entries.
- Update SSL — Ensure AutoSSL has provisioned a certificate for your domain on the new server. Check in cPanel > SSL/TLS Status.
- Update Google Search Console — If you changed your server IP, Google Search Console does not need updating. If you changed your domain, add and verify the new domain.
- Set up backups — Configure your backup strategy on the new server. See our WordPress backup guide.
Frequently Asked Questions
How long does a WordPress migration take?
The actual file and database transfer takes minutes for most sites (under 5GB). The total process — including setup, verification, and DNS propagation — typically takes 2–4 hours. Planning and preparation (reducing DNS TTL, documenting settings) should start 48 hours before the migration window.
Will I lose any SEO rankings during migration?
Not if you do it correctly. Keep the same URLs, permalink structure, and content. A zero-downtime migration with proper DNS cutover means search engines continue to access your site throughout the process. Google has confirmed that changing hosting providers (IP addresses) does not affect rankings. If you are also changing your domain name, set up 301 redirects from the old domain to the new one.
Can I migrate a WordPress Multisite network?
Yes, but it requires additional care. The database contains network-specific tables, and the domain mapping must be updated on the new server. For subdomain networks, wildcard DNS must be configured on the new host. We recommend the manual migration method for Multisite. See our Multisite setup guide for the architectural details you need to understand.
What if my old host does not provide SSH or cPanel backup access?
Use a migration plugin like All-in-One WP Migration or Duplicator, which work entirely through the WordPress dashboard. These plugins package your files and database into a downloadable archive that you can then upload to the new host. Migrate Guru transfers directly between servers without needing to download anything locally.
Should I keep the old hosting account after migration?
Yes — keep it active for at least 7 days after DNS cutover. This gives you a rollback option if issues emerge on the new server. It also ensures that any cached DNS entries pointing to the old server still serve your site during the propagation window. After confirming everything is stable on MassiveGRID's high-availability cPanel hosting (or your new host), you can safely cancel the old account.