Skip to main content
Agency Program 50% cashback. 10% commissions. Priority support. Built for growing agencies. 50% cashback for agencies Speak to the team Join free

How to Move WordPress from a Local Server to Live Site in 2026

To move WordPress from a local server to a live site, copy the files, import the database, replace every localhost URL with the live one, then flush permalinks and caches.

NS
Neha Sharma
Content, InstaWP
Updated Oct 12, 2026 34 min read

To move WordPress from a local server to a live site, copy the files, import the database, replace every localhost URL with the live one, then flush permalinks and caches. The fastest route is a single command: instawp migrate push . --name <site-name> --source-url http://<yoursite>.local/ does all four steps for you from your own terminal, with no public URL and no tunnel. This guide covers that method first, then the ZIP import, the manual SFTP transfer and the migration-plugin route, and finishes with the fixes for what usually breaks afterwards.

Updated September 2026. The InstaWP method in this guide has been rewritten. The old InstaWP Connect plugin push (wp instawp local push) has been retired and replaced by InstaCLI, so Method 1 is now the instawp migrate push command with fresh terminal screenshots. The ZIP, manual and plugin methods are unchanged.
Key takeaways
  • One command moves the whole site. instawp migrate push archives the files, dumps the database, creates the hosted site, uploads, restores and health-checks it.
  • No public URL, no tunnel and no port forwarding. InstaCLI connects outbound from your machine, so a localhost site with no public address can still be pushed live.
  • The migrated site arrives on the Sandbox plan, which is a development tier. Change the plan before you send production traffic to it.
  • ZIP import is the quickest route and is capped at a 1 GB archive.
  • Manual migration is the only method that gives you direct control of the database, and the one where serialized data gets corrupted if you use plain SQL find-and-replace instead of wp search-replace.
  • Most post-migration failures are URL failures. Broken images, 404 permalinks, mixed-content warnings and the white screen almost always trace back to a URL that was missed or replaced badly.
  • Never copy your local wp-config.php to the destination. It carries the wrong database credentials and will break the connection.
  • Your existing local admin login still works. InstaCLI migrates the users table, so there is no new password to hunt for.
  • Develop on the cloud from the start and there is no migration step to get wrong.

Why do developers build WordPress sites locally first?

Before we get to how to move WordPress from a local server to a live site, it is worth being clear about why local WordPress development is still the default for so many developers and agencies. Local environments such as LocalWP, XAMPP, MAMP and WAMP remain the default for good reasons.

LOCAL WORDPRESS DEVELOPMENT

Benefits of Local WordPress Development

Standardized Environments

Ensures consistency across team setups.

Cost Savings

Eliminates hosting fees during development.

Version Control

Integrates with Git for code management.

Offline Capability

Allows development without internet access.

Safe Experimentation

Offers a disposable sandbox for testing.

Zero Latency

Provides instant server responses.

The problem is the handover. Everything you gain while building, you pay back at the moment you have to transfer WordPress from localhost to a server. That step is where projects break, and it is what the rest of this guide is about.

What are the ways to move WordPress from a local server to a live site?

Diagram showing the workflow to move WordPress from a local server to a live site

Once your website is ready in LocalWP, XAMPP, MAMP or WAMP, the next step is moving it to a live hosting environment. The official WordPress guidance on moving a site covers the same ground at the core level. There are four practical routes: a one-command CLI push, a direct ZIP import, a manual files-and-database transfer, or a migration plugin. The right choice depends on how big the site is, how comfortable you are with the command line, and how much control you want over the database.

Method Typical time Skill needed Size limit What usually goes wrong Best for
1. InstaCLI migrate push 5 to 15 min Beginner, one npm install and one command No ZIP limit Stopping the local site, or closing the terminal mid-transfer Most sites, and anything too big to upload as a ZIP
2. ZIP import 5 to 20 min Beginner, no terminal 1 GB archive Refreshing the tab during upload Small and mid-size LocalWP sites
3. Manual transfer 45 to 90 min Advanced, SFTP plus WP-CLI None Corrupted serialized data, overwritten wp-config.php Developers who want control over the database
4. Migration plugin 20 to 40 min Intermediate 512 MB free tier on some plugins Installer files left on the server Moving to a host you do not control

InstaWP recommends starting with the CLI push, which is the shortest path and the only one of the four that does not ask you to touch the database. If you are coming from LocalWP specifically, InstaWP also documents how to build locally and then push to InstaWP end to end.

Method 1: How do you push a local WordPress site live with one command?

