Migrating WordPress to Next.js pays off when the site has stopped being a site: user accounts, dashboards, custom business flows, real multilingual and RTL needs, or a performance ceiling the theme and plugin stack cannot break. For a content site with happy editors, solid managed hosting, and plugins doing real work, WordPress remains the right answer, and a migration mostly buys a more expensive version of what you already have. When the move is justified, three paths exist (full rebuild, headless WordPress, route-by-route strangler), and whichever you pick, URLs, redirects, and SEO signals must survive intact.
When is staying on WordPress the right call?
If your site is primarily content, your editors like the admin, your managed host handles updates and backups, and your plugins do real work (forms, bookings, memberships, commerce), staying is the right call. A migration would cost months of effort and return a site that does the same job. We refuse those migrations, and we say so in the first call.
WordPress runs roughly 43% of the web as of 2025 W3Techs measurements, and that is not inertia: for an editorial team it remains the most productive publishing tool available. Rankings are not an argument either: a well-maintained WordPress site competes fine in classic search and in AI answers, a point we detail in our guide to AI SEO on WordPress. If your real pain is a slow theme or a bloated page builder, fix that first: it costs a fraction of a migration.
What are the real triggers for moving to Next.js?
Four triggers justify the move. The site became an application: authentication, dashboards, quoting or booking flows fighting plugin limits. Performance hit a ceiling you cannot fix inside the theme and plugin stack. Multilingual needs now include real i18n routing and RTL. Or the plugin surface turned security updates into a weekly tax.
The performance trigger deserves honesty: a caching plugin and a CDN solve most WordPress speed problems. The ceiling is real when field data for Core Web Vitals stays poor after that work, usually because the theme ships scripts and styles you cannot remove without forking it. The application trigger is the strongest one we see: once you are writing custom PHP against plugin internals to build product features, you are already paying application prices on CMS foundations.
Which migration path fits: rebuild, headless, or strangler?
Three paths work in practice. A full rebuild replaces WordPress entirely: the cleanest result and the highest upfront cost. Headless keeps WordPress as the CMS behind a Next.js front: editors keep their admin, you gain an integration to operate. The strangler migrates route by route, spreading cost and risk over time.
Headless talks to WordPress through the REST API or WPGraphQL; it fits editorial teams that need application features around their content, but preview, media, and cache invalidation each need deliberate wiring. The strangler puts a proxy in front and moves one route at a time, the same slice-by-slice logic as our approach to migrating backends without stopping production: the safest path for high-traffic sites that cannot afford a big-bang cutover.
| Criterion | Stay on WordPress | Headless WP + Next.js front | Full Next.js rebuild |
|---|---|---|---|
| Editor experience | Unchanged: the admin your team knows | Unchanged for content; previews need wiring | New workflow to choose and learn |
| Performance ceiling | Bounded by theme and plugins | High: WordPress only serves content | Highest: you control every byte |
| Ops load | One system, often managed | Two systems plus the integration | One system, but yours to run |
| Cost of change | Near zero | Medium | Highest |
| When it wins | Content site, happy editors | Editorial team plus application needs | The site is really an application |
Unsure whether your WordPress pain justifies a migration? Describe your system: a one-page diagnosis within 48 hours.
Get my diagnosis →How do you keep URLs and SEO through the migration?
Build the 301 redirect map before writing any application code. Export every URL with traffic or backlinks (permalinks, category archives, media paths) and give each an explicit destination. Then carry metadata, the XML sitemap, and structured data over, and decide who edits content after the switch. Those decisions protect rankings you already paid for.
Next.js handles the map natively through redirects() in next.config, including pattern rules for dated permalinks:
// next.config.js
module.exports = {
async redirects() {
return [
// Old dated permalinks: /2023/05/post-name/ becomes /blog/post-name
{
source: '/:year(\\d{4})/:month(\\d{2})/:slug',
destination: '/blog/:slug',
permanent: true, // 301
},
// Category archives collapse onto the blog index
{
source: '/category/:slug',
destination: '/blog',
permanent: true,
},
// One-off mappings from the URL audit
{
source: '/contact-2',
destination: '/contact',
permanent: true,
},
]
},
}
After cutover, crawl the old sitemap and follow every URL to confirm it lands on a 200 through exactly one redirect hop. Keep the map alive for at least a year: link authority moves slowly. This sequence is the backbone of our website creation engagements when they start from an existing WordPress site.
What usually breaks during a WordPress migration?
Five things break routinely. Internal links hardcoded in post bodies keep pointing at old paths or the old domain. Media stays behind in wp-content and returns 404s. Forms lose their notifications and spam protection. Third-party integrations (newsletter, analytics, pixels, CRM webhooks) silently stop firing. And the editor workflow question, never decided, resurfaces as "how do we publish now?"
Each has a boring fix: run a search-and-replace audit on post content before export, migrate the media library to object storage or your new asset pipeline with redirects for wp-content paths, rebuild forms first (they are often the site's only conversion point), and inventory every third-party script before cutover. Write the editorial decision down: who publishes, in which tool, with what preview. The risks that hurt are the ones nobody owned.
The pre-migration checklist
- Confirm a real trigger exists (application features, performance ceiling, i18n/RTL, plugin fatigue); otherwise stay on WordPress.
- Pick the path deliberately: rebuild, headless, or strangler, using the table above.
- Export the full URL inventory and write the 301 map before any application code.
- Decide the editor workflow and validate it with the people who actually publish.
- Inventory forms, media, and third-party integrations; rebuild the conversion paths first.
- After cutover, crawl the old sitemap and monitor 404s for a full quarter.