DevelopmentMay 25, 2026·18 min read

From WordPress to Next.js: migrating without losing SEO (real case with numbers)

Client migrated from WordPress to Next.js: stable organic traffic, LCP from 4.2s to 0.9s, +35% conversion. 301 redirect plan, schema, performance, what to break and what to never touch.

SM
SprintMarkt
Web Development Team

Legal-tech client with 6 years on WordPress, 340 indexed URLs, decent domain authority (DA 38) and top-10 positions for 28 commercial keywords. Their problem: the site loaded in 4.2s on mobile, the WordPress dashboard was a battlefield of conflicting plugins, and every WooCommerce update broke something. They wanted to migrate to Next.js but were terrified of "losing all the SEO I've built for 6 years".

Result at 8 weeks post-go-live: stable organic traffic (-2% first month, +14% second, +27% third), 0 keywords lost from top 10, LCP from 4.2s to 0.9s on mobile, contact form conversion +35%, hosting bill from €89/mo (shared server + Cloudflare) to €18/mo (Vercel hobby + Supabase). The secret wasn't speed: it was that we DIDN'T break a single URL, schema or canonical tag.

Decision matrix: should you migrate? Migrate IF: (1) your mobile LCP is over 3s and you've exhausted cache plugins. (2) your dev team suffers with every WP/plugin update. (3) you need features WordPress does badly: real-time dashboards, AI/Claude integration, multi-tenant, serious i18n. (4) mobile traffic is growing and Core Web Vitals slow you down. DON'T migrate if: (a) your CMS is operated by marketing without a technical team — you lose visual editorial freedom. (b) you use WooCommerce with 500+ products and very specific plugins. (c) you have editorial content (large blog with non-technical writers) — first look at headless options like Sanity/Payload before going fully static.