Run instawp migrate push . --name <site-name> --source-url http://<yoursite>.local/ from your WordPress root. InstaCLI archives the files, exports the database with mysqldump, creates a hosted site in your InstaWP account, uploads both over SSH, restores them and health-checks the result. That is the whole migration, and your local site never has to be reachable from the internet for it to work.

InstaCLI is InstaWP’s official npm command line tool. It replaces the older InstaWP Connect plugin push (wp instawp local push), which has been retired. The plugin is no longer part of this workflow at all, and InstaCLI deliberately excludes instawp-connect, instawp-helper and iwp-migration from the copy, so the site that lands on the server is a faithful copy of your local files rather than a copy carrying migration scaffolding.

What you need before you start. Node.js 18 or higher, npm, mysqldump available on your PATH, and an InstaWP account on a paid plan. You do not need WP-CLI, you do not need the InstaWP Connect plugin, and you do not need a public URL, an ngrok or Cloudflare tunnel, or port forwarding. The full requirements are listed in the InstaWP guide to pushing a local WordPress site to InstaWP.

The push works from localhost because of the direction the traffic runs. On your own machine InstaCLI archives the WordPress root and dumps the database. It creates the destination site in your InstaWP account through the API, then opens an outbound connection from your computer to that new site and uploads both archives. The server unpacks them and runs the restore. Nothing ever connects in to your machine, which is why a local WordPress site with no public address can still be pushed live.

Step 1: Start the local site and open its shell

Start your local environment and leave it running for the whole migration. InstaCLI reads the live database through mysqldump, so a stopped site means a failed export. In LocalWP, select the site and click Start site, then confirm it loads in a browser.

LocalWP with a local WordPress site running and the Site shell button visible
LocalWP with the site running. Site shell opens a terminal already sitting in the WordPress root.

Now open a terminal at the WordPress root, meaning the folder that holds wp-config.php and wp-content. In LocalWP, Site shell does this for you. On other stacks you change into the folder yourself:

  • LocalWP (Windows and macOS): right click the site and choose Open Site Shell. It opens at the site root.
  • XAMPP (Windows): open Command Prompt or PowerShell and run cd C:\xampp\htdocs\yoursite.
  • XAMPP (macOS): open Terminal and run cd /Applications/XAMPP/htdocs/yoursite.
  • WAMP (Windows): open Command Prompt and run cd C:\wamp64\www\yoursite.
  • MAMP (macOS): open Terminal and run cd /Applications/MAMP/htdocs/yoursite, or your custom document root if you set one.
  • A plain macOS or Linux setup: change into whichever directory holds wp-config.php, for example cd ~/Sites/yoursite or cd /var/www/yoursite.

Run ls (or dir on Windows) and confirm you can see wp-config.php. If you cannot, you are in the wrong folder and the push will refuse to run.

Step 2: Install InstaCLI and sign in

Check the three prerequisites, then install InstaCLI from npm and authenticate. Five commands in total.

node --version
npm --version
mysqldump --version

npm install -g @instawp/cli@beta
instawp --version

If mysqldump --version reports that the command is not found, install the MySQL client tools for your platform before going further. LocalWP ships mysqldump inside its own bundle, so the Site shell usually has it already. InstaCLI is published on the beta channel at the time of writing, which is why the install command pins @beta rather than taking the default tag.

Now authenticate. instawp login opens a browser window where you approve the session, and instawp whoami confirms which account the CLI is holding, which matters if you belong to more than one team.

instawp login
instawp whoami
Terminal showing node, npm and mysqldump version checks followed by instawp login
The three version checks, then instawp login. There is no API key to copy and paste.
Running this in CI instead of a terminal? instawp login accepts --token <token> for headless environments, and InstaCLI also reads an INSTAWP_TOKEN environment variable, so a pipeline never has to open a browser. The full flag list is in the InstaWP CLI command reference.

Step 3: Preview the migration with a dry run

Add --dry-run and InstaCLI validates the WordPress root, the source domain and the new site name, then prints the plan it would execute. Nothing is created and nothing is uploaded. This is the cheapest way to catch a wrong --source-url before it becomes a site full of unrewritten links.

instawp migrate push . --name dummysite-cloud --source-url http://dummysiteforinstawp.local/ --dry-run
InstaCLI dry run output showing the migration plan before anything is created
The dry run prints the plan and stops. Check the source URL here, not after the push.

Three arguments do the work, and a few optional flags change what the destination looks like:

