Whether you are moving WordPress to a new server or to a different location on your server, you don’t need to reinstall. WordPress is flexible enough to handle all of these situations.
Moving to a New Server
If you are moving WordPress from one server to another, begin by backing up your WordPress directory, images, plugins, and other files on your site as well as the database. See WordPress Backups and Backing Up Your Database.
Keeping Your Domain Name and URLs
Moving your domain without changing the Home and Site URLs of your WordPress site is very simple, and in most cases can be done by moving the files.
- If database and URL remain the same, you can move by just copying your files and database.
- If database name or user changes, edit wp-config.php to have the correct values.
- If you want to test before you switch, you must temporarily change “siteurl” and “home” in the database table “wp_options” (through phpMyAdmin or similar).
- If you had any kind of rewrites (permalinks) setup you must disable .htaccess and reconfigure permalinks when it goes live.
Changing Your Domain Name and URLs
Moving a website and changing your domain name or URLs (i.e. from http://example.com/site to http://example.com, or http://example.com to http://example.net) requires the following steps – in sequence.
- Download your existing site files.
- Export your database – go in to MySQL and export the database.
- Move the backed up files and database into a new folder – somewhere safe – this is your site backup.
- Log in to the site you want to move and go to Settings > General, then change the URLs. (ie from http://example.com/ to http://example.net ) – save the settings and expect to see a 404 page.
- Download your site files again.
- Export the database again.
- Edit wp-config.php with the new server’s MySQL database name, user and password.
- Upload the files.
- Import the database on the new server.
When your domain name or URLs change there are additional concerns. The files and database can be moved, however references to the old domain name or location will remain in the database, and that can cause issues with links or theme display.
If you do a search and replace on your entire database to change the URLs, you can cause issues with data serialization, due to the fact that some themes and widgets store values with the length of your URL marked. When this changes, things break. To avoid that serialization issue, you have three options:
- Use the Velvet Blues Update URLs or Better Search Replace plugins if you can access your Dashboard.
- Use WP-CLI’s search-replace if your hosting provider (or you) have installed WP-CLI.
- Use the Search and Replace for WordPress Databases Script to safely change all instances on your old domain or path to your new one. (** only use this option if you are comfortable with database administration ** )
Note: Only perform a search and replace on the wp_posts table.
Note: Search and Replace from Interconnectit is a 3rd party script
Moving Directories On Your Existing Server
Moving the WordPress files from one location on your server to another – i.e. changing its URL – requires some special care. If you want to move WordPress to its own folder, but have it run from the root of your domain, please read Giving WordPress Its Own Directory for detailed instructions.
Here are the step-by-step instructions to move your WordPress site to a new location on the same server:
- Create the new location using one of these two options:
- If you will be moving your WordPress core files to a new directory, create the new directory.If you want to move WordPress to your root directory, make sure all index.php, .htaccess, and other files that might be copied over are backed up and/or moved, and that the root directory is ready for the new WordPress files.
- Log in to your site.
- Go to the Administration > Settings > General screen.
- In the box for WordPress Address (URL): change the address to the new location of your main WordPress core files.
- In the box for Site Address (URL): change the address to the new location, which should match the WordPress (your public site) address.
- Click Save Changes.
- (Do not try to open/view your site now!)
- Move your WordPress core files to the new location. This includes the files found within the original directory, such as http://example.com/wordpress, and all the sub-directories, to the new location.
- Now, try to open your site by going to yourdomain.com/wp-admin. Note, you may need to go to yourdomain.com/wp-login.php
- If you are using Permalinks, go to the Administration > Settings > Permalinks panel and update your Permalink structure to your .htaccess, file, which should be in the same directory as the main index.php file.
- Existing image/media links uploaded media will refer to the old folder and must be updated with the new location. You can do this with the Better Search Replace or Velvet Blues Update URLs plugins, WP-CLI’s search-replace if your hosting provider (or you) have installed WP-CLI, manually in your SQL database, or by using the 3rd party database updating tool Search and Replace Databases Script * Note: this script is best used by experienced developers.
- In some cases your permissions may have changed, depending on your ISP. Watch for any files with “0000” permissions and change them back to “0644”.
- If your theme supports menus, links to your home page may still have the old subdirectory embedded in them. Go to Appearance > Menus and update them.
- Sometimes you would need to restart your server, otherwise your server may give out an error. (happens in MAMP software (Mac)).
It is important that you set the URI locations BEFORE you move the files.
If You Forget to Change the Locations
If you accidentally moved the files before you changed the URIs: you have two options.
- Suppose the files were originally in
/path/to/old/
and you moved them to/path/to/new
before changing the URIs. The way to fix this would be to make/path/to/old/
a symlink (for Windows users, “symlink” is equivalent to “shortcut”) to/path/to/new/
, i.e.
ln -s /path/to/new /path/to/old
and then follow the steps above as normal. Afterwards, delete the symlink if you want. - If you forget to change the WordPress Address and Blog Address, you will be unable to change it using the wordpress interface. However, you can fix it if you have access to the database. Go to the database of your site and find the
wp_options
table. This table stores all the options that you can set in the interface. The WordPress Address and Blog Address are stored assiteurl
andhome
(the option_name field). All you have to do is change the option_value field to the correct URL for the records withoption_name=’siteurl‘ or option_name=’home‘
.
Note: Sometimes, the WordPress Address and Blog Address are stored in WordPress Transients. Search and replace scripts can have trouble modifying those to the new address and some plugins might therefore refer to the old address because of them. Transients are temporary (cached) values stored in the wp_options
database table that can be recreated on-demand when removed. It’s therefore safe to delete them from the migrated database copy and let them be recreated. This database query (again, have a backup!) clears all transients:
DELETE FROM `wp_options` WHERE option_name LIKE '%_transient_%'
If You Have Accidentally Changed your WordPress Site URL
Suppose you accidentally changed the URIs where you cannot move the files (but can still access the login page, through a redirection or something).
wp-login.php can be used to (re-)set the URIs. Find this line:
require( dirname(__FILE__) . '/wp-load.php' );
and insert the following lines below:
//FIXME: do comment/remove these hack lines. (once the database is updated) update_option('siteurl', 'http://your.domain.name/the/path' ); update_option('home', 'http://your.domain.name/the/path' );
You’re done. Test your site to make sure that it works right. If the change involves a new address for your site, make sure you let people know the new address, and consider adding some redirection instructions in your .htaccess file to guide visitors to the new location.
Changing The Site URL also provides the details of this process.
Managing Your Old Site
Shutting It Down
- Download a copy of the main wordpress files from your OLD site to your hard drive and edit wp-config.php to suit the new server.
- Go back to your OLD site and go to Administration > Settings > General screen and change the URL (both of them) to that of your new site.
- Login on your server, go to phpMyAdmin, export as file, and save your database (but keep the old one just in case). Now, upload this new database and the copy of the wordpress core files with the edited wp-config.php to your new server. That’s it!
Keeping it Running
Caution: Make sure you have a backup of your old site’s WordPress database before proceeding!
Part A – Activating Your New Site
- Download your entire WordPress installation to your hard drive. Name the folder appropriately to indicate that this is your OLD site’s installation.
- Download your database.
- Go back to your OLD site and go to options and change the url (both of them) to that of your new site.
- Again, download your entire WordPress installation to your hard drive. Name the folder appropriately to indicate that this is your NEW site’s installation.
- Download your database once again (but keep the old one). Upload this database to your new server. It will be easiest if you use the same database name and you create a user with the same login credentials on your new server as on your old server.
- If you used a different database name and/or user (see previous step), edit wp-config.php in your NEW site’s installation folder appropriately.
- Upload the NEW site’s installation folder to your new site. Presto, your NEW site should be working!
Part B – Restoring Your Old Site
- On the original server, delete your OLD site’s database (remember, you should have a copy on your local computer that you made at the very beginning).
- Upload your OLD site’s installation folder to your original server, overwriting the files that are currently there (you may also delete the installation folder on the server and simply re-upload the OLD site’s files).
- Upload your OLD site’s database from your local computer to the server. That should do it!
Another procedure for making copies of posts, comments, pages, categories and custom field (post status, data, permalinks, ping status, etc.) easy to follow:
- Install a new WordPress site
- Go on old site Admin panel. Here, in Manage > Export select “all” in menu Restrict Author.
- Click on Download Export File
- In new site go on Manage > Import, choose WordPress item.
- In the page that will be shown, select the file just exported. Click on Upload file and Import
- It will appear a page. In Assign Authors, assign the author to users that already exist or create new ones.
- Click on Submit
- At the end, click on Have fun
Note: using this method, if there are some articles in the new site (like Hello World, Info Page, etc.), these will not be erased. Articles are only added. Using the former procedure, the articles in new site will be deleted.
Moving WordPress Multisite
Multisite is somewhat more complicated to move, as the database itself has multiple references to the server name as well as the folder locations. If you’re simply moving to a new server with the same domain name, you can copy the files and database over, exactly as you would a traditional install.
If, instead, you are changing domains, then the best way to move Multisite is to move the files, edit the .htaccess and wp-config.php (if the folder name containing Multisite changed), and then manually edit the database. Search for all instances of your domain name, and change them as needed. This step cannot yet be easily automated. It’s safe to search/replace any of the wp_x_posts tables, however do not attempt blanket search/replace without the Search and Replace for WordPress Databases script (aka the interconnectit script).
If you’re moving Multisite from one folder to another, you will need to make sure you edit the wp_blogs entries to change the folder name correctly. You should manually review both wp_site and wp_blogs regardless, to ensure all sites were changed correctly.
Also, manually review all the wp_x_options tables and look for three fields and edit them as needed:
- home
- siteurl
- fileupload_url
If you are moving from subdomains to subfolders, or vice-versa, remember to adjust the .htaccess file and the value for SUBDOMAIN_INSTALL in your wp-config.php file accordingly.
Related Links
- How to move WordPress site to another server with zero downtime
- Moving a blog from wordpress.com to self-hosted blog
- Moving WordPress to a new domain or server
- Italian version of this article – Versione italiana dell’articolo
- How to move a WordPress Blog or Website
- Search and Replace for WordPress Databases
- Online WordPress Serialized PHP Search and Replace
- Cloning a live WordPress site to a local Mac test environment
- PHP script to replace site url in WordPress database dump, even with WPML
- The Duplicator plugin helps administrators move a site from one location to another
- Technical tutorial on moving your WordPress blog to Bitnami’s AWS configuration