The 301 redirect plan (most underrated step): download full sitemap.xml from WordPress + Search Console URLs (the ones receiving clicks). Cross both in a CSV. For each legacy URL write the new one. Four cases: (1) same URL → no redirect needed. (2) URL changes slightly (e.g. /sobre-nosotros//about/) → direct 301. (3) URL disappears without a successor → 301 to parent section, NEVER to home (Google flags it as soft 404). (4) URL disappears without context → 410 Gone, not 404. Implement redirects in next.config.js or, if >100, in a Cloudflare Worker rule that runs before Next.js.

Replicating existing schema.org — what 80% forget: WordPress with Yoast or Rank Math automatically emits Organization, BreadcrumbList, BlogPosting, FAQPage, Person. Your Next.js must emit EXACTLY the same schemas, with the same @id, same URL and same structure. Run Schema.org Validator on 20 representative URLs BEFORE launch and THE DAY AFTER. If a migration loses BlogPosting.dateModified or Organization.@id, Google starts re-evaluating the entire site and you lose 30% traffic for 4-6 weeks.

Need help with your project?

Calculate your budget in 2 minutes with our interactive tool.

Calculate budget

Performance: WordPress vs Next.js — the real benchmark from this project: WordPress home with 12 active plugins and WP Rocket cache → LCP 4.2s, CLS 0.18, TTI 6.1s, weight 2.4MB. Next.js home with SSG + ISR + next/image → LCP 0.9s, CLS 0.02, TTI 1.4s, weight 380KB. Those are real numbers measured with PageSpeed in production. The improvement comes from 3 places: (1) WebP/AVIF images generated at build vs WordPress serving 1MB PNGs. (2) JavaScript hydrating per component vs WordPress loading jQuery + 8 plugins on every page. (3) Static HTML cached at CDN vs WordPress generating HTML on-demand per visit.

The 5 things that ALWAYS break (saving you 3 weeks of panic): (1) Images with WP Smush's custom .webp extension break next/image — fix: build-time pipeline with sharp that regenerates EVERYTHING from originals. (2) Shortcodes embedded in posts (Elementor blocks, CF7 forms) — fix: identify the 8-10 most common patterns and create equivalent React components. (3) WooCommerce sessions: if you migrate the catalog to Shopify/Stripe, user sessions are invalidated — communicate 7 days ahead to customers and prepare cart recovery. (4) Schema markup with legacy @id — replicate IDENTICAL for the first 90 days. (5) Hreflang in multi-language sites — Next.js has quirks with i18n in App Router; use explicit <link rel='alternate' hreflang> in each page's metadata.

Real project timeline (6 weeks): W1 — complete audit: sitemap, schema, performance, plugins, external integrations, critical dependencies. Migration CSV approved by client. W2 — Next.js skeleton development: layout, header, footer, typography system, design tokens, first 5 templates. W3 — content migration: systematic scraping of existing WP, conversion to Next.js structure (MDX or JSON), image regeneration in sharp pipeline. W4 — replicate schemas, redirects, integrations (Google Analytics, Tag Manager, forms, CRM). W5 — full staging with temporary domain, exhaustive QA (clients test 100 random URLs), patch final bugs. W6 — DNS swap during low-traffic window (typically Sunday early morning), 72h monitoring, fine-tuning. Legacy WordPress remains 30 days in pre-prod as emergency rollback.

Indicative cost of a real 2026 migration (SprintMarkt pricing): simple corporate site (15-30 URLs, no e-commerce, no multi-language): €4,500-6,500. Site with large blog (100-300 URLs) + multi-language: €7,000-11,000. Corporate site + WooCommerce with 200+ products to Stripe/Lemon Squeezy: €12,000-18,000. Site with client dashboard / custom management panel: €16,000-25,000. All quotes include redirect plan, schema replication, image regeneration, staging testing with 5 client rounds and 60-day post-go-live monitoring.

Frequently Asked Questions

Direct answers to the most common questions on this topic.

What if my site has WooCommerce with 500+ products? Is it still worth it?

Depends on target stack. Migrating from WooCommerce to Shopify is reasonable if your store is standard (physical products, size/color, common payments). Migrating to Next.js + Stripe/Lemon Squeezy + Sanity is better if you sell something non-standard (complex subscriptions, marketplaces, configurators). For stores with 500+ products and stable operations, it usually pays to stay on WooCommerce + optimize hosting + aggressive CDN — migration ROI may be lower than cost.

Can the client keep publishing content without coding skills?

Yes, with a headless CMS. Options we use at SprintMarkt: (1) Sanity Studio — Notion-like visual interface, free up to 3 users + 10K docs, ideal for blogs and catalogs. (2) Payload CMS — open source, self-hosted, perfect if you want full control. (3) Contentful — more expensive but with granular permissions for large teams. (4) Notion as CMS via API — "low-tech" solution when client already uses Notion. The choice depends on editorial team size and content type.

How long does Google take to recover my rankings after migrating?

If you do it right (correct 301 redirects, replicated schema, preserved URLs, new sitemap submitted), you don't lose positions — they may even improve due to Core Web Vitals gains. If you break something, recovery takes 4-12 weeks depending on severity. Metrics to monitor during the first 60 days: Search Console coverage (404 errors, soft 404), Core Web Vitals, impressions per URL, average position. Any significant deviation → immediate review.

And essential plugins like forms, captcha, analytics, SEO? How are they replaced?

Typical mapping: Yoast/Rank Math → Next.js metadata API + manual JsonLd. CF7/WPForms → React Hook Form + own server-side endpoint (more control and privacy). reCAPTCHA → Cloudflare Turnstile (free, better privacy). Google Analytics → next/third-parties + GA4 (with consent banner). Smush/ShortPixel → sharp + next/image (at build). WP Rocket → not needed, Next.js caches by default. Yoast Local SEO → manual schema.org LocalBusiness + Google Business Profile. Mailchimp for WP → direct server-side integration with Mailchimp/Brevo API.

Is it worth migrating just for speed if my current site loads in 3s?

Probably NOT. For 3s on mobile there are €0-500 optimizations that get you to 1.5-2s without changing stack: well-configured WP Rocket, mass image conversion to WebP, removal of inactive plugins, Cloudflare Free as CDN + cache rules. Migrate when you're persistently above 4s AND have another structural reason (feature WordPress can't deliver, dev team friction, complex integrations). Speed alone rarely justifies migration cost.

How do you handle production while migrating?

Three options by safety order: (1) Recommended — staging.domain.com with HTTP basic auth for 4-6 weeks, all QA there, controlled DNS swap on Sunday early morning. (2) Sub-paths — /v2/ on production with noindex until launch, then path rewrite. (3) New domain (next.domain.com) until validation, then canonical and 301. We never migrate to direct production — SEO risk doesn't compensate the 2-3 days "saved".
#Next.js#WordPress#Migración#SEO técnico#Core Web Vitals#Headless CMS#React
Share:

Have a project in mind?

Tell us your idea and we'll help make it happen. No-obligation quote.

Presupuesto sin compromiso

Have a project in mind?en mente?

Tell us your idea and we'll help you make it happen. No-obligation quote.

Respuesta en 24h
100% confidencial
Sin compromiso