Argument What it does Example
. (or --path)The WordPress root to copy. A dot means the current folder..
--nameNames the new hosted site in your InstaWP account.dummysite-cloud
--source-urlThe exact local address being replaced, including the protocol, the trailing slash and any port. Get this wrong and links stay pointed at localhost.http://dummysiteforinstawp.local/
--dry-runPrints the plan and exits without creating or uploading anything.flag, no value
--wp, --php, --keep-archivesOptional. Pin the WordPress or PHP version on the destination, or keep the archives on disk after the push.--php 8.3

Step 4: Run the push

Run the same command with --dry-run removed. Leave the terminal open and the local site running until it finishes.

instawp migrate push . --name dummysite-cloud --source-url http://dummysiteforinstawp.local/

InstaCLI works through the migration in order and reports each stage as it goes. It archives the files, exports the database with mysqldump, creates the hosted site, prepares SSH access, uploads both archives, restores them on the server, and health-checks the finished site. How long it takes depends on the file count, the database size and your upload speed. The run ends with Migration complete and prints the Site URL and the WP Admin URL.

InstaCLI reporting Migration complete with the new Site URL and WP Admin link
The end of a successful push. The Site URL and WP Admin link are printed for you.

Step 5: Log in and check the new site

Open the Site URL from the terminal output. Log in with the same WordPress admin username and password you use locally, because InstaCLI migrates the users table along with everything else. There is no new password to find and no account to recreate.

InstaCLI rewrites your local URLs to the new site address during the restore, including URLs stored inside serialized data, so you do not run a search and replace yourself. Two checks are still worth a minute. Open a page built with a visual builder such as Elementor or Bricks and confirm its images and links resolve, since builders store some settings as serialized objects where a stale URL can survive. Then open any page that uses a custom font or an external script and confirm nothing is still requesting http:// from your old local address.

The new site lands on the Sandbox plan, which is not a production plan. Sandbox is intended for development and testing. Before you point a real domain at the site or send live traffic to it, change the plan from the Sites page in your InstaWP dashboard. InstaWP documents what each tier includes under site plans and how to move between them under upgrading a site plan. This catches people out, because the migration itself reports success and the site genuinely works.
The InstaWP dashboard Sites page showing the newly migrated site running on the Sandbox plan
The migrated site in the InstaWP dashboard. Note the plan column: it says Sandbox, not a production tier.

The push always creates a new site. It never overwrites an existing destination, so running it twice gives you two sites rather than a replaced one. If you want to move changes into a site that already exists, InstaCLI has instawp sync push for wp-content and instawp db push for the database instead.

Push your local build live in one commandInstaCLI needs Node 18, npm and mysqldump on your machine. It does not need a plugin, a tunnel or a public URL.
Start on a paid plan →

Method 2: Import a Local Site Using a ZIP File

This method exports the site from your local environment and uploads it through the InstaWP dashboard. It needs no plugin, no terminal command, no SSH and no publicly reachable local URL. Check first that your exported ZIP is inside InstaWP’s current 1 GB upload limit. The walkthrough below uses LocalWP as the example.

Open LocalWP and select the site you want to move. Click Start Site and wait for it to come up. Right-click the site name, or use the three-dot menu beside it, and select Export.

Exporting a site from the LocalWP desktop application

Choose where to save the file and wait for LocalWP to build the archive. It packages the database, media, plugins, themes and the rest of your content into one ZIP. Leave it compressed, because you upload the ZIP itself to InstaWP.

Sign in to your InstaWP account, open the Sites page and click Import Site.

Import Site button on the InstaWP Sites page

An import modal opens with the available backup sources. Open the drop-down and select Local WP.

Selecting Local WP as the backup source in the InstaWP import modal

That tells InstaWP how the archive was created and how to process it. Click the upload area, select the ZIP you exported from LocalWP, and choose the hosting plan you want the site to run on.

Uploading a LocalWP ZIP export into the InstaWP import screen

You can also drag and drop the file into the upload area. Wait for the upload to finish and do not close or refresh the tab while it runs. When the file is ready, click Next.

Now enter the details for the imported website. Give it a site name you will recognise in your dashboard, and pick a server location close to the audience or client the site is for. Review any remaining site or plan settings, then click Import Site.

InstaWP importing a LocalWP archive into a new cloud WordPress site

InstaWP restores the files and database into the new cloud environment. The time it takes depends on the archive size and your connection. Keep the dashboard open until the status confirms the site is ready. Installation starts automatically once you submit the import.

When the import finishes:

  1. Return to the Sites page.
  2. Find the newly imported site.
  3. Open the frontend and confirm the website loads.
  4. Use Magic Login or the admin login option to get into WordPress.

Keep the original LocalWP site and its exported ZIP until you have finished checking the new one.

When to use this method

