WordPress Migration Guide: Step by Step

Why migrate a WordPress site
There are many reasons to migrate a WordPress site to new hosting: slower performance on current hosting, need for more resources, better technical support, lower price, or switching to hosting closer to your target audience. Regardless of the reason, migration requires careful planning and execution to avoid data loss and minimize site downtime. In this guide, we cover all migration methods from the simplest plugin solutions to fully manual processes.
WordPress site migration may seem daunting, but with the right preparation and tools, the process is simpler than you think. The most important thing is to make a complete backup before any action. Even if everything goes perfectly, a backup gives you peace of mind and security that you can return to the previous state if something goes wrong. BeoHosting offers free migration for all new users, but understanding the process is useful so you know what's happening behind the scenes.
Migration preparation
Complete backup
Before migration, make a complete site backup including all WordPress files including themes, plugins, and uploaded media, and the complete database. Use the cPanel backup tool, hosting backup system, or FTP client to download all files. For the database, use phpMyAdmin to export in SQL format. Verify the backup is complete by checking file sizes and that the SQL dump contains all tables.
Additionally, make a list of all plugins with versions, active theme with child theme if it exists, WordPress version, and PHP version the site runs on. Verify the new hosting supports the same or newer PHP version. Note all custom configurations in wp-config.php and .htaccess files. If you use special server configurations like mod_rewrite rules or PHP settings in php.ini, document them because they'll need to be configured on the new hosting.
New hosting check
Before migration, verify the new hosting meets WordPress requirements: PHP 7.4 or newer, MySQL 5.7 or MariaDB 10.4 or newer, HTTPS support, and mod_rewrite module. Check resource availability such as PHP memory limit, max upload size, and max execution time. If your site uses specific PHP extensions like imagick or intl, confirm they're available on the new hosting. BeoHosting hosting packages come with optimal configuration for WordPress sites.
Method 1: Migration using a plugin
All-in-One WP Migration
All-in-One WP Migration is the most popular migration plugin with over 60 million installations. The process is extremely simple: install the plugin on the old site, click Export, and choose File to download a complete copy of the site as one file. On the new hosting, install clean WordPress, install the same plugin, and use the Import option to load the previously downloaded file. The plugin automatically updates URLs in the database and configures all necessary settings.
The free version has a limit on import size depending on the PHP upload limit on the new hosting. For larger sites, the premium version or increasing PHP upload limit is needed. Alternatively, you can use the Unlimited Extension that removes the limit. Before export, use Advanced Options to exclude spam comments, post revisions, and database transients, reducing file size. After import, verify all pages work properly, links lead to the right address, and media displays.
Duplicator plugin
Duplicator creates a package containing a complete site copy and installer script. On the old site, install Duplicator, create a new package, and download the archive file and installer.php. On the new hosting, upload both files to the root directory via FTP, create an empty database, and run installer.php through the browser. Follow the wizard that guides you through database setup, site URL, and verification. Duplicator is more powerful than All-in-One for advanced users because it provides more control over the process.
Duplicator Pro version offers cloud storage support for Google Drive, Dropbox, and Amazon S3, useful for large sites where downloading and uploading huge files is impractical. Scheduled backups option automates package creation on schedule. Multisite support is available only in Pro version. Common issues include timeout when creating large packages, solved by using DupArchive format instead of ZIP and increasing PHP max_execution_time.
UpdraftPlus
UpdraftPlus is primarily a backup plugin but has excellent migration functionality in the premium version. The advantage is that many sites already use UpdraftPlus for backup so migration is a natural continuation. Make a backup on the old site, transfer files to the new hosting, and use the Restore option. The Premium Migrator addon automatically updates URLs and paths in the database. UpdraftPlus stores backups in parts, which is an advantage for sites on low-resource hosting because it doesn't require much memory at once.
Method 2: Manual migration
Step 1: Database export
Log into phpMyAdmin on the old hosting, select the WordPress database, and click the Export tab. Select Custom method to have control over options. In the Output section, select gzip compression for faster download. Under Format-specific options, select Add CREATE TABLE IF NOT EXISTS and Add DROP TABLE. This ensures tables are created properly on the new hosting even if tables with the same name exist. Click Go and download the SQL file.
For large databases, phpMyAdmin may have a timeout problem. In that case, use SSH and the mysqldump command: mysqldump -u user -p db_name | gzip > backup.sql.gz. This is more reliable for databases larger than 100MB. Alternatively, export table by table if the database is exceptionally large. Verify the SQL file contains all tables by counting CREATE TABLE statements and comparing with the number of tables in phpMyAdmin.
Step 2: File transfer
Download all files from the WordPress installation via FTP client like FileZilla. Pay special attention to the wp-content directory containing themes, plugins, and uploaded media because those files aren't part of the standard WordPress installation and can't be downloaded again. Compress files into ZIP or tar.gz on the server before download if hosting allows it because transferring one archived file is much faster than transferring thousands of small files individually.
Upload files to the new hosting via FTP or if you have SSH access, use scp or rsync for faster and more reliable transfer. Rsync is especially useful because it supports resuming interrupted transfer and transferring only changed files. On the new hosting, unpack the archive and verify all files are in place by comparing the directory structure with the original installation. Set proper file permissions: 755 for directories and 644 for files.
Step 3: Database import and configuration
Create a new database on the new hosting through cPanel or hosting control panel. Remember the database name, username, and password. In phpMyAdmin on the new hosting, select the new database and use the Import tab to load the SQL file. For large files, increase upload_max_filesize in PHP configuration or use SSH and the mysql command: mysql -u user -p db_name < backup.sql. Verify all tables are created and contain data.
Edit the wp-config.php file with new database details: DB_NAME, DB_USER, DB_PASSWORD, and DB_HOST. On most hosting, DB_HOST is localhost but some hosting uses special addresses for the MySQL server. If the site changes domain, you need to update URLs in the database. Use the WP-CLI command wp search-replace old-url.com new-url.com for reliable replacement of all URLs including serialized data where simple text replacement would corrupt the data structure.
Post-migration check
Site verification
After migration, thoroughly check the site. Open every key page and verify content displays properly. Test all forms including contact form and WooCommerce checkout if it exists. Verify media (images and documents) loads from the new hosting, not the old one. Test login to admin panel and verify all plugins work. Use a tool like Broken Link Checker to find broken links that may result if URL replacement wasn't complete.
Verify permalinks are configured properly because migration sometimes resets the permalink structure. In the admin panel, go to Settings, Permalinks and click Save Changes even if you don't change anything because this regenerates .htaccess rules. Test the SSL certificate and whether the site properly redirects from HTTP to HTTPS. Verify email functionality by sending a test email from the site because SMTP configuration can depend on hosting.
DNS change
When you're satisfied the site works properly on the new hosting, change DNS records to point to the new IP address. Update the A record for the domain and www subdomain. DNS propagation can take up to 48 hours, though in practice it's usually faster. During propagation, some users will see the site on the old hosting and some on the new. Don't shut down the old hosting until DNS propagation is fully completed and you're sure all traffic goes to the new server.
For minimal downtime, reduce DNS record TTL to 300 seconds a day or two before migration. This ensures DNS cache expires faster and changes propagate faster. After propagation is complete and the site runs stably on the new hosting, return TTL to normal value, usually 3600 or 86400 seconds. Clear WordPress cache and CDN cache after migration to ensure files are served from the new hosting.
Conclusion
WordPress site migration is a process requiring preparation but isn't complicated if a methodical approach is followed. The plugin method is the simplest for most users while the manual method provides complete control for advanced users. The most important thing is making a complete backup before migration and thoroughly testing the site after transfer. BeoHosting offers free migration for all new users where our team takes over the entire process and guarantees your site will work flawlessly on our platform without data loss and with minimal downtime.
BeoHosting Team
10+ years of experience — Web hosting and infrastructure specialists
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Last updated: