Joomla is one of the most popular CMS platforms, and migrating it has its own specifics. The most reliable way is to use the Akeeba Backup extension, which creates a full package for one-click restoration.
Method 1: Akeeba Backup (recommended)
Creating a backup
- Install Akeeba Backup from the Joomla Extension Directory
- In the Joomla panel: Components → Akeeba Backup → Backup Now
- Download the resulting
.jpaarchive andkickstart.php
Restoring on the new hosting
# Upload via FTP to the new hosting:
# - kickstart.php
# - backup.jpa
# Open in a browser:
https://new-server/kickstart.php
Kickstart will automatically unpack the archive, restore the database, and configure configuration.php.
Method 2: Manual migration
Step 1: Back up files and the database
># Archive the Joomla files
tar -czf joomla-files.tar.gz /var/www/example.com/
# Export the database
mysqldump -u joomlauser -p joomladb > joomla-backup.sql
Step 2: Transfer to the new server
>rsync -avz /var/www/example.com/ root@new-server:/var/www/example.com/
scp joomla-backup.sql root@new-server:/tmp/
# On the new server
mysql -u newuser -p newdb < /tmp/joomla-backup.sql
Step 3: Update configuration.php
># /var/www/example.com/configuration.php
public $host = 'localhost'; // Database host
public $db = 'newdb'; // New database name
public $user = 'newuser'; // New database user
public $password = 'NewDBPass'; // New database password
public $live_site = ''; // Leave empty
public $log_path = '/var/www/example.com/administrator/logs';
public $tmp_path = '/var/www/example.com/tmp';
Updating the URL in the database
># If the new domain differs from the old one
# In phpMyAdmin run this SQL:
UPDATE jos_domains SET domain = 'new-domain.com'
WHERE domain = 'old-domain.com';
# Or via Joomla: System → Global Configuration → Site URL
Post-migration Joomla checklist
- Log in to /administrator — make sure the panel works
- Check the home page and several categories
- Check images (media manager)
- Test the contact forms
- Clear the cache: System → Clear Cache
- Check extensions for compatibility with the PHP version
.htaccess file — Joomla uses mod_rewrite for SEF URLs. Nginx needs an equivalent try_files in its config. Enable SEF URLs in Joomla: System → Site → SEO Settings.
>find /var/www/example.com -type d -exec chmod 755 {} \;
find /var/www/example.com -type f -exec chmod 644 {} \;
chmod 640 configuration.php
Common Errors When Migrating Joomla
| Message | Cause |
|---|---|
| Kickstart: SQL error... Table already exists | The Akeeba restore ran against a database that still had tables left over from a previous failed attempt — the database needs to be cleared before running Kickstart again |
| JFTP::write: Unable to write file (in the admin panel) | File ownership after rsync or scp does not match the PHP-FPM user on the new server — files often stay owned by root instead of www-data |
| Error 500 — Unable to load configuration file | configuration.php never got copied, or it lost read permission — an FTP client sometimes resets permissions to its own default on upload |
| Blank white screen after changing the domain | The old domain is cached in the #__extensions table or in the SEF component's settings; editing configuration.php alone is not enough, a targeted SQL query is needed |
| Save failed with error: 3 when saving an article | Not enough write permission on the tmp directory, or tmp_path in configuration.php still points to the old path after the move |
When a Manual Joomla Migration Is Not the Right Choice
- The site is large, with tens of gigabytes of media files — manual tar and rsync are more reliable than Akeeba, which hits PHP's memory limit on shared hosting when packing a large archive
- There is no SSH access, only FTP and the hosting panel — then the only practical option is Akeeba Backup with kickstart.php; the manual method requires a console
- The Joomla version is below 3.x with outdated extensions — modern migration tools do not support some of them, so the move is done manually with a manual PHP compatibility check
- Only part of the content needs to move, such as one category, not the whole site — both a full Akeeba backup and a manual tar move everything at once; a partial move needs an export through the Joomla API or a dedicated extension
Verifying the Result
After either method, check not just how the site looks but the data at the database level too — the general post-migration checklist is covered in the article on post-migration verification, and the finer points of moving the database itself are in the article on migrating a database.
# Compare the number of tables in the old and new database
mysql -u newuser -p -e "SHOW TABLES FROM newdb;" | wc -l
# Check that file ownership matches the web server's user
stat -c "%U:%G" /var/www/example.com/configuration.php
Frequently asked questions
Should the old site be taken offline during the migration so the data does not drift apart?
Yes, during the final transfer of the database and files it helps to close the old site to visitors, or at least disable forms and content editing, otherwise any entries created after the database export never reach the migrated copy. A short downtime window is safer than risking lost content from the two site versions drifting out of sync.
What should be checked if some images are missing after the migration even though the files are present?
The usual cause is wrong file paths for media in the database, or files not copying completely because an FTP transfer dropped partway through a large archive. It is worth comparing the images directory structure between the old and new server and checking that database links point to real paths, not the old domain or a missing folder.
Is it possible to migrate only the Joomla database and leave the files on the old server?
Migrating only the database is technically possible, but the site will not work without the template, extension, and media files — Joomla keeps part of its configuration in files and part in database tables, and the setup stays incomplete without both. In practice both parts always move together, even when copied over by different methods.
How do you make sure the migrated site is not indexed by search engines as a duplicate of the old domain?
While the migrated copy sits at a temporary address or staging subdomain, it is worth blocking it from indexing with robots.txt or a noindex meta tag, otherwise a search engine may treat it as a duplicate of the main site. Once DNS has fully switched over and the new server checks out, those restrictions get lifted.