ZIP import suits you when you want a dashboard-based workflow and your export sits inside the upload limit. For larger sites, or when uploading a big archive is impractical, push the site with instawp migrate push instead.

Method 3: Manually Migrate a Local WordPress Site to InstaWP

Manual migration gives you direct control over the files, the database and the URL replacement. Use it when you would rather work with SFTP, database exports and WP-CLI than an automated tool.

Step 1: Export the local database

Open the database manager your local environment provides. In phpMyAdmin, select the database your local WordPress site uses and click Export.

Exporting a local WordPress database from phpMyAdmin

Select the Quick export method, choose SQL as the format, and download the .sql file.

Choosing SQL as the export format in phpMyAdmin

You can do the same with WP-CLI:

wp db export local-site-database.sql

Keep the SQL file somewhere safe.

Step 2: Package the local files

Find the root directory of your local WordPress site. It normally contains wp-admin, wp-content, wp-includes, wp-config.php and index.php.

Compress the WordPress files into a ZIP or TAR archive, and leave the local wp-config.php out of it. The destination site already has a configuration file holding the database credentials InstaWP needs. You can also skip files that are no use on the live site, such as wp-content/cache, wp-content/updraft, wp-content/ai1wm-backups, error_log and debug.log.

Step 3: Create the destination site

Sign in to InstaWP and create a new WordPress site. Go to Sites, click Add Site, then choose From Scratch.

Creating a new WordPress site from scratch in the InstaWP dashboard

Worth reading alongside this: Create Site.

This new site is the destination. InstaWP builds a complete hosted WordPress environment, so there is no database to create by hand through cPanel. Copy the temporary InstaWP URL, because you will use it to replace the local URLs stored in the database.

Step 4: Connect over SFTP and upload the files

In the InstaWP dashboard, click the three-dot menu and select SFTP/SSH.

Opening SFTP and SSH access from the InstaWP site menu

Turn on the SSH/SFTP toggle and copy the host, username, password and port shown.

SFTP and SSH credentials displayed in the InstaWP dashboard

The same credentials work for both SFTP and SSH. InstaWP supports clients such as FileZilla and Cyberduck. Open FileZilla, create a new connection, set the protocol to SFTP, enter the host, port, username and password from InstaWP, then click Quick Connect.

Connecting to an InstaWP site over SFTP using FileZilla

Once connected, find the WordPress root directory on the destination server and upload your archive there. Extract it over SSH or with the file manager, overwriting the existing WordPress files where needed.

Keep the destination wp-config.php. It holds the database connection details for the InstaWP environment. Uploading your local copy over it stops WordPress connecting to the destination database, which is the fastest way to land on an “error establishing a database connection” screen.

Step 5: Import the database

You can import the database through InstaWP’s DB Editor, or over SSH with WP-CLI.

Importing a WordPress database using the InstaWP DB Editor

Step 6: Replace the local URLs

The imported database still points at your local address. Every reference to http://example.local has to become the InstaWP site URL. Use WP-CLI for this, because it handles serialized WordPress data safely. Unlike Method 1, the manual route does need WP-CLI installed and on your PATH. Preview the replacement first:

wp search-replace 'http://example.local' 'https://your-instawp-site-url' 
  --all-tables-with-prefix 
  --skip-columns=guid 
  --dry-run

Read the results. If they look right, run it for real by dropping --dry-run:

wp search-replace 'http://example.local' 'https://your-instawp-site-url' 
  --all-tables-with-prefix 
  --skip-columns=guid

The WP-CLI search-replace command rewrites serialized PHP data correctly. A plain SQL find-and-replace does not, and it will corrupt the serialized settings stored by themes, widgets, page builders and plugins. Leave the guid column alone as well: WordPress treats it as a permanent identifier, not as the current permalink.

Step 7: Update home and siteurl, then flush

wp option update home 'https://your-instawp-site-url'
wp option update siteurl 'https://your-instawp-site-url'

Confirm both values came back as the destination URL:

wp option get home
wp option get siteurl

Then clear the cache and rebuild the rewrite rules:

wp cache flush
wp rewrite flush

If you would rather do the last step in the admin, go to Settings → Permalinks and click Save Changes without altering the structure. Finish by clearing any caching plugin the migrated site uses.

Method 4: Using Migration Plugins

If the manual route sounds tedious, a WordPress migration plugin automates most of it. Three are worth knowing for a WordPress local to live migration.

1. All-in-One WP Migration

All-in-One WP Migration to move WordPress from Local server to live sites

All-in-One WP Migration is the simplest of the three, with over 5 million active installations. It packages the whole site, database, media, plugins and theme into a single .wpress file. You click export on the local site, download the file, and import it on the live server. No technical knowledge required.

