
How to Migrate Your Joomla Site to a New Host (Without Breaking Anything)
Migrating a Joomla site feels risky. You have a working website, and the idea of moving it to a different server—with the possibility of something breaking—is uncomfortable. But with the right process, Joomla migrations are routine and can be done with zero downtime for your visitors.
This guide walks through two methods: using Akeeba Backup (the recommended approach for most users) and manual migration (for developers who prefer full control). Both end with the same post-migration verification checklist.
If you'd rather not do this yourself, most managed Joomla hosts (including MaiaHost) offer free migration as part of signup.
Before you start: pre-migration checklist
Don't touch anything on the new server until you've completed these steps on your existing site.
1. Document your current environment
Log into Joomla admin → System → System Information and note:
- Joomla version (e.g., 5.2.1)
- PHP version (e.g., 8.2.15)
- Database type and version (e.g., MariaDB 10.6.12)
- PHP memory_limit, max_execution_time, upload_max_filesize
You'll need these to make sure your new host matches or exceeds your current configuration. See our Joomla hosting requirements guide for recommended values.
2. Make a full backup
Back up everything:
- All files (Joomla core, extensions, templates, media,
.htaccess,configuration.php) - The complete database
If you use Akeeba Backup, create a full site backup (JPA or ZIP format). If doing manual backup, export the database via phpMyAdmin and download all files via FTP/SFTP or File Manager.
Store the backup somewhere safe—your local computer, not just on the server you're leaving.
3. Check your new host's compatibility
Before migrating, confirm your new host provides the server requirements your Joomla version needs:
- PHP 8.1+ (8.2 or 8.3 recommended for Joomla 5.x)
- MySQL 8.0+ or MariaDB 10.4+
- Adequate memory_limit (256 MB minimum)
- OPcache enabled
- mod_rewrite (Apache) or proper rewrite rules (Nginx)
- SSL/TLS support
4. Note custom configurations
Check for anything non-standard that needs to be recreated on the new host:
- Custom
.htaccessrules (redirects, security rules, caching headers) - Cron jobs (Joomla scheduled tasks, extension-specific cron)
- Email configuration (SMTP settings, SPF/DKIM/DMARC records)
- Subdomain or addon domain configurations
- Custom PHP settings in
.user.iniorphp.inioverrides
5. Lower your DNS TTL (optional but recommended)
If you manage your own DNS, lower the TTL (Time to Live) on your A record to 300 seconds (5 minutes) a day or two before migration. This means when you switch DNS to point to the new server, the change propagates faster. If you skip this, your old TTL value (often 3600 seconds or higher) determines how long some visitors still reach the old server.
Method 1: Using Akeeba Backup + Kickstart (recommended)
Akeeba Backup is the standard tool for Joomla migrations. It creates a single archive file containing your entire site (files + database) and a restoration script that rebuilds everything on the new server.
Step 1: Install Akeeba Backup (if not already installed)
Install Akeeba Backup from Joomla's extension directory or from Akeeba's website. The free version (Akeeba Backup Core) is sufficient for basic migrations.
Step 2: Create a full backup
Go to Components → Akeeba Backup → Backup Now. Use the "Default Backup Profile" unless you have a custom one configured. Let it complete—don't navigate away.
Download the backup file (.jpa or .zip) to your local computer.
Step 3: Download Akeeba Kickstart
Download Kickstart Core from Akeeba's website. This is a standalone PHP script that extracts your backup and runs the restoration wizard.
Step 4: Upload to the new server
Connect to your new hosting account via FTP/SFTP or cPanel File Manager. Upload two files to the document root (usually public_html):
- Your backup archive file (
.jpaor.zip) kickstart.php
Step 5: Run Kickstart
Open your browser and navigate to http://your-new-server-ip/kickstart.php (or use a temporary URL if your host provides one). Kickstart will:
- Extract the backup archive
- Launch the Akeeba Backup Restoration Wizard
Step 6: Complete the restoration wizard
The wizard will ask for:
- Database connection details for the new server (hostname, database name, username, password). Create these in cPanel → MySQL Databases beforehand.
- Site URL — enter your domain name (even if DNS hasn't switched yet)
The wizard restores your database, updates configuration.php with the new paths and database credentials, and finishes with a cleanup step.
Step 7: Clean up
Delete kickstart.php and the backup archive from the new server. The restoration wizard should offer to do this automatically. Verify they're gone—leaving kickstart.php accessible is a security risk.
Method 2: Manual migration
If you prefer doing things by hand, or if Akeeba isn't an option (very large sites, custom deployment pipelines), here's the manual process.
Step 1: Export the database
On the old server, open phpMyAdmin (via cPanel) and export your Joomla database:
- Select your Joomla database
- Click Export
- Choose Custom export method
- Format: SQL
- Check "Add DROP TABLE" (helps with clean imports)
- Click Go and download the
.sqlfile
Step 2: Download all files
Connect to the old server via FTP/SFTP (or use File Manager) and download everything in your Joomla directory—all files and folders, including hidden files like .htaccess.
For large sites, you can create a compressed archive on the server first:
cd /home/username/public_html
tar -czf /home/username/joomla-backup.tar.gz .
Then download the single archive file, which is faster than transferring thousands of individual files over FTP.
Step 3: Create the database on the new server
In your new host's cPanel:
- Go to MySQL Databases
- Create a new database
- Create a new database user with a strong password
- Add the user to the database with ALL PRIVILEGES
Step 4: Import the database
Open phpMyAdmin on the new server, select your new database, and import the .sql file you exported. For large databases (over 50 MB), phpMyAdmin's upload limit may be too low. In that case:
- Ask your host to increase the import limit
- Use the command line:
mysql -u username -p database_name < backup.sql - Use Adminer or a similar lightweight database tool
Step 5: Upload files to the new server
Upload all Joomla files to the document root on the new server. If you created a .tar.gz archive, upload it and extract on the server:
cd /home/username/public_html
tar -xzf joomla-backup.tar.gz
Step 6: Update configuration.php
Edit configuration.php in the Joomla root directory on the new server. Update these values:
public $host = 'localhost'; // Usually 'localhost' on shared hosting
public $db = 'new_database_name'; // The database you created
public $user = 'new_database_user'; // The user you created
public $password = 'new_db_password'; // The password you set
public $tmp_path = '/home/newuser/public_html/tmp';
public $log_path = '/home/newuser/public_html/administrator/logs';
Make sure tmp_path and log_path reflect the actual filesystem paths on the new server.
Step 7: Set file permissions
Verify that file permissions are correct:
- Directories: 755
- Files: 644
- configuration.php: 444 (read-only after setup)
If permissions are wrong, Joomla may show blank pages or permission errors.
Switching DNS (the actual cutover)
Once your Joomla site is fully restored and tested on the new server, it's time to point your domain to the new host.
Option A: Update nameservers
If your new host manages DNS, update your domain's nameservers at your registrar to point to the new host's nameservers. This is the simplest approach but gives the new host full DNS control.
Option B: Update the A record
If you manage DNS separately (e.g., through Cloudflare or your registrar's DNS panel), update the A record to point to the new server's IP address. This gives you more control and is the approach we recommend.
Propagation time
DNS changes propagate globally within minutes to 48 hours, depending on TTL values and ISP caching. During propagation, some visitors reach the old server and some reach the new one. This is why:
- Keep the old server running until propagation completes (at least 48 hours)
- Don't make content changes during this window (they'd only appear on one server)
- If you lowered TTL beforehand, propagation is usually complete within an hour
Post-migration checklist
Don't declare victory until you've verified everything.
Functionality checks
- Homepage loads — check visually and view page source for correct paths
- Admin panel accessible — log into
/administratorand verify it works - Navigation works — click through your main menu, check internal links
- Forms submit — test contact forms, login forms, search
- Media displays — images, PDFs, videos should all load from the new server
- Extensions function — test your key extensions (eCommerce cart, community features, search, etc.)
- SEF URLs work — navigate to a few pages using their clean URLs, not
index.php?option=... - Search works — Joomla's Smart Search index may need rebuilding after migration
Technical checks
- SSL certificate active — your site should load via HTTPS with a valid certificate. If using Cloudflare, verify the origin certificate is installed on the new server.
- PHP version correct — check System → System Information to confirm the PHP version matches what you expect
- No mixed content warnings — browser console shouldn't show HTTP resources loaded on HTTPS pages
- Error log clean — check Joomla's error log and the server error log for new issues
- Cron jobs recreated — if you had scheduled tasks on the old server, set them up on the new one
- Email works — send a test email from Joomla (or a contact form) and confirm delivery. Check SPF/DKIM/DMARC DNS records if email deliverability was good before.
SEO checks
- Canonical URLs correct — verify your site's canonical domain (www vs non-www, HTTP vs HTTPS) matches your preferred version
- Robots.txt accessible — navigate to
yourdomain.com/robots.txt - Sitemap accessible — check your XML sitemap URL and ensure it returns current data
- Google Search Console — if your server IP changed, Google may temporarily show crawl errors. This is normal and resolves within a few days. If you changed your domain's DNS provider, re-verify site ownership.
- 301 redirects intact — if you had custom redirects in
.htaccessor Joomla's Redirect component, verify they still work
Performance check
After migration, run a quick speed test from a tool like PageSpeed Insights or GTmetrix. Compare TTFB (Time to First Byte) against your old host. If TTFB is significantly worse, something in the server configuration needs attention—likely caching, OPcache, or database settings.
Common migration problems (and fixes)
White screen after migration
Cause: Usually a path mismatch in configuration.php or incorrect file permissions.
Fix: Check tmp_path and log_path in configuration.php. Verify they point to actual directories on the new server with write permissions. Check error_reporting in configuration.php—temporarily set it to maximum to see the actual error.
Database connection error
Cause: Wrong database credentials in configuration.php, or the database user doesn't have permissions on the database.
Fix: Double-check $host, $db, $user, and $password in configuration.php. On shared hosting, database usernames are usually prefixed with your cPanel username (e.g., cpaneluser_dbuser).
Broken images and links
Cause: Hardcoded absolute paths in content that reference the old server's directory structure. Fix: Run a search-and-replace on the database (using a tool like Akeeba's built-in feature or a SQL query) to update old paths to new ones. Be careful with serialized data—use a tool that handles serialized string replacement.
Extensions not working
Cause: Missing PHP extensions on the new server, or PHP version incompatibility. Fix: Compare the PHP extensions list (System → System Information → PHP Information) between old and new servers. Install any missing extensions or ask your host to enable them.
Email not sending
Cause: PHP mail() function blocked on the new server, or SPF/DKIM records still point to the old server's IP.
Fix: Configure Joomla to use SMTP instead of PHP mail (Global Configuration → Server → Mail Settings). Update DNS records (SPF, DKIM) to include the new server's IP or mail service.
Slow performance after migration
Cause: OPcache not enabled, caching not configured, or lower-spec server. Fix: Verify OPcache is enabled (check your server's PHP configuration). Enable Joomla's built-in page and cache from Global Configuration → System. If available, enable Redis or Memcached as the cache handler.
Let someone else handle it
If this guide looks like more work than you want to take on, that's entirely reasonable. Migration is a one-time task, but getting it wrong can mean downtime and stress.
MaiaHost offers free site migrations with every hosting plan. We handle the complete process—backup, transfer, database import, configuration, DNS guidance, SSL setup, and testing—typically within 24 hours. You don't need to install anything or touch a command line.
Learn more about our managed Joomla hosting or contact us to start a migration.
FAQs
How long does a Joomla migration take?
A typical Joomla migration takes 1–4 hours of active work, depending on site size and complexity. DNS propagation adds up to 48 hours, but your site remains accessible throughout—visitors just gradually shift from the old server to the new one.
Will my site go down during migration?
No, if done correctly. You set up the new server while the old one is still running. DNS is switched only after the new server is fully tested. During DNS propagation, visitors reach either server—both serve the same content.
Can I migrate from Joomla 3 to Joomla 5 and switch hosts at the same time?
You can, but we recommend separating the two steps. Migrate first (same Joomla version, new host), verify everything works, then upgrade Joomla versions. Doing both at once makes troubleshooting much harder if something goes wrong.
Do I need to re-install extensions after migration?
No. A proper migration (via Akeeba Backup or manual file + database transfer) brings all extensions with it. They don't need to be reinstalled—just verified to work on the new server.
What if my old host won't give me access to my files?
If you can still log into Joomla admin, install Akeeba Backup and create a backup from within Joomla—no server-level access needed. If you've been completely locked out by your old host, contact them and request a final backup. Most hosts are legally required to provide access to your data.
Sources
- Akeeba Backup — Documentation: https://www.akeeba.com/documentation/akeeba-backup.html
- Akeeba Kickstart — Documentation: https://www.akeeba.com/documentation/akeeba-kickstart.html
- Joomla — Technical Requirements: https://manual.joomla.org/docs/get-started/technical-requirements/
- Joomla — Migrating from Joomla 3.x to 4.x: https://docs.joomla.org/Joomla_3.x_to_4.x_Step_by_Step_Migration
Talk to an expert and we’ll tell you the best setup for your project.
Explore plans or talk to us—no sales scripts, just practical advice from real engineers.