I want to start with an unpopular opinion: most people who think they need to migrate off WordPress don't. WordPress is fine. It runs 40% of the web. It has a plugin for everything. It's familiar to writers, marketers, and the agency you'll eventually hand the site to. Migrating off it is expensive, slow, and frequently regretted.
So before I talk about how I do migrations, here's the conversation I have with most prospects who reach out about this: should you actually migrate, or are you trying to solve a different problem with the wrong tool?
Reasons to migrate that are actually good
There are real reasons to leave WordPress. In rough order of how often I see them:
1. The site is now a software product, not a website. You started with a marketing site. You added a custom plugin to handle quotes. Then a member portal. Then a complex calculator. Then a multi-step booking flow with payment. Today, 80% of the value lives in custom code that's been duct-taped onto WordPress. WP is now the bottleneck — you fight it for every change, your developer hates the codebase, and editing the stuff that's actually marketing copy has become incidental. This is the single best reason to migrate.
2. Performance has become a business problem. WordPress can be made fast (Cloudflare APO + a good host + lean themes), but if your traffic is now in the seven figures or you're getting hammered on Core Web Vitals despite trying everything, a custom stack with proper caching and edge rendering can buy you 3–5x improvement.
3. Your security/compliance posture demands it. You're dealing with regulated industries (healthcare, finance, government), customer data that exceeds typical e-commerce volumes, or you've been hacked twice. WordPress's plugin ecosystem is its biggest strength and its biggest attack surface. Sometimes the right move is a smaller surface.
4. You've outgrown the plugin economy. The plugins that do what you need are abandoned, conflicting with each other, or charge $500/year per site. At some point a custom build is cheaper over five years than the plugin tax.
5. Your team is now developers. When you started, you were a marketer. Now you have three engineers and a product manager. WordPress's strengths (anyone can edit) are wasted; its weaknesses (slow custom dev) are amplified.
If one of these isn't your situation, you probably shouldn't migrate.
Reasons to migrate that are bad (but common)
I turn down WordPress migration projects when the reason is one of these:
- "WordPress is unprofessional." It isn't. Some of the world's biggest brands run WP. This is ego, and the migration won't fix the underlying insecurity.
- "My agency told me we should rebuild." Some agencies push migrations because the rebuild is more billable than incremental WordPress work. Get a second opinion that isn't from someone who'd profit from the rebuild.
- "I want headless WordPress because [framework] is faster." Headless adds complexity, doubles your hosting cost, and most of the speed wins are achievable with Cloudflare APO and a faster host. Headless is the right answer for some sites, but the bar is high.
- "WordPress feels old." Frameworks come and go. WordPress remains. "Feels old" is fashion, not engineering.
What I actually migrate to
The right destination depends on what your site does:
Mostly content, lots of editor users, want CMS comfort: Next.js + Sanity or Next.js + Payload CMS. Editors get a familiar dashboard, the frontend gets fast static rendering, you keep most of WP's editorial flexibility without WP's tech debt.
Custom application work with a marketing site attached: Laravel + Filament admin + a static marketing layer. Filament gives you a WordPress-like admin experience for non-technical users on the parts that need it; the application code is real Laravel.
E-commerce migrating from WooCommerce: Shopify (yes, really — for most stores it's the right answer), or Medusa.js if you genuinely need custom commerce logic that Shopify can't do.
Marketing-only sites with high SEO demands: Astro + Markdown + a tiny PHP/Node backend for forms. Output is static, deploys via Cloudflare or Vercel, ranks like crazy.
I'd rather migrate you to something you can maintain than something fashionable. Boring, stable, well-documented stacks always.
What a real migration costs
The honest numbers, because everyone underestimates this:
Brochure site (10–30 pages, no e-commerce): $4,000–$8,000 USD. 3–5 weeks. Includes content migration, redirects, design refresh if needed, basic CMS setup.
Mid-complexity site (custom post types, members, a few integrations): $10,000–$20,000 USD. 6–10 weeks. The bulk of the cost is recreating the custom WP plugins as proper code, then the careful content migration with redirects.
Heavy WP site (significant custom plugins, e-commerce, member portal): $20,000–$60,000 USD. 3–6 months. This is where most agencies start charging more, but a single experienced full-stack dev can usually handle this scope at the lower end of that range.
What's NOT included in those numbers (because it should be a separate conversation):
- New design / brand work — usually $3k–$10k extra if you want a refresh, $0 if we replicate the existing design 1:1
- Net-new features — easier to add during migration but they're scope additions, not migration cost
- Ongoing maintenance — the Lead Steer monthly retainer at $500/mo covers ongoing dev work post-migration
The SEO-preservation problem
This is the single most underestimated risk in a WordPress migration: your search rankings can crash to zero in the first month if redirects and structured data aren't handled carefully.
I've seen migrations where domain authority took 12 months to recover. The mistakes that cause this are predictable:
- URL structure changes without 301 redirects. Old URL
example.com/2023/05/post-slug/, new URLexample.com/blog/post-slug/— without a redirect map covering every published URL, you've told Google your entire content library is gone. - Canonical tags pointing at the old domain. Embarrassingly common. The new site is technically the same content, but Google sees the canonical and de-prioritises it.
- Lost schema markup. Article schema, BreadcrumbList, FAQPage — if the new site doesn't replicate the structured data, rich snippets vanish.
- Robots.txt or noindex left over from staging. I've seen sites launch with
Disallow: /because the staging environment's robots.txt got copied across. - Image URLs changing without redirects. If you've ever earned backlinks to an image, those links break.
My migrations include an SEO preservation checklist as standard work, not an upcharge. After launch, every site I migrate gets run through SEOCheck before we go live, so the dumb stuff is caught before Google sees it.
The "what about my plugins" question
The most-frequent question. There are usually three categories:
Replicable in custom code (about 60% of plugins): forms, custom post types, simple booking, simple e-commerce, popups, lead capture. These get rebuilt as part of the migration.
Replaced with a SaaS (about 30%): membership (use Memberstack, Outseta), CRM integrations (use HubSpot, Pipedrive direct), live chat (Intercom, Crisp), advanced analytics (Plausible, Fathom). Often cheaper per year than the WP plugin equivalent.
Genuinely custom and important (about 10%): the calculator your business runs on, the multi-tenant member portal, the custom integration with your fulfilment partner. These get a proper rewrite, which is where most of the migration budget goes.
Before quoting, I audit your plugins page-by-page so the quote reflects reality. Surprise plugins are how migrations blow out by 200%.
The handoff
When the migration ships, you get:
- Full source code in your GitHub. Mine never holds your code.
- Deployment that anyone competent can take over. Vercel, Render, DigitalOcean — your account, your billing.
- A "running this site" doc with how to deploy, how to add content, where the secrets live, how to rollback.
- A 30-day post-launch fix-it window included in the fixed price for any bugs that surface.
- A handoff call with your in-house team or next dev if you want one.
I don't lock clients into me. Some of my best long-term clients are ones who could leave any time but choose not to.
How to start
The first conversation is free, 45 minutes. Send me your current WordPress URL, a brief on what's broken, and your rough timeline. I'll tell you whether migration makes sense, what I'd quote, and what I'd recommend if I think you should not migrate.
---
This page is part of my service offerings. For the broader strategy of when to rebuild vs. iterate, see Full-Stack Development for Solo Founders and Bootstrappers.