The catch is size. The free version caps imports at roughly 512 MB, so a site with a substantial media library will hit that wall and need the premium extension to finish.

2. Duplicator

Duplicator to move WordPress from Local server to live sites

Duplicator takes a more transparent approach. Instead of a proprietary format it produces a standard ZIP archive of your files plus a standalone installer.php script, so you can inspect exactly what is being moved. The installer wizard walks through database configuration, URL replacement and validation, and it handles serialized data correctly.

It also runs a pre-migration scan that flags incompatible server configurations, oversized files and problematic plugins before you start.

3. Migrate Guru

Migrate Guru to move WordPress from Local server to live sites

Migrate Guru runs the migration in the cloud. Rather than downloading files to your computer and re-uploading them, it transfers the site from source to destination through its own infrastructure. That makes it a good fit for large sites, or when your connection cannot handle a multi-gigabyte upload. It supports one-click migration to most major hosts and handles sites up to 200 GB with no local storage needed.

The tradeoff is control. You are trusting the service to handle every step, and you cannot see inside the process the way you can with Duplicator.

The walkthrough below uses Duplicator, because it automates the parts that are easy to get wrong (serialized data, URL replacement, validation) while still showing you what happens at each step.

Step 1: Install and Activate Duplicator

In your local WordPress dashboard, go to Plugins → Add New, search for Duplicator, install the plugin by Snap Creek and activate it.

Searching for and installing the Duplicator plugin in WordPress

Step 2: Create a New Package

Go to Duplicator → Packages and click Create New in the top right.

Creating a new Duplicator package from the Packages screen

Enter the details for your backup.

Entering package details in the Duplicator setup screen

Duplicator runs a system scan that checks for large files, server compatibility and problematic plugins. Review any warnings and fix what needs fixing. In most cases you can carry on.

Duplicator running a pre-migration system scan on the local site

The scan finishes quickly and the backup is ready to build.

Duplicator scan results showing the package is ready to build

Click Build. Duplicator packages the entire WordPress installation, all files and the complete database, into a single archive.

Starting the Duplicator package build

Step 3: Download Your Package Files

When the build completes you have two files to download:

  • installer.php, the standalone script that unpacks and configures your site
  • archive.zip (or similar), your complete WordPress site in compressed form
Downloading the Duplicator installer and archive files

Download both to your computer.

Step 4: Upload Files to Your Live Server

Using FileZilla, Cyberduck or your host’s file manager, connect to the live server and open your domain’s root directory, usually public_html or www. Upload both the installer and the archive there. Do not unzip the archive, because the installer does that itself.

Step 5: Create a Database on Your Live Server

The installer needs an empty database waiting for it. Log into your hosting control panel (cPanel, Plesk or similar) and:

  1. Create a new MySQL database and note the name.
  2. Create a new MySQL user with a strong password.
  3. Add that user to the database with all privileges.

Keep those credentials to hand, because the next step asks for them.

Step 6: Run the Installer Wizard

Open https://yourdomain.com/installer.php in your browser. The Duplicator wizard launches and runs in four stages:

1
Deployment
Accept the terms and let Duplicator validate the archive, then click Next.
2
Install Database
Enter the host (usually localhost), database name, user and password you just created, then click Test Database before you continue.
3
Update Data
Duplicator detects the old localhost URL and the new live URL. Check both are right. The plugin handles every URL replacement, serialized data included.
4
Final Steps
The migration completes and you are prompted to log in. Use the WordPress admin credentials from your local installation.

Step 7: Clean Up

Once the site works, finish the job:

  1. Delete the installer files. Duplicator prompts you to remove installer.php and its related files. Do it straight away, because leaving them in place is a security risk.
  2. Regenerate .htaccess. Go to Settings → Permalinks and click Save Changes.
  3. Test properly. Check pages, posts, images, forms and any custom functionality.
  4. Clear caches. If a caching plugin is running, flush it so visitors get the migrated site.
WordPress Settings Permalinks screen used to regenerate htaccess after a migration
Saving once on Settings › Permalinks rewrites .htaccess and clears the 404s that follow a migration.

Duplicator Pro adds scheduled backups, cloud storage integration, multisite support and the ability to install into an existing WordPress installation, which is useful if you run migrations often.

What breaks after you move WordPress live, and how do you fix it?

Most of the problems that appear straight after a migration come back to a URL that was missed or replaced badly. Work through them in this order.

