Frequently Asked Questions

Common questions and errors before and during a migration. Can’t find your answer? Contact us.

Connection & credentials

“Test connection” fails with “Not Found”

Your site’s REST API isn’t reachable at the pretty URL WPMove uses (/wp-json/...). This usually means the site’s permalink rewrite rules aren’t active — common right after installing a new plugin, changing themes, or on a fresh install. Fix: go to Settings → Permalinks on that site and click Save Changes (even without changing anything). This regenerates the rewrite rules. Retest the connection afterwards.

“The target user does not have sufficient permissions”

The target site’s user needs both upload_files and edit_posts capabilities — in practice, a role of Author, Editor, or Administrator. A Subscriber or Contributor account won’t work. Create or use an account with at least the Author role and generate its Application Password from there.

Application Password looks correct but the connection still fails

A few things to check: the Application Password must be generated from Users → Profile → Application Passwords on the site itself (not typed manually) — spaces in the generated password are cosmetic and safe to keep or remove. If the site is protected by an extra layer (HTTP Basic Auth / “Directory Privacy” on some hosts, a firewall rule, or a security plugin blocking REST API or XML-RPC-style requests), WPMove’s connection will be rejected before WordPress even sees it. Temporarily allow REST API access for WPMove, or exempt the /wp-json/ path from that protection.

SSL / certificate errors

Both the source and target sites must be reachable over HTTPS with a valid, trusted certificate. A local development site with a self-signed certificate (e.g. .devel, .local, .test domains) will fail — WPMove doesn’t disable certificate verification for security reasons. Use a staging domain with a real certificate (Let’s Encrypt is fine) instead.

Migration behavior

Custom post types (CPT) don’t appear in “Post types to migrate”

The list is fetched live from your source site once its credentials are saved and “Test connection” succeeds. If a CPT is missing: make sure it’s registered as public and show_in_rest on the source (WPMove can only see and migrate post types exposed through the REST API), and make sure you clicked “Test connection” at least once after saving working source credentials.

Media isn’t migrating even though “Import media” is checked

On the Free plan, media is never migrated regardless of that checkbox — it’s a plan limitation, not a bug. Media migration is available on Starter, Pro and Unlimited plans, each with its own yearly media quota (see the Pricing page).

“Please wait N days before your next migration”

This is the Free plan’s cooldown between migrations. Paid plans (Starter, Pro, Unlimited) have no cooldown and allow unlimited migrations.

A migration seems stuck — no progress for a while

WPMove monitors migrations in the background; if one stops reporting progress for more than ~15 minutes, you’ll automatically receive an email about it (at most one per hour). From the Migrate page, use Restart to resume from where it left off, or Reset to clear it and start over. Migrations run via a queue, so brief pauses of a few minutes between pages are normal and not a sign of being stuck.

Media re-imported with a -1 suffix on the filename

This happens when “Skip already imported media” is unchecked (replace mode) and a file with the same name already exists on the target — WordPress adds a numeric suffix rather than overwrite by default. WPMove’s replace mode deletes the existing file first specifically to avoid this; if you still see suffixed files, they were likely uploaded outside of WPMove (e.g. manually) before the migration ran.

WPMove
Privacy Overview

This website uses cookies to improve your experience. Strictly necessary cookies are stored in your browser as they are essential for WPMove to function. We also use third-party analytics cookies to understand how visitors use WPMove — only with your consent.