Migrate from WordPress
Use migration when you have an existing WordPress blog and want to move its posts into a Structura headless site — for example, you’re shutting down a self-hosted WordPress install and serving the same content from a Next.js, Astro, or other front end instead.
Migration copies your published posts (optionally drafts too) into the headless site, rehosts every image onto Structura’s durable storage so nothing breaks when the old site goes away, keeps each post’s slug and SEO metadata, and produces a redirect map so search engines follow your old URLs to the new ones.
Migration is available on every plan, including Free — the Free plan imports up to your most recent 500 posts; paid plans are unlimited.
Before you start
You’ll need:
- A Structura headless site already created (this is the destination). See Headless mode for the bigger picture of headless publishing.
- The address of your old WordPress site (e.g.
https://old-blog.com). - Keep the old WordPress site online during the migration. Images are copied live from it as posts are imported — if it’s already offline, the images can’t be saved.
Optional: connect with credentials
By default migration reads your site’s public content — every published post, plus the SEO title/description from Yoast or Rank Math. That’s enough for most moves.
Connect with an application password if you also want to bring over drafts and pending posts, custom SEO fields, or your existing Redirection plugin rules. To create one on the old site:
- On the old WordPress, go to Users → Profile → Application Passwords.
- Enter a name (e.g. “Structura migration”) and click Add New Application Password.
- Copy the generated password and paste it, with your WordPress username, into the migration’s Advanced option.
The application password is used only for the duration of the migration and is deleted as soon as it finishes. You can revoke it on the old site afterward.
Steps
- Open your headless site in the customer portal and start a Migrate from WordPress.
- Enter your old WordPress address. Optionally expand Advanced to connect with a username + application password.
- Structura checks the connection and shows what it found — how many posts, which SEO plugin, and a suggested URL pattern that matches your old permalinks. Adjust the destination URL pattern if you want the new URLs to match the old ones exactly.
- Start the migration. A progress view shows posts and images being imported. You can safely leave and come back — the migration keeps running and the progress resumes where it left off.
- When it finishes, review the redirects step and download the configuration for your front end (see below).
What happens next
- Imported posts appear in your headless site’s posts list. Posts that were published on WordPress are published; drafts land in review so you can vet them first.
- Each post keeps its original slug, SEO title/description, and featured image, and its content is fully editable in the Structura editor.
- Links inside your posts that pointed to other posts on your old site are automatically repointed to their new home, so the moved site links to itself. The import shows a Links fixed count when it’s done. A few links may still point to your old site — for example, links to pages that aren’t blog posts, posts you chose not to bring over, or posts beyond the Free plan’s limit. These still work, and you can update them whenever you like.
- The migration produces a redirect map from your old URLs to the
new ones. Apply it on whatever serves your new site so that old links
and search-engine results keep working:
- Next.js / Vercel — paste into your
next.configredirects orvercel.json. - Apache — add the rules to your
.htaccess. - nginx — add the rules to your server block.
- CSV / JSON — a portable map for any other setup.
- Next.js / Vercel — paste into your
Once the new site is live and the redirects are in place, you can safely shut down the old WordPress blog.
Common issues
“Couldn’t reach the site.” Double-check the address (include
https://) and that the site is online. Sites behind a password, IP
allowlist, or “coming soon” plugin can’t be read.
“Sign-in failed” with credentials. The username or application password is wrong, or application passwords are disabled on the source site. Re-create the application password and try again — or leave the Advanced fields empty to import public posts only.
Some images didn’t come across. Images are copied live from the old site; if it went offline mid-migration, or an image was already a broken link, that image is skipped and the rest of the post still imports.
Free plan stopped at 500 posts. The Free plan imports your most recent 500 posts. Upgrade to import the rest of a larger archive.
Related pages
- Headless mode — publishing to a separate public website.
- Generated posts — editing and publishing posts in a headless site.