Symptom Most likely cause Fix
Images and internal links brokenLocalhost URLs still in the databaseRe-run wp search-replace with --all-tables-with-prefix
Page builder layouts scrambledSerialized data corrupted by SQL find-and-replaceRestore the database and redo it with WP-CLI
Homepage loads, every other page 404sRewrite rules not rebuiltSave permalinks again, or run wp rewrite flush
Padlock warning, assets blockedMixed content, http URLs on an https siteSearch-replace http:// to https:// for your domain
Blank white screenPHP fatal error or wrong file permissionsEnable WP_DEBUG, read the log, check directories are 755 and files 644
Database connection errorLocal wp-config.php overwrote the destination oneRestore the destination config file

If images fail to load and internal links still point at example.local, the replacement missed rows. WordPress stores URLs across many tables, and plugins add their own, so run the search-replace against every table with your prefix rather than just wp_posts. Check that you matched the exact local URL, including the protocol and any port number such as :10004, which LocalWP often uses.

The homepage loads but every other URL 404s. That is the rewrite rules, not your content. Go to Settings → Permalinks and click Save Changes without altering the structure, which rebuilds .htaccess. On Nginx there is no .htaccess, so the try_files rule in the server block has to be right instead.

Why do I get a white screen after migrating WordPress?

A blank page almost always means a PHP fatal error that is not being displayed. Set WP_DEBUG and WP_DEBUG_LOG to true in wp-config.php and read wp-content/debug.log. The usual culprits are a PHP version gap between local and live, a plugin calling a function the live PHP version removed, or a memory limit that is too low. If the site loads but behaves oddly, our guide on WordPress site not loading covers the wider set of causes.

How to change the WordPress site URL after migrating

If home and siteurl still hold the local address you will get redirect loops or be locked out of wp-admin. Fix them with WP-CLI as shown above, or add these lines temporarily to wp-config.php:

define('WP_HOME','https://yourdomain.com');
define('WP_SITEURL','https://yourdomain.com');

Remove them once the database values are correct, because leaving them in place makes the setting impossible to change from the admin later. If you land on a database error instead, our walkthrough for error establishing a database connection takes it from there.

Where Should the Live Site Actually Go?

The destination decides how much of the work above you have to do at all, so it is worth deciding before you start rather than after.

On traditional shared hosting you create the database yourself, set the PHP version by hand, request an SSL certificate, and fix file permissions after the FTP upload. Those four steps are where most of the failures in the table above come from.

On managed WordPress hosting the environment is built for you. InstaWP provisions the database, the PHP version, the SSL certificate and a working URL when the site is created, which is why Methods 1 and 2 above have no database step at all. You also get SFTP and SSH access, WP-CLI, a database editor, and automatic WordPress backups by plan, so the recovery path exists before you need it.

Moving a local build to a live server this week?Spin up the destination first, push the site into it, and check everything on a real URL before you point the domain.
Explore managed WordPress hosting →

What does a local-to-live migration actually cost you?

Migration is where WordPress projects break. You can spend weeks building a flawless site on localhost and watch it fall apart in an hour. Experienced developers hit these problems too, so it is worth knowing what you are up against.

Worth reading next: WordPress local development challenges and the alternative.

Database URL problems

The search-and-replace step looks trivial until you meet serialized PHP arrays. WordPress stores URLs inside them, one wrong character invalidates the whole array, and that data sits in theme options, widget settings, page builders and countless plugins. Some plugins store URLs with a trailing slash and some without, and an http reference on an https site produces mixed-content errors.

Environment mismatches

Your localhost runs PHP 8.2 and your host defaults to PHP 7.4, so the plugin that worked perfectly now throws fatal errors. MySQL version differences (strict mode in particular), PHP memory limits, maximum upload sizes and disabled PHP functions cause the same class of surprise.

File permission errors

Files uploaded over FTP often arrive with the wrong permissions. You will see a white screen, “installation failed: could not create directory”, media uploads that fail silently, or plugin and theme installs that will not complete.

Works locally, breaks live

Everything runs perfectly on localhost, then the live site shows missing images, broken internal links, CSS that will not load, 500 errors or redirect loops. Tracking those down can take hours, sometimes days. Add DNS propagation, SSL setup and testing to that, and a redesign launch carries a stretch where the site may be broken for real visitors.

Is there a way to skip the migration entirely?

There is a way to avoid all of this: do not move WordPress from local to live in the first place.

Instead of building locally and then transferring, you develop directly in a cloud environment. All-in-one cloud platforms such as InstaWP create a working WordPress site in seconds with your chosen PHP version, an SSL certificate and a shareable URL. You configure no server, install no XAMPP or MAMP, and open the site from any browser.

