Migrating from WordPress or Concrete5 to Next.js without losing your SEO
The exact checklist we use to move sites from legacy CMS platforms to Next.js — URL inventory, redirects, metadata, schema and launch QA — with zero ranking loss.
By Syed Shahzaib Ali · 20 October 2026 · Updated 3 November 2026 · 2 min read
We've migrated dozens of practice and business websites from Concrete5, PHP and heavyweight WordPress builds to modern stacks. Rankings only drop when the migration is sloppy. Here is the checklist that keeps them intact.
Before you build anything: inventory every URL
Sitemaps lie. They're generated by plugins, forgotten after launch and rarely include landing pages, PDFs, image URLs or old campaign pages that still rank. Crawl the live site (Screaming Frog or a custom crawler) and pull Search Console's "Pages" report and GA4's landing-page report. The union of those three lists is your real URL inventory.
For each URL record: current title, meta description, H1, canonical, status code, inbound links and organic clicks in the last 12 months.
Decide the new URL structure — then map 301s
Keep URLs identical wherever you can. Where you change them, create a one-to-one redirect map (never redirect everything to the home page). In Next.js, redirects live in next.config.ts, which keeps them version-controlled and reviewable:
redirects: async () => [
{ source: "/contact-us.php", destination: "/contact", permanent: true },
{ source: "/index.php", destination: "/", permanent: true },
]
Fragment links (/#services) can't be redirected server-side, so keep matching id attributes on the new page.
Carry over everything search engines already like
- Titles, descriptions and H1s for pages that rank well (improve, don't rewrite from scratch).
- Structured data — rebuild it with Next.js metadata and JSON-LD helpers, then validate.
- Alt text, image file names and internal links.
- Google Analytics and Search Console verification tags.
Build for speed from the start
The point of Next.js is static generation and edge delivery. Use next/image with explicit sizes, self-host fonts, keep client JavaScript to what the page actually needs, and check Core Web Vitals on a staging URL before launch.
Launch day
- Deploy to the production domain and verify redirects with a crawl of the old URL list — every old URL must return 301 → 200.
- Submit the new sitemap in Search Console and request indexing for key pages.
- Watch coverage, Core Web Vitals and rankings daily for two weeks; fix any 404s immediately.
Done this way, we routinely see rankings hold steady and then improve as the faster site accumulates better engagement signals. Ask us about migrating your site.
Frequently asked questions
- How long does a WordPress to Next.js migration take?
- A 10–30 page business site typically takes 3–6 weeks including design, build, redirect mapping and QA. Large sites with hundreds of URLs take longer, mostly in content export and redirect verification.
- Will I lose my blog when moving to Next.js?
- No. Posts are exported and rendered from Markdown or a headless CMS with the same URLs, or redirected one-to-one if the URL structure changes.
Ask about a Next.js migration
We have migrated Concrete5, PHP and WordPress sites to Next.js with rankings intact.