This guide explains how to move a WordPress website from one hosting provider to another using SFTP.
A WordPress website has two main parts:
-
Website files — themes, plugins, uploads, images, and WordPress files
-
Database — pages, posts, users, settings, products, orders, and plugin data
SFTP is used to move the website files securely. The database is usually moved using phpMyAdmin or another database management tool.
Before You Start
Make sure you have the following information:
-
SFTP login details for the old hosting account
-
SFTP login details for the new hosting account
-
Database access for the old website
-
Database access for the new hosting account
-
A file transfer app such as FileZilla, Cyberduck, or WinSCP
-
Access to the domain DNS settings
SFTP details usually include:
-
Hostname or server IP address
-
Username
-
Password or SSH key
-
Port number, usually 22
Step 1: Connect to the Old Hosting Account
Open your SFTP app and connect to the old hosting account.
Example:
Host: old-server.example.com
Username: your_username
Password: your_password
Port: 22
Protocol: SFTP
After connecting, find the website folder.
Common folder names include:
public_html
www
htdocs
domains/example.com/public_html
Inside the WordPress folder, you should see files and folders like:
wp-admin
wp-content
wp-includes
wp-config.php
index.php
.htaccess
If you see these files, you are in the correct WordPress folder.
Step 2: Download the WordPress Files
Download all WordPress files from the old server to your computer.
The most important folder is:
wp-content
This folder contains:
-
Themes
-
Plugins
-
Images
-
Uploads
-
Custom website files
For a full migration, download the complete WordPress folder, including:
wp-admin
wp-content
wp-includes
wp-config.php
index.php
.htaccess
Large websites may take longer to download.
Step 3: Export the WordPress Database
The database is required for a complete WordPress migration. Website files alone are not enough.
The database contains:
-
Pages
-
Blog posts
-
Users
-
WordPress settings
-
Plugin settings
-
WooCommerce products and orders, if applicable
Log in to phpMyAdmin or the database manager on the old hosting account.
Then:
-
Select the WordPress database
-
Click Export
-
Choose Quick
-
Choose SQL
-
Download the
.sqlfile to your computer
If you are not sure which database your WordPress site uses, open the wp-config.php file and look for:
define('DB_NAME', 'database_name');
The value beside DB_NAME is the database name used by the website.
Step 4: Create a New Database
Log in to the new hosting account and create a new database.
Save these details:
Database name
Database username
Database password
Database host
You will need them when updating the wp-config.php file.
In many cases, the database host is:
localhost
Some hosting providers may use a different database host.
Step 5: Upload the WordPress Files to the New Server
Connect to the new hosting account using SFTP.
Open the website root folder. Common root folders include:
public_html
www
htdocs
Upload all WordPress files from your computer to the new server.
Make sure the files are directly inside the website root folder.
Correct example:
public_html/wp-admin
public_html/wp-content
public_html/wp-config.php
Usually incorrect example:
public_html/wordpress/wp-admin
public_html/wordpress/wp-content
Do not upload the website into an extra folder unless your hosting setup requires it.
Step 6: Import the Database
Open phpMyAdmin or the database manager on the new hosting account.
Then:
-
Select the new empty database
-
Click Import
-
Upload the
.sqlfile -
Click Go or Import
After the import is complete, the database has been moved to the new hosting account.
Step 7: Update the wp-config.php File
Open the wp-config.php file on the new server.
Update the database details to match the new database:
define('DB_NAME', 'new_database_name');
define('DB_USER', 'new_database_user');
define('DB_PASSWORD', 'new_database_password');
define('DB_HOST', 'localhost');
Use the database name, username, password, and host from the new hosting account.
If the website shows Error Establishing a Database Connection, check the database details again.
Step 8: Update the Website URL If Needed
If the domain name is staying the same, you may not need to change anything.
If the website is moving to a new domain, update the WordPress website URL in the database.
In phpMyAdmin, open the WordPress database and find the options table.
It is usually called:
wp_options
Look for these two rows:
siteurl
home
Update both values to the new website URL.
Example:
https://newdomain.com
If your WordPress table prefix is different, the table may have a different name, such as:
abc_options
Step 9: Test the Website
Before changing DNS, test the website if your hosting provider gives you a temporary URL or preview link.
Check:
-
Homepage
-
Pages
-
Blog posts
-
Images
-
Menus
-
Contact forms
-
WordPress admin area
-
Checkout page, if using WooCommerce
The WordPress admin URL is usually:
https://yourdomain.com/wp-admin
Step 10: Point the Domain to the New Hosting Account
After confirming the website works, update the domain DNS.
Depending on your hosting provider, you may need to update:
-
Nameservers
-
A record
-
CNAME record
If the new hosting provider gives you nameservers, update the domain nameservers.
Example:
ns1.examplehost.com
ns2.examplehost.com
If the new hosting provider gives you an IP address, update the domain A record.
Example:
Name: @
Value: 123.123.123.123
DNS changes can take some time to fully update.
Step 11: Install SSL
After DNS points to the new server, install SSL for the domain.
Most hosting providers offer free SSL using Let’s Encrypt.
After SSL is active, your website should load using:
https://yourdomain.com
Also check for mixed content warnings. Mixed content usually happens when some images, scripts, or styles still load using http:// instead of https://.
Step 12: Refresh Permalinks
After migration, log in to WordPress admin.
Go to:
Settings > Permalinks
Click Save Changes without changing anything.
This refreshes WordPress rewrite rules and can fix 404 errors on pages and posts.
Step 13: Check File Permissions
Incorrect file permissions can cause errors after migration.
Common WordPress permissions are:
Folders: 755
Files: 644
wp-config.php: 600 or 640
Avoid setting files or folders to 777 because it is insecure.
Final Checklist
After the migration is complete, check the website carefully.
Make sure:
-
The website loads correctly
-
WordPress admin works
-
Images display properly
-
Contact forms send emails
-
Plugins are active
-
The theme looks correct
-
SSL is working
-
Permalinks are working
-
There are no broken links
-
CSS and JavaScript files are loading
-
WooCommerce checkout works, if applicable
After everything is working, create a fresh backup of the migrated website.
Common Migration Problems
Error Establishing a Database Connection
This usually means the database details in wp-config.php are incorrect.
Check:
-
Database name
-
Database username
-
Database password
-
Database host
Pages Show 404 Errors
Go to:
Settings > Permalinks
Click Save Changes.
Images Are Missing
The uploads folder may not have fully transferred.
Check this folder:
wp-content/uploads
If files are missing, upload them again using SFTP.
Website Redirects to the Old Domain
Update the siteurl and home values in the database.
You may also need to search and replace the old domain in the database.
White Screen or Critical Error
This may happen because of a plugin, theme, or PHP version issue.
To test plugins, rename the plugins folder using SFTP:
wp-content/plugins
Rename it to:
plugins-disabled
Then reload the website.
If the website works, one of the plugins is likely causing the issue.
Is SFTP Migration Safe?
Yes. SFTP is safe because the file transfer is encrypted.
However, SFTP only moves the website files. For a full WordPress migration, you must also move the database.
Always take a full backup before starting the migration.
Conclusion
Migrating WordPress using SFTP is a safe and reliable way to move a website to a new hosting provider.
The main steps are:
-
Download the WordPress files from the old server
-
Export the database
-
Upload the files to the new server
-
Import the database
-
Update
wp-config.php -
Test the website
-
Point the domain to the new hosting account
-
Install SSL
-
Check the website carefully
When done correctly, this method can move a WordPress website with minimal downtime and without relying on migration plugins.
This version is good for a knowledge base because it is clean, step-by-step, and written for non-technical customers.