Building WordPress on cloud changes four things:

  • No migration required. Your development site and your live site are the same kind of environment, so going live is a deployment rather than a migration.
  • Consistent environments. The PHP and MySQL versions that run your staging site run production too, which removes the “works on my machine” class of bug.
  • Instant sharing. Client feedback needs a link, not a local tunnel or a throwaway server.
  • Built-in staging. Clone a site, take a snapshot, roll a change back, none of which touches your machine. If you want to try this before committing, a WordPress sandbox takes seconds to create.

The tradeoff developers expect

When developers hear “cloud-based development” they usually raise the same four objections. They want VS Code with their own extensions. They want Git version control on their theme files. They find editing through the WordPress admin too slow for real work. And they need to work offline sometimes.

Those are fair. Editing code through a dashboard or a web file manager cannot match a proper IDE for search across files, syntax highlighting, linting and keyboard shortcuts. That is the reason InstaWP built Local Mount.

Local Mount showing an InstaWP cloud site as a folder on the developer's computer

With Local Mount your cloud-hosted InstaWP site appears as a folder on your computer. Open it in Finder or File Explorer and the whole WordPress file structure is there: wp-content, wp-config.php, themes, plugins. Edit a file in VS Code and save it, and the change is live on the cloud site straight away, so there is no upload step to remember and nothing to migrate later.

You keep managed cloud hosting with its consistent environments and shareable URLs, and you keep local file access with your own IDE and tooling. The walkthrough below shows it running on macOS, Windows and Linux.

How does Local Mount let you edit a cloud site locally?

Local Mount uses standard network file sharing to expose your InstaWP site’s filesystem to your operating system. When you enable it, InstaWP gives you a server address, a username and a password. Your computer mounts that as a network drive on Windows or a network volume on macOS and Linux, and from then on the files behave like local ones.

One important distinction. Your site still runs on InstaWP’s servers. You are not running WordPress locally, you are only reaching the files locally. So there is no XAMPP, MAMP or Local by Flywheel to install, no database to configure, no PHP version to manage, and the site stays reachable at its URL the whole time.
Local Mount Access by Platform
Platform
Access Method
Windows
Map as network
drive
iOS
macOS
Connect via
“Connect to Server”
Linux
Network connection
or `sshfs`

Getting started with Local Mount

The prerequisites are below.

Prerequisites for Local Mount
Prerequisite
Description
W
InstaWP Site
Active site with at least Starter plan
Internet Connection
Stable connection required
Admin Access
Admin access on your computer

Step 1: Enable Local Mount in InstaWP

Open the Sites page in your InstaWP dashboard and click your site to open its settings.

Opening site settings from the InstaWP Sites page

Select Local Mount in the left panel and switch Enable Mount on, then copy the server address, username and password shown.

Enabling the Local Mount toggle and copying the connection credentials

Step 2: Connect from Your Computer

On Windows, open File Explorer, go to This PC and click Map Network Drive in the toolbar.

Mapping a network drive in Windows File Explorer

Paste the server address into the Folder field and click Finish, then enter the username and password from InstaWP. Tick “Remember my credentials” if you want to skip that next time. Your site now shows up as a drive letter under This PC.

Entering the InstaWP Local Mount server address in the Windows folder field

On macOS, open Finder and choose Go → Connect to Server, or press Command K.

Using Connect to Server in the macOS Finder Go menu

Enter the server address with https:// in front of it.

Entering the Local Mount server address in the macOS Connect to Server dialog

Click Connect and enter the username and password from InstaWP. Your site appears in the Locations sidebar in Finder.

Mounted InstaWP site showing in the macOS Finder Locations sidebar

On Linux, use your file manager’s Connect to Server option, or mount it from the command line:

sshfs username@host:/remote/path /local/mountpoint

Move into the mounted folder and you will find the usual WordPress structure: wp-admin/, wp-content/, wp-includes/ and wp-config.php. Open wp-content/themes/your-theme/ in your IDE and start working. Every save syncs.

How do you manage the live WordPress site with AI after launch?

Launching the site is a one-off task. Updating content, plugins and users afterwards carries on for as long as the site exists.

Once the site is running on InstaWP, InstaMCP makes it MCP-ready with a single toggle. You do not set up a server, write a JSON config file or generate an application password. From there an AI client such as Claude Desktop, Claude Code, Cursor, ChatGPT or VS Code can work on the site through prebuilt tools for posts, pages, media, users, comments, categories and plugins. Our guide to the WordPress MCP server explains how the connection works.

To be clear about what this is not.
InstaMCP does not perform the migration for you. Use one of the four methods above to get the site live, then use InstaMCP to manage it once it is running.

