How to move a website between cPanel hosts without downtime
Copy a whole cPanel account (files, databases, email, DNS zone, SSL and cron jobs) to a new host with the WHM Transfer Tool, a full backup or by hand, test it before anyone sees it, then switch DNS so visitors and mail never hit a dead server.
Your migration plan
This moves a whole cPanel hosting account (website files, databases, mailboxes, DNS zone, SSL certificates and cron jobs) from one host to another. You copy the account with cPanel's own tools, test it privately from your own PC, then freeze changes, copy again and switch DNS. The account size sets how long the copy takes, and the old host must keep running until DNS has settled, which is at least as long as the old TTL (the time DNS answers are cached).
The Transfer Tool is the most complete copy when you or the new host have root (full admin access) in WHM. With only a cPanel login, a full backup does the same job.
Other options and when to use them
- Transfer or Restore a cPanel Account: You have root on the new server but only a cPanel login for the old account. The new server pulls the account with that password.
- Manual copy of files, databases, mail and cron: You are reshaping the account, changing the username or domain layout, or the new host does not accept backups.
- Transfer Tool with Live Transfer left on: You have rehearsed it on a test account and want cPanel to change DNS and suspend the old account for you.
Take stock and lower DNS caching times first, then copy and test while the old site keeps serving visitors. Only then freeze changes, copy again and switch DNS. The old account is cancelled last, because until then switching back is a single DNS change.
- Inventory of domains, DNS records, mailboxes, databases and cron jobsYou check the new account against this list. If the old host runs your DNS, some records exist nowhere else.
- Lower TTLs, at least one old-TTL period before the switchResolvers only see the lower TTL once the old one has expired, so it must be done early to make the switch quick.
- Free disk space and download a full backupA restore needs double the archive size free, and the backup is your fallback if anything goes wrong.
- First full copy with Live Transfer offCopies everything while visitors still use the old site, so nothing changes for them yet.
- Fix missing domains, PHP settings and paths, then test privately with the hosts fileYou find problems before anyone else sees the new server.
- Freeze changes, copy the changes again and install certificatesOrders, form entries and uploads written after the first copy are otherwise lost.
- DNS switch, then cron jobs and AutoSSL on the new hostAutoSSL can only issue a certificate once the domain points at the new server, and cron jobs must not run on both hosts.
- Late mail moved, final backup, then the old account cancelledSome mail reaches the old server until every resolver updates, and cancelling cannot be undone.
Built-in and third-party tools treat these differently. Tick each one off once you have decided.
Download this checklist (Excel)How each tool handles it
Built-in methodTransfer Tool: with Update DNS Zone on, the account's zone is recreated on the new server. Custom DNS zone templates are not transferred. With Update DNS Zone off, it does not create the zone or set up mail routing on the new server.Tip: Run nslookup -type=ns contoso.com. If the old host answers, copy every record from Zone Editor before you change anything, including SPF, DKIM and verification records.
cPanel Docs: Transfer ToolHow each tool handles it
Built-in methodTransfer Tool: Live Transfer is on by default. On the old server it updates the A, nameserver and MX records, copies mailbox data again, and suspends the account as soon as the copy finishes. It works only between two cPanel & WHM servers.Tip: Turn it off in the account's Default settings unless you have rehearsed it on a test account.
cPanel Docs: Transfer ToolHow each tool handles it
Built-in methodAll methods: resolvers keep the old address for as long as the old TTL says, whichever copy method you use. The TTL is set wherever your DNS is hosted, not by the copy.Tip: Lower TTLs to a few minutes at least one old-TTL period before cutover, and raise them again once you will not roll back.
How each tool handles it
Built-in methodTransfer Tool: keeps the existing public_html structure, including addon and subdomain document roots outside the main site's folder.Transfer or Restore a cPanel AccountRestricted Restore, on by default, does not restore parked or addon domains. Add them afterwards with Create A New Domain, pointing each at its original document root.Tip: Compare the new account's domain list with your inventory straight after the copy.
cPanel Docs: Transfer ToolHow each tool handles it
Built-in methodTransfer Tool: if a database with the same name already exists on the new server, the source database is renamed during the transfer. A changed username also changes database name prefixes and absolute paths such as /home/olduser/.WP-CLI search-replaceReplaces the old path across a WordPress database, including serialised data. Run with --dry-run first.Tip: Keep the same username if you can. If not, update the site's configuration file and every cron job path.
cPanel Docs: Transfer ToolHow each tool handles it
Built-in methodTransfer Tool: MultiPHP PHP-FPM settings do not transfer. cPanel saves the account's settings file with a .transferred suffix, which someone with root renames and rebuilds.Tip: Note each domain's PHP version in MultiPHP Manager on the old host, and set the same on the new host before testing.
cPanel Docs: After the transferHow each tool handles it
Built-in methodFull backup restore: cPanel needs free space of at least double the archive size, and backups of accounts near or over quota can fail.Tip: Delete old backups and logs, and ask users to empty mail Trash and Junk folders, before you take the backup.
cPanel Docs: BackupHow each tool handles it
Built-in methodAutoSSL (cPanel's free automatic certificates): cannot issue a certificate on the new host until the domain resolves to it, so visitors can see a warning in between.Tip: Export the certificate and key from the old host and install them on the new host before DNS changes, then run AutoSSL afterwards.
cPanel Docs: SSL/TLS StatusHow each tool handles it
Built-in methodTransfer Tool with Live Transfer off: mail delivered to the old server after the copy stays in the old mailboxes. With Live Transfer on, cPanel copies mailbox data again before suspending the old account.imapsyncCopies IMAP mailboxes between servers. Run it again after cutover to pick up late mail without duplicates.Tip: Keep the old account active for at least the old TTL plus a margin, and check the old mailboxes before you cancel.
cPanel Docs: Transfer ToolHow each tool handles it
Built-in methodTransfer Tool and backup restore: each copy is a snapshot, so orders, form entries and uploads written to the old site afterwards are missing until you copy again. Whether a second Transfer Tool run can overwrite the account already on the new server: not stated in cPanel's Transfer Tool documentation: test it on a test account.Tip: Put the old site in maintenance mode or stop taking orders, note the time, and make the final copy the last step before DNS changes.
cPanel Docs: Transfer ToolHow each tool handles it
Built-in methodWhether the Transfer Tool and backup restore bring cron jobs across: not stated in cPanel's Transfer Tool documentation: check the Cron Jobs page on the new host after the copy. A job that runs on both hosts can send duplicate emails or process orders twice.Tip: Hold back or comment out jobs on the new host until cutover, then disable the same jobs on the old host.
cPanel Docs: Cron JobsHow each tool handles it
Built-in methodTransfer Tool: does not transfer two-factor authentication settings. Users must set it up again on the new server.Tip: List everyone who uses it before the move and remind them in the first week.
cPanel Docs: Transfer Tool
- 1
Take stock
Before you startWatch out: If the old host runs your DNS, cancelling it takes the website and email offline together.
Ways around it
- Change only the A records at the old host on cutover day, or rebuild the zone at the new host or a DNS provider first, then move nameservers.
Watch out: The Transfer Tool does not copy custom DNS zone templates.
Ways around it
- Check the new zone against your saved list of records.
Check your DNS records before and after the change
Show the detailed steps (6) → - 2
Prepare
At least a day or two before the switchShow the detailed steps (3) →Watch out: Restoring a cPanel backup needs free space of at least double the archive size, and backups of accounts near their quota can fail.
Ways around it
- Free space first: old backups, logs and mail Trash folders are often the biggest.
- 3
Copy the account
Watch out: In the Transfer Tool, Live Transfer is on by default. It changes DNS and suspends the old account as soon as the copy finishes, before you have tested anything.
Ways around it
- Turn it off in the account's Default settings and change DNS yourself after testing.
Watch out: When the new host restores a full backup or uses Transfer or Restore a cPanel Account, Restricted Restore (on by default) skips parked and addon domains.
Ways around it
- Add them with Create A New Domain, pointing each at its original document root.
Show the detailed steps (4) →Watch out: If the username changes, databases are renamed and absolute paths such as /home/olduser/ break.
Ways around it
- Keep the same username where you can, or update the site's configuration file and every cron path.
Tools that can do it
- WP-CLI search-replaceReplaces the old path across a WordPress database, including serialised data. Run with --dry-run first.
- 4
Test privately
Show the detailed steps (4) →Watch out: Incoming mail still goes to the old host until DNS changes, so only sending can be tested now.
Ways around it
- Test incoming mail to each important mailbox straight after the switch.
- 5
Switch over
In the agreed freeze windowWatch out: Orders and form entries written to the old site after the first copy are not on the new host.
Ways around it
- Freeze changes, then copy the database again as the last step before DNS changes.
Watch out: AutoSSL (cPanel's free automatic certificates) on the new host cannot issue a certificate until the domain points at it, so visitors may see a warning.
Ways around it
- Export the current certificate and key from the old host and install them first, then run AutoSSL after DNS moves.
Turn this phase into dated tasks with the cutover planner
Show the detailed steps (5) → - 6
Check and close
After DNS settlesWatch out: Some senders keep delivering to the old server while DNS changes, and that mail stays in the old mailboxes.
Ways around it
- Keep the old account active for at least the old TTL plus a margin, and drag late messages across in a mail client.
Tools that can do it
- imapsyncFree command-line tool that copies IMAP mailboxes. Run it again after cutover to pick up late mail without duplicates.
Watch out: cPanel does not transfer two-factor authentication settings.
Ways around it
- Ask everyone who used it on cPanel or webmail to set it up again in the first week.
Show the detailed steps (4) →Watch out: Once the old host removes the account, its files, databases and mailboxes are gone.
Ways around it
- Until you cancel, rollback is a DNS change back to the old IP address, so keep the old account until every check passes.
- Every domain is on the new account, and file counts, sizes and database row counts match.
- All public resolvers return the new IP address and MX, and every domain has a valid certificate.
- Mail flows in and out on the new host, and no new mail has reached the old mailboxes for a full day.
- Pages, forms and a test order work, and each cron job runs once, on the new host only.
Tools named in this plan are independent third-party products, not endorsed by the platform vendor and not paid placements. Check the tool's own documentation and run a pilot first.
Detailed steps
Open a part when you reach it in the plan. Each step says where to go, what to do and what you should see.
About this migrationWhat it covers, limits at a glance
A cPanel account holds more than a website: it usually also holds the domain's DNS zone, mailboxes, MySQL databases, SSL certificates and scheduled cron jobs. Moving it between two cPanel hosts is mostly a copy job, and cPanel gives you three native ways to do it. Which one you can use depends on the access you have on each side: root on both servers, root on the new server only, or just a cPanel login.
This guide follows the order the work is done: inventory, choose the method, copy, test on the new host with your hosts file, then a controlled cutover where DNS changes only once the new copy is proven. If the site is WordPress, our WordPress migration guide covers the WordPress-specific checks. If you are also moving email to Microsoft 365 or Google Workspace, do that as a separate project with the cPanel email to Microsoft 365 or cPanel email to Google Workspace guide.
1What you need before step one
| Need | Details | Where to get it |
|---|---|---|
| Old host cPanel login | The account's cPanel username and password. For the Transfer Tool route, root or a sudo user on the old server instead. | Old host's welcome email or client area |
| New hosting account or server | A cPanel account on the new host with at least twice the old account's disk usage free. For the Transfer Tool, root in WHM on the new server. | New host's sign-up; check their current pricing and plan limits |
| DNS access | Sign-in to whoever hosts the domain's DNS: the old host (cPanel Zone Editor), your registrar or a DNS provider. | Find it with nslookup -type=ns contoso.com; see change nameservers |
| Registrar login | Only if you will change nameservers. | The company you pay for the domain |
| SSH or Terminal (manual route) | cPanel Advanced > Terminal, or an SSH client, on both hosts if the hosts allow it. | Ask each host to enable shell access if it is missing |
| Hosts file access on your PC | Admin rights to edit the hosts file so you can test the new host before DNS changes. | Test a site with the hosts file |
| A current backup | A full backup of the old account kept off both servers, so you can roll back. | Step 2 of this guide; for WordPress also back up a WordPress site |
2Inventory the old account6 steps
Everything you write down here becomes a test in Step 5. Record it in your Application inventory and dependency map and Network and DNS worksheet.
- 1
List domains and subdomains
Where: cPanel on the old host (https://contoso.com:2083 or the link in your host's client area) > Domains > DomainsCopy every domain, addon domain, alias (parked) domain and subdomain, with its document root, into the inventory. Note which domains share a document root.
You should see: A list of every domain the account serves, each with a document root such as /home/user/public_html. - 2
Record the DNS zone
Where: cPanel on the old host (https://contoso.com:2083 or the link in your host's client area) > Domains > Zone Editor > Manage (next to each domain)Copy every record: A, AAAA, CNAME, MX, TXT (SPF, DKIM, DMARC, verification codes for Google, Microsoft and others), SRV and CAA, with its TTL. Records you add for third-party services exist only here, and the Transfer Tool will not copy custom DNS zone templates.
nslookup -type=ns contoso.com nslookup -type=mx contoso.com nslookup -type=txt contoso.comYou should see: The Network and DNS worksheet lists every record and shows whose nameservers answer for the domain. - 3
List databases and their users
Where: cPanel on the old host (https://contoso.com:2083 or the link in your host's client area) > Databases > Manage My DatabasesWrite down each database, its size and the user assigned to it. Then find which site uses which database: for WordPress, open
wp-config.phpin Files > File Manager and readDB_NAMEandDB_USER.You should see: Each database is matched to the site that uses it. - 4
List mailboxes, forwarders and filters
Where: cPanel on the old host (https://contoso.com:2083 or the link in your host's client area) > Email > Email Accounts, Forwarders, and Global Email FiltersRecord every mailbox with its size, every forwarder and autoresponder, and any account-level filters. Ask users to empty Trash and Junk folders now; it reduces the copy.
You should see: The inventory has every address that must keep working after the move. - 5
Copy the cron jobs
Where: cPanel on the old host (https://contoso.com:2083 or the link in your host's client area) > Advanced > Cron JobsCopy each line in the Current Cron Jobs table, plus the address in the Email box. cPanel requires each command to use an absolute path, so note any path that contains the old username. With Terminal access you can save them in one go.
crontab -l > ~/crontab-backup.txtYou should see: crontab-backup.txt in the home directory holds every scheduled job, or your notes list each one with its schedule. - 6
Record PHP version, SSL and special settings
Where: cPanel on the old host (https://contoso.com:2083 or the link in your host's client area) > Software > MultiPHP Manager, MultiPHP INI Editor, and Security > SSL/TLS StatusNote the PHP version for each domain and any changed INI values (memory limit, upload size). In SSL/TLS Status, note which domains have a certificate, who issued it and when it expires. Also note any
.htaccessrules, IP blocks, password-protected directories and FTP accounts.You should see: The inventory shows the PHP version and certificate status for every domain.
3Prepare: back up, lower TTLs and set up the new host3 steps
- 1
Take a full backup of the old account
Where: cPanel on the old host (https://contoso.com:2083 or the link in your host's client area) > Files > BackupSelect Download a Full Account Backup. In Backup Destination choose Home Directory, enter an email address for the completion notice, and select Generate Backup. When the email arrives, download the file from Backups Available for Download to your PC. This is your rollback copy and, for Step 3b, the file you give the new host.
You should see: A .tar.gz file named after the account and date is on your PC, and its size is close to the account's disk usage. - 2
Lower the TTLs
Where: Whoever hosts your DNS (old cPanel: Domains > Zone Editor > Manage > Edit on each record)Lower the TTL on the A records for the domain and
www, any AAAA records, and the MX target's A record, to a few minutes. Do it at least one full old-TTL period before cutover. Follow lower DNS TTL before a migration.nslookup -debug -type=a contoso.com 8.8.8.8You should see: The ttl = value in the answer shows the new, lower number. - 3
Match PHP on the new host
Where: cPanel on the new host (the login link in the new host's welcome email or client area) > Software > MultiPHP ManagerSet the same PHP version you recorded in Step 1 for each domain once the domains exist on the new host (after Step 3), and copy any custom values into MultiPHP INI Editor.
You should see: MultiPHP Manager on the new host shows the same version as the old host for every domain.
4Copy with the WHM Transfer Tool (root)4 steps
Use this when you have root in WHM on the new server. Skip to Step 3b or 3c otherwise. Do not restart services on either server or run a cPanel update (upcp) while a transfer runs, and make sure the servers can reach each other on port 2087.
- 1
Connect to the source server
Where: WHM on the new server (https://:2087), signed in as root > Transfers > Transfer Tool In Remote Server Address enter the old server's IP address or hostname, and in Remote SSH port its SSH port (22 by default). Under authentication, log in as
root, or choose the option for a specific user, enter the Username and Password and pick a Root Escalation Method (sudo or su). Choose Password or SSH Public Key in Authentication Method. Leave Restricted Restore as it is unless you understand its limits. Select Scan Remote Server.You should see: The scan completes and the Account List opens, showing the accounts on the old server. - 2
Pick the account and turn Live Transfer off
Where: Transfer Tool > Accounts tabTick the account. Check the User box: a red highlight means that username or domain already exists on the new server. Select Default to open the account's settings. Keep Update DNS Zone set to Enabled (cPanel strongly recommends it, so the new server gets the zone and mail routing). Set Live Transfer off so the old server is not changed or suspended. Select Apply.
You should see: The account row shows your settings and no red highlight. - 3
Start the copy
Where: Transfer Tool > Accounts tabSelect Copy. Leave the Account Transfer page open and watch the log for each account. Fix any error it reports and copy that account again.
You should see: The Account Transfer page shows the account as completed, and it appears in WHM > Account Information > List Accounts. - 4
Restore PHP-FPM settings
Where: Terminal or SSH on the new server, as rootPHP-FPM settings do not transfer. cPanel saves the account's file with a
.transferredsuffix in/var/cpanel/userdata/username. Rename it to remove the suffix, then rebuild. Replaceusernameand the file name with the ones you see.ls /var/cpanel/userdata/username/ | grep transferred mv /var/cpanel/userdata/username/contoso.com.php-fpm.yaml.transferred /var/cpanel/userdata/username/contoso.com.php-fpm.yaml /scripts/php_fpm_config --rebuildYou should see: The .transferred file is gone and the rebuild finishes without errors.
5Copy with a full backup or an account-level transfer3 steps
Use this when you only have cPanel on the old host. cPanel itself cannot restore a full backup; the restore happens in WHM on the new server, either by you (if you have root there) or by the new host's support team.
- 1
Send the backup to the new host
Where: Your PC, and the new host's support ticket or upload portalGive the new host the full backup from Step 2 and ask them to restore it to your new account. Tell them to keep the same username if they can, and ask whether Restricted Restore will skip parked or addon domains on your account.
You should see: The new host confirms the restore and the account shows your files and databases. - 2
Or restore it yourself in WHM
Where: WHM on the new server (https://:2087), signed in as root > Transfers > Transfer or Restore a cPanel Account To pull the account directly, fill in Remote Server, Remote username and Remote password with the old cPanel login and select Transfer. To use the backup file, go to Upload a file to restore, select Choose File, pick the .tar.gz and select Restore. Leave A records on Replace All Matching A Records so the zone points at the new server. The server needs free space of at least twice the archive size.
You should see: The Account Restore (or Remote User Account Transfer) page finishes without errors, and the account appears in List Accounts. - 3
Check what Restricted Restore skipped
Where: cPanel on the new host (the login link in the new host's welcome email or client area) > Domains > DomainsCompare the domain list with your Step 1 inventory. Restricted Restore does not restore parked or addon domains. Add any missing domains with Create A New Domain, pointing each at the same document root it had before.
You should see: Every domain from the inventory is listed on the new host with the right document root.
6Copy by hand: files, databases, email and cron4 steps
Use this when you are reshaping the account. Create each domain on the new host first (Domains > Domains > Create A New Domain).
- 1
Copy the website files
Where: Terminal on the new host (cPanel > Advanced > Terminal), or File Manager on both hostsWith SSH access to the old host, pull the files straight across with
rsync; the trailing slashes matter. Without shell access, download a Home Directory partial backup from Files > Backup on the old host, then upload and extract it in File Manager on the new host.rsync -avz -e "ssh -p 22" olduser@old-server.example.net:public_html/ ~/public_html/You should see: The file count and total size in public_html on the new host match the old host. - 2
Recreate and import the databases
Where: cPanel on the new host (the login link in the new host's welcome email or client area) > Databases > Manage My Databases, then phpMyAdmin or TerminalCreate each database and user, add the user to the database with ALL PRIVILEGES, then export from the old host and import on the new one following export and import a MySQL database. Update the database name, user and password in the site's configuration file if they changed.
You should see: The site's tables appear in phpMyAdmin on the new host with the same row counts as the old host. - 3
Recreate mailboxes and copy mail
Where: cPanel on the new host (the login link in the new host's welcome email or client area) > Email > Email Accounts > Create, then a mail clientCreate every address from the inventory with the same name, plus forwarders and autoresponders. To copy existing mail, add both the old and new mailbox to a desktop mail client over IMAP (server names from find your IMAP settings) and drag folders across, or ask the new host whether they offer an IMAP copy tool.
You should see: Each mailbox on the new host shows the same folders and roughly the same size as the old one. - 4
Recreate the cron jobs
Where: cPanel on the new host (the login link in the new host's welcome email or client area) > Advanced > Cron JobsEnter the notification address in Email and select Update Email. For each job from Step 1, choose a schedule under Common Settings or fill in the five time fields, enter the command with its absolute path (changed to the new username if needed) and select Add New Cron Job. Leave jobs that send mail or charge customers commented out until cutover.
You should see: The Current Cron Jobs table on the new host matches your saved list.
7Test the new host before anyone sees it4 steps
- 1
Point only your PC at the new server
Where: The hosts file on your PC (Windows: C:\Windows\System32\drivers\etc\hosts, opened in Notepad as administrator; macOS: /etc/hosts)Find the new server's IP address in the new cPanel sidebar (Shared IP Address or Dedicated IP Address). Add lines for the domain and
www, save, and flush your DNS cache, following test a site with the hosts file.203.0.113.25 contoso.com 203.0.113.25 www.contoso.comYou should see: ping contoso.com on your PC replies from the new server's IP address while everyone else still reaches the old host. - 2
Click through the site
Where: A private browser window on the same PCOpen the home page, key landing pages, contact forms, the shopping cart and checkout (in test mode), and the admin login. Check images load, forms send and there are no PHP errors. Expect a certificate warning if the new host has no certificate yet; that is fixed in Step 5.
You should see: Every page in the inventory loads from the new host, and forms submit. - 3
Test email on the new host
Where: New host webmail (cPanel > Email > Email Accounts > Check Email)Send a message from the new host to an outside address and reply to it. Inbound mail still arrives at the old host until MX changes, so only sending can be tested now.
You should see: The outside address receives the message and it is not marked as spam. - 4
Fix and re-test
Where: Your Cutover runsheet and the new host's cPanelRecord every problem, fix it on the new host and test again. Remove the hosts file lines when you finish, so you do not confuse yourself after cutover.
You should see: The runsheet shows every test passed and the go / no-go decision is yes.
8Cut over: freeze, final sync, switch DNS5 steps
- 1
Start the change freeze
Where: The old site's admin area (for WordPress: Plugins or a maintenance mode setting; for a shop: store settings)At the agreed time, put the old site into maintenance mode or stop taking orders, and tell editors not to publish. Note the time in the Cutover runsheet.
You should see: No new orders, posts or form entries are being written on the old host. - 2
Copy the changes since the first copy
Where: WHM Transfer Tool (Step 3a), or phpMyAdmin and Terminal (Step 3c)Re-run the copy for anything that changed: re-transfer the account (in the Transfer Tool's advanced options, Use Incremental Backups speed-up can shorten it), or export and import the database again and re-run the
rsynccommand for uploads.You should see: The newest order, post or form entry on the old site also exists on the new host. - 3
Install a certificate on the new host
Where: cPanel on the new host (the login link in the new host's welcome email or client area) > Security > SSL/TLS > Manage SSL sitesInstall the certificate and key exported from the old host for each domain if you have them. Otherwise plan to run AutoSSL straight after the DNS change; the new server cannot get an AutoSSL certificate until the domain resolves to it.
You should see: Security > SSL/TLS Status on the new host shows each domain with a valid certificate, or you have noted which ones wait for AutoSSL. - 4
Switch DNS
Where: Whoever hosts your DNS (old cPanel Zone Editor, registrar or DNS provider)Change the A records for the domain,
wwwand the mail host (for examplemail.contoso.com) to the new server's IP address, and update AAAA records or remove them if the new server has no IPv6. If MX points at a name that now resolves to the new server, mail follows automatically; otherwise follow change MX records. If you are moving nameservers instead, follow change nameservers after checking the zone on the new DNS host matches your worksheet. Update SPF to include the new server if it sends mail (set up an SPF record).nslookup contoso.com 8.8.8.8 nslookup -type=mx contoso.com 8.8.8.8You should see: Public resolvers return the new server's IP address once the old TTL has passed. - 5
Turn on cron and AutoSSL
Where: cPanel on the new host (the login link in the new host's welcome email or client area) > Advanced > Cron Jobs, and Security > SSL/TLS StatusUncomment or add the cron jobs you held back. On SSL/TLS Status, run AutoSSL for the domains that need it, and check none show AutoSSL problems. Then, on the old host, disable the same cron jobs so they do not run twice.
You should see: Every domain shows a valid certificate and each cron job runs once, on the new host only.
9After the move: watch, collect late mail, cancel the old host4 steps
- 1
Watch DNS propagation
Where: Command prompt or Terminal on your PCCheck the A and MX answers from several public resolvers until they all show the new server, following check DNS propagation.
nslookup contoso.com 1.1.1.1 nslookup contoso.com 8.8.8.8 nslookup -type=mx contoso.com 9.9.9.9You should see: All resolvers return the new IP address and MX. - 2
Collect mail that reached the old server
Where: Old host webmail, or a mail client connected to both old and new mailboxesOnce DNS has settled, check each old mailbox for messages received after the cutover time and move them to the new mailbox.
You should see: No new messages arrive in the old mailboxes for a full day. - 3
End the freeze and raise TTLs
Where: The site admin area, then your DNS hostTake the site out of maintenance mode. Set TTLs back to normal values once you are sure you will not roll back.
You should see: The site accepts orders and posts on the new host, and DNS TTLs are back to their usual values. - 4
Keep, then cancel, the old account
Where: Old host's client areaKeep the old account until DNS has settled, late mail is collected and you have a final full backup of it stored off both servers. Then cancel it. Record the date in the Decommission checklist.
You should see: The old host confirms cancellation and nothing (site, mail, cron) depended on it.
Expert notes
The detail behind the plan: options compared, and what experienced engineers check first. Tap any item.
Compare all the ways to do this4 options
WHM Transfer Tool (root on the new server)
Low effortBest for: VPS, dedicated and reseller servers where you have root in WHM on the destination and root or a sudo user on the source
- Moves whole accounts: files, databases, mail, DNS zone, SSL and cron
- Can move many accounts at once
- Can re-run for a final sync
- Needs root or a root-escalating login on the source server
- Live Transfer is on by default and changes the source if you leave it on
Transfer or Restore a cPanel Account (account-level)
Low effortBest for: Root on the new server, but only a cPanel username and password (or a full backup file) for the old account
- No root needed on the old host
- Takes a cpmove backup file or pulls directly with the cPanel password
- cPanel calls it a last resort if you have root on the source
- Restricted Restore (on by default) skips parked and addon domains
Full backup handed to the new host
Low effortBest for: Shared hosting on both sides, where you only have cPanel and the new host restores the file for you
- Only needs cPanel on the old host
- One archive holds the whole account
- cPanel cannot restore a full backup itself; the new host must do it in WHM
- Changes after the backup need a second copy
Manual copy (files, databases, mail and cron by hand)
High effortBest for: Moving one site into an existing account, changing the username or domain layout, or when the new host does not accept backups
- Full control over what moves and where
- Works between any hosts, not only cPanel
- Most steps, most chances to miss something
- Mail and cron must be recreated by hand
If you or the new host have root in WHM, use the Transfer Tool with Live Transfer off; it is the most complete copy. With only a cPanel login on the old host, generate a full backup and have the new host restore it, or let them pull it with Transfer or Restore a cPanel Account. Go manual only when you need to reshape the account.
Turn Live Transfer off unless you want the source changed for youReduces risk
In the WHM Transfer Tool, Live Transfer is enabled by default. On the source server it updates the account's A record to the destination, changes nameserver entries, updates MX records, redirects some web and mail requests, copies mailboxes again and suspends the transferred account. That is a full cutover the moment the copy finishes, before you have tested anything.
For a tested, zero-downtime move, set Live Transfer to off in the account's Default settings on the Accounts tab, keep Update DNS Zone enabled, and do the DNS change yourself in Step 6. Use Live Transfer only when you have rehearsed it and want cPanel to handle the switch.
Find out who runs your DNS before you plan the cutoverReduces risk
If the domain's nameservers point at the old host, the old cPanel Zone Editor is where every record lives, including MX, SPF, DKIM and verification records for other services. Cancelling the old hosting without moving the zone takes the website and email offline together.
Run nslookup -type=ns contoso.com. If the answer is the old host's nameservers, export or copy every record from Domains > Zone Editor into your Network and DNS worksheet. Then decide: either change only the A records at the old host on cutover day (simplest), or move the nameservers to the new host or a separate DNS provider with change nameservers after the zone is rebuilt there.
Lower TTLs a day or two aheadSaves time
Resolvers keep the old IP address for as long as the record's TTL says. A TTL of a day means some visitors and mail servers keep using the old host for a day after you switch.
At least one full old-TTL period before cutover, lower the TTL on the A, AAAA, www and MX records to a few minutes, following lower DNS TTL before a migration. Raise them again once the move is settled.
Freeze changes between the copy and the cutoverUser impact
Orders, form entries, comments and new posts written to the old database after you copy it do not exist on the new host. On an online shop, that is lost orders.
Agree a freeze window with the site owner. For WordPress or a shop, put the old site in maintenance mode or stop taking orders, then copy the database again (or re-run the transfer) as the last step before DNS changes. Write the freeze start and end times in the Cutover runsheet.
Plan for mail that lands on the old serverUser impact
While DNS propagates, some senders still deliver to the old server's MX. Without Live Transfer, those messages sit in the old mailboxes and users never see them.
Keep the old account active (not cancelled, not suspended) for at least as long as the old TTL, plus a margin. Afterwards, sign in to the old webmail and move any late messages across, or connect both accounts in a mail client and drag them over. Use find your IMAP settings for the old server name.
Instead of dragging late messages across by hand, an IMAP copy tool can sign in to the old and new mailboxes and copy the whole folder tree. It can be stopped and run again after cutover, and a second run picks up late mail without creating duplicates.
- imapsyncFree command-line tool for incremental, recursive IMAP to IMAP transfers; re-runs do not generate duplicates.
Expect database names and paths to changeReduces risk
cPanel prefixes database and database user names with the account username. If the username changes on the new host, or a database with the same name already exists there, the Transfer Tool renames the database. Cron jobs and scripts that use absolute paths such as /home/olduser/ also break when the username changes.
Keep the same cPanel username on the new host where you can. If it must change, update the database name, user and password in the site's configuration file (for WordPress, wp-config.php) and fix the paths in every cron command.
The Transfer Tool renames databases but does not rewrite the old home directory path stored inside them. Some WordPress plugins save absolute paths such as /home/olduser/ in their settings; WP-CLI changes them across every table, including serialised data.
- WP-CLI search-replaceReplaces the old path with the new one across the database and handles PHP serialised data; run with --dry-run first to see the count per table.
Match the PHP version and settings firstReduces risk
A site that ran on one PHP version can show a blank page or errors on another. cPanel also says PHP-FPM settings are not transferred automatically; the file is saved with a .transferred suffix for you to restore.
Record the PHP version and any custom settings from Software > MultiPHP Manager and MultiPHP INI Editor on the old host, and set the same on the new host before testing. With root, restore PHP-FPM settings as described in Step 3a.
Have a certificate ready before the switchUser impact
AutoSSL on the new host cannot issue a certificate while the domain still resolves to the old server; cPanel shows this as AutoSSL problems for a domain that does not resolve to the server. Visitors who reach the new server in that gap see a certificate warning.
Check Security > SSL/TLS Status on the old host. If you can, export the current certificate and key from the old host (Security > SSL/TLS) and install them on the new host so HTTPS works from the first request. After DNS points at the new server, run AutoSSL there and confirm every domain shows a valid certificate.
Leave room for the restoreSaves time
cPanel needs free disk space of at least double the archive size to restore a backup file, and backups of accounts near or over quota can fail because cPanel cannot write the files it needs.
Check the account size in the old cPanel sidebar (Disk Usage) and make sure the new plan has at least twice that free. Empty old backups, logs and Trash folders in mailboxes before you start; they are often the biggest folders.
Tell users about two-factor authenticationUser impact
cPanel does not transfer two-factor authentication configuration. Anyone who signed in to cPanel or webmail with 2FA has to set it up again.
List who uses 2FA on the old account and ask them to re-enrol on the new host in the first week. Include it in your User communication pack.
Check it worked, or roll back
Full validation checklist8 checks
Run these before you declare the migration complete. Record the results in the data validation report.
| Check | How to check | What good looks like |
|---|---|---|
| Every domain from the inventory is on the new account | In cPanel on the new host open Domains > Domains and compare the list and document roots with your Step 1 inventory. | Every domain, addon domain, alias and subdomain is listed with the same document root as on the old host. |
| Files and databases are complete | Compare file count and total size in public_html on both hosts, and compare table row counts in phpMyAdmin on both hosts for each database. | File counts, sizes and row counts match, and the newest order, post or form entry from the freeze is on the new host. |
| DNS answers with the new server | Run | All resolvers return the new server's IP address and the expected MX, and every other record matches your Network and DNS worksheet. |
| HTTPS works on every domain | In cPanel on the new host open Security > SSL/TLS Status, then open each domain in a private browser window. | Each domain shows a valid certificate with no AutoSSL problems, and browsers show no certificate warning. |
| Mail flows in both directions on the new host | From an outside address, send a message to each important mailbox and reply from new host webmail (Email > Email Accounts > Check Email). Check forwarders and autoresponders with a test message. | Messages arrive on the new host, replies reach the outside address and are not marked as spam, and forwarders deliver. |
| Site functions work for real visitors | With your hosts file entries removed, click through the pages, contact forms, cart and checkout, and the admin login listed in your Cutover runsheet. | Every page loads from the new host with no PHP errors, forms send, and a test order completes. |
| Cron jobs run once, on the new host only | Compare Advanced > Cron Jobs on the new host with crontab-backup.txt, and check the old host's Cron Jobs page. | Every job is on the new host with absolute paths that use the new username, and the same jobs are disabled on the old host. |
| The old account has stopped receiving mail and orders | Sign in to old host webmail and the old site admin a day after DNS settles. | No new messages arrived in the old mailboxes for a full day, and no orders or form entries were written on the old host after the freeze. |
Rollback planIf it goes wrong
Roll back if
- The site shows errors on the new host after the DNS change (for example "Error establishing a database connection") that you cannot fix inside the cutover window
- Mail stops arriving or sending on the new host after MX or the mail host record changes
- Checkout or payment fails on the new host
- The new host cannot issue certificates and visitors see warnings for longer than you agreed
- Data is missing on the new host and the final sync cannot be repeated in time
Point of no return
While the old account is active and unsuspended, rollback is a DNS change back to the old IP address. Two things make it harder. First, every order, form entry and email that lands on the new host after the switch has to be copied back by hand. Second, treat cancelling the old account as final: once the host removes it, its files, databases and mailboxes are gone, so keep a final full backup stored off both servers before you cancel. If you used Live Transfer, the old account was suspended and its DNS changed, so it must be unsuspended first.
- 1
Put the old site back in service
Where: WHM on the old server (Account Functions > Manage Account Suspension) if you used Live Transfer; otherwise the old site admin areaIf Live Transfer suspended the old account, unsuspend it in WHM, or ask the old host to do it if you do not have root. Take the old site out of maintenance mode only after DNS points back, so orders do not split across hosts.
You should see: The old site loads on its server IP address (test with the hosts file) and the account shows as active. - 2
Point DNS back at the old server
Where: Whoever hosts your DNS (old cPanel Zone Editor, registrar or DNS provider)Change the A records for the domain, www and the mail host back to the old server's IP address, and restore MX and AAAA records from your Network and DNS worksheet. Keep TTLs low until you decide on the next attempt.
nslookup contoso.com 8.8.8.8 nslookup -type=mx contoso.com 8.8.8.8You should see: Public resolvers return the old server's IP address and MX once the lowered TTL has passed. - 3
Copy back data written on the new host
Where: The new host's site admin, phpMyAdmin and webmail, then the same on the old hostFind orders, posts, form entries and messages created on the new host after the DNS change. Re-enter or export and import them on the old host, and move late mail across with a mail client connected to both mailboxes over IMAP.
You should see: The newest order and message on the new host also exist on the old host. - 4
Switch cron jobs back
Where: cPanel on both hosts > Advanced > Cron JobsTurn the cron jobs back on at the old host and comment them out on the new host, so each job runs once.
You should see: The Current Cron Jobs table on the old host matches crontab-backup.txt, and the new host has none active. - 5
Record the cause and plan the retry
Where: Your Cutover runsheetWrite down what failed and the fix, keep the new account for the next attempt, and repeat the hosts file tests before you change DNS again.
You should see: A dated root cause and a new cutover date, with the old account still active.
Agree the triggers and who decides before the go / no-go meeting. Use the rollback plan template.
Common problems and fixes7 errors
Red highlight on the username or domain in the Transfer ToolCause: The username or domain already exists on the destination server.
Fix: Enter a different value in the User box, or remove the existing account or domain on the destination first.
"You cannot automatically restore a full backup file in cPanel"Cause: cPanel only restores partial backups. Full backups are restored in WHM.
Fix: Ask the new host to restore it, or use WHM > Transfers > Transfer or Restore a cPanel Account if you have root.
Old account suspended straight after the transferCause: Live Transfer was left on, which suspends the transferred account on the source.
Fix: Unsuspend it in the old server's WHM if you are not ready to cut over, and run the next transfer with Live Transfer off.
"Error establishing a database connection" on the new hostCause: The database name, user or password differs from the site's configuration file, often because cPanel prefixed or renamed the database.
Fix: Check Databases > Manage My Databases on the new host and update wp-config.php (or your app's config) to match.
Certificate warning after DNS changesCause: AutoSSL could not validate while the domain still pointed at the old server, or no certificate was installed.
Fix: Run AutoSSL in Security > SSL/TLS Status once DNS resolves to the new server, and check the domain no longer shows AutoSSL problems.
Some addon or parked domains missing after restoreCause: Restricted Restore does not restore parked or addon domains.
Fix: Add them in Domains > Domains > Create A New Domain with their original document roots.
Backup or restore fails part wayCause: The account is near its quota, or the destination has less than double the archive size free.
Fix: Free disk space (old backups, logs, mail Trash) and try again.
Frequently asked questions
Can I move a cPanel website without downtime?
Yes. Copy the account, test it through your hosts file, freeze changes, copy the changes again and switch DNS with a short TTL, keeping the old host running until DNS has settled.
Can I restore a cPanel full backup myself?
Not from cPanel. cPanel says full backups can only be restored automatically in WHM, so the new host restores it, or you do in WHM if you have root.
Does the Transfer Tool move email?
Yes, mailboxes move with the account. Mail that arrives at the old server during DNS propagation stays there unless Live Transfer is on, so check the old mailboxes after cutover.
Do I need to change nameservers?
Not always. If the old host runs your DNS, you can change only the A records there and keep the zone where it is, or move nameservers to the new host once its zone matches.
What does the Transfer Tool not copy?
cPanel lists custom DNS zone templates, two-factor authentication configuration and PHP-FPM settings among the things you must redo yourself.
How long should I keep the old hosting?
Until DNS has fully moved, late mail has been collected and you hold a final backup of the old account. Do not cancel it on cutover day.
Official sources
8 official pages this guide is based on
Vendors change limits and features, so confirm details on the source before you rely on them. Last checked 4 Nov 2026.