Conclusion

Building locally and then migrating made sense when cloud tooling was limited. It is still the step in the process most likely to fail, and it fails at the point where the site is meant to go in front of real visitors.

If you have to move an existing local build, use Method 1 or Method 2 and work through the troubleshooting table before you point the domain. If you are starting something new, consider building it on the cloud instead, so there is no migration to get wrong.

The recap

Four routes get a local WordPress site live. InstaCLI pushes the whole site with one command and needs no public URL. ZIP import handles anything under 1 GB with no terminal at all. Manual transfer is the one that gives you direct control of the database. A migration plugin is the right answer when the destination is a host you do not control. Whichever you pick, the failures afterwards are nearly always URL failures, so work the troubleshooting table before you point the domain.

Build in the cloud, edit locally, skip the migrationMount your cloud site as a folder on your own machine and work in your usual IDE.
See how Local Mount works →

FAQs

Why do my images and links break after moving WordPress from localhost?

Because the database still holds the old localhost URLs. WordPress stores them across many tables, including inside serialized arrays used by themes, page builders and plugins. Run wp search-replace with --all-tables-with-prefix and --skip-columns=guid, and match the exact local address including any port number.

How do I change the WordPress site URL after migration?

Update both values with wp option update home and wp option update siteurl, then confirm them with wp option get. If you cannot reach wp-admin at all, define WP_HOME and WP_SITEURL temporarily in wp-config.php, fix the database values, then remove those lines.

Why do my permalinks return 404 after moving to a live server?

The rewrite rules did not come across. Go to Settings and then Permalinks and click Save Changes without altering the structure, which rebuilds .htaccess. On Nginx there is no .htaccess, so the try_files directive in the server block has to be configured correctly instead.

What causes the white screen after a WordPress migration?

A PHP fatal error that is not being displayed. Set WP_DEBUG and WP_DEBUG_LOG to true and read wp-content/debug.log. The common causes are a PHP version gap between local and live, a plugin using a function the live PHP version removed, a memory limit that is too low, or file permissions that are not 755 for directories and 644 for files.

Do I need a migration plugin to move a local site live?

No. A migration plugin automates the file transfer and the URL replacement, but you can push the site with the InstaCLI command instawp migrate push, upload a ZIP export, or move the files and database yourself over SFTP and WP-CLI. Plugins are most useful when the destination is a host you do not control.

Can I move a local WordPress site without touching the database?

Not with a manual transfer, because the database holds your content and every stored URL. Automated methods do the database work for you: the InstaCLI push and the ZIP import both move the database and rewrite the URLs, so you never open phpMyAdmin.

What is the command to push a local WordPress site to InstaWP?

Run instawp migrate push . --name <site-name> --source-url http://<yoursite>.local/ from the folder containing wp-config.php. Add --dry-run first to preview the plan without creating anything. The command needs Node.js 18 or higher, npm, mysqldump on your PATH, and an InstaWP account on a paid plan.

Does the InstaWP Connect plugin still push a local site live?

No. The old wp instawp local push flow through InstaWP Connect has been retired and replaced by InstaCLI. The plugin is not a prerequisite for this migration. InstaCLI authenticates on its own through instawp login, and it deliberately excludes instawp-connect, instawp-helper and iwp-migration from the copy so the migrated site is a faithful copy of your local files.

Do I need ngrok, a tunnel or a public URL to migrate from localhost?

No. InstaCLI opens an outbound connection from your machine to InstaWP and uploads the archives, so nothing ever connects in to your computer. A localhost site with no public address, no tunnel and no port forwarding can be pushed live exactly the same way as one that is publicly reachable.

What plan is the migrated site created on?

The Sandbox plan, which InstaWP intends for development and testing rather than production. The migration reports success and the site works, so this is easy to miss. Change the plan from the Sites page in your InstaWP dashboard before you point a real domain at the site or send it live traffic.

What login do I use on the migrated site?

The same WordPress administrator username and password you use on the local site. InstaCLI migrates the users table along with the rest of the database, so there is no new password to find and no account to recreate.

Is Local Mount secure?

Yes. Local Mount uses HTTPS for encrypted data transfer. Your credentials are unique to your site and can be regenerated by toggling the feature off and on. Disconnect the drive when you are not using it, especially on a shared computer.

Does Local Mount work with all InstaWP plans?

Local Mount is available on Starter plans and above. Each team member can mount the same site on their own computer, and changes made by one person appear for everyone.

NS
Neha Sharma
Content, InstaWP

Neha writes practical WordPress tutorials and agency playbooks, with a focus on dev workflows and AI building.