Migrar de WordPress para Next.js: guia passo a passo 2026
Migrar um site WordPress para Next.js segue 7 passos: auditoria do conteúdo existente, exportação via WP REST API ou plugin, escolha da arquitetura Next.js (app router + static export), redesign de UI, configuração das 301 para preservar o SEO, validação no Search Console, deploy progressivo. Uma migração bem feita mantém o ranking e divide o TTFB por 10. Sites OptionWeb: 4-8 semanas conforme o volume.
O WordPress ainda alimenta 43% da web mundial em 2026, mas os seus limites aparecem rapidamente: desempenho medíocre out-of-the-box (TTFB 600-1500ms típico), grande superfície de ataque (43% dos hacks web visam WordPress segundo o Sucuri 2024), dependência de plugins, custos ocultos em atualizações. Para muitas PME que acompanhamos na OptionWeb, a pergunta já não é 'devemos migrar?', mas 'como migrar sem partir o SEO?'. Eis o playbook completo aplicado em mais de 30 migrações.
1. Porquê migrar (e quando não migrar)
Migrar faz sentido em 4 casos: desempenho crítico para o negócio (e-commerce, lead gen agressivo), redesign maior já previsto, equipa técnica que quer sair do legacy plugin hell, ou necessidade de escalar internacionalmente (i18n nativo do Next.js bate WPML/Polylang).
Não migrar se: equipa editorial não-técnica sem alternativa CMS, orçamento < 10 000 €, redesign apenas para 'ser moderno' (verdadeira razão invisível), ou site com >100 plugins críticos sem equivalente Next.js.
2. Auditoria prévia do site WordPress
A auditoria é o passo mais negligenciado e mais crítico. Saltar esta fase = perda garantida de SEO e bugs em produção.
Ferramentas para uma auditoria completa:
- Screaming Frog SEO Spider — Crawl de todas as URLs (gratuito até 500 URLs, 159 £/ano acima). Exportação CSV de URLs, status codes, meta tags, H1, links internos.
- Google Search Console — Exportação das 1000 queries mais performantes + landing pages. Identifica as URLs que devem ser obrigatoriamente preservadas.
- Wayback Machine — Snapshot histórico do site como referência de design e conteúdo.
- WordPress phpMyAdmin — Inventário de custom post types, meta fields, taxonomias, comentários.
- Google Analytics 4 — Top 50 páginas por sessões, comportamento de utilizador, taxa de rejeição. Estas páginas têm de funcionar obrigatoriamente após a migração.
Entregáveis da auditoria: tabela Excel com todas as URLs (antigas + futuras), lista de plugins críticos com alternativas Next.js, inventário de mídias (tamanho total, formatos), lista de integrações externas (pagamento, CRM, mailing, chat), maquete da nova estrutura de URLs.
3. Exportação do conteúdo
Três métodos consoante o volume e a complexidade:
| Método | Quando usar | Limites |
|---|---|---|
| WP REST API (/wp-json) | Site com API aberta, dev técnico | Autenticação, paginação, mídias separadas |
| Plugin WP All Export | Volume importante, estrutura custom | 59-99 €, curva de aprendizagem |
| Exportação XML nativa WP | Site pequeno, conteúdo standard | Sem mídias, estrutura rígida |
| Scrape via Puppeteer | Site cujo admin já não tens | Lento, frágil, legalidade duvidosa |
Na OptionWeb combinamos WP REST API (conteúdo estruturado) + um script Node.js para download paralelo das mídias. Os artigos são convertidos em MDX ou JSON consoante a arquitetura de destino. Conta 1-2 dias para 500 artigos.
import fs from 'node:fs/promises';
import path from 'node:path';
const WP_API = 'https://votre-site.com/wp-json/wp/v2';
async function fetchAllPosts() {
const allPosts = [];
let page = 1;
while (true) {
const res = await fetch(`${WP_API}/posts?per_page=100&page=${page}&_embed`);
if (!res.ok) break;
const posts = await res.json();
if (posts.length === 0) break;
allPosts.push(...posts);
page++;
}
return allPosts;
}
const posts = await fetchAllPosts();
await fs.writeFile('content/posts.json', JSON.stringify(posts, null, 2));4. Arquitetura Next.js de destino
Recomendação 2026 para migração WordPress → Next.js: App Router + static export. Vantagens: deploy em qualquer servidor (sem Node.js), TTFB em milissegundos, imune às falhas WordPress, escalabilidade infinita.
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'export',
images: { unoptimized: true },
trailingSlash: true,
i18n: undefined, // gérer via app/[lang]/ pour static export
};
export default nextConfig;Estrutura de pastas recomendada:
- app/[lang]/ — Rotas multilíngues, page.tsx, [slug]/page.tsx, blog/page.tsx, blog/[slug]/page.tsx
- content/ — JSON ou MDX do conteúdo migrado, com schema Zod para validação no build
- components/ — Componentes React (substituem blocos Gutenberg)
- public/ — Mídias migradas de wp-content/uploads/
- lib/ — Utilitários (markdown para React, mapa hreflang, etc.)
5. Redesign UI e componentes
Erro nº 1: tentar clonar o tema WordPress pixel-perfect. É demorado, aborrecido e perde-se a oportunidade.
Abordagem recomendada: partir dos wireframes de cada tipo de página (home, página de serviço, artigo de blog, contacto, etc.), redesenhar com componentes Tailwind ou design system próprio (shadcn/ui, Radix Themes), adicionar animações modernas (Framer Motion), passar a mobile-first.
6. Redirecionamentos 301 (preservar o SEO)
O ponto mais crítico de qualquer migração. Uma única URL importante mal redirecionada = perda de posições no Google. Procedimento rigoroso:
- Listar todas as URLs WordPress (Screaming Frog ou Google Analytics)
- Ordenar por tráfego orgânico nos últimos 12 meses (foco no top 80% do tráfego)
- Mapear cada URL antiga para a nova URL Next.js
- Configurar as 301 em .htaccess (Apache) ou rewrites Next.js + Cloudflare
- Testar cada mapeamento com curl -I ou Screaming Frog em modo redirect-check
- Submeter o novo sitemap ao Search Console no dia do go-live
- Monitorizar os 404 no Search Console durante 4-6 semanas, adicionar redirecionamentos em falta
RewriteEngine On
# Redirections 301 anciennes URLs WordPress
Redirect 301 /?p=123 /fr/article-titre-canonique/
Redirect 301 /category/seo /fr/blog/?cat=seo
Redirect 301 /author/admin /fr/equipe/
# Pattern WordPress permalinks date-based
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+)/?$ /fr/blog/$4/ [R=301,L]7. Deploy e validação
Plano de deploy tipo:
| Fase | Duração | Ação |
|---|---|---|
| Pré-deploy | D-7 | Site Next.js completo em staging, auditoria SEO, testes Lighthouse, validação cliente |
| Snapshot WordPress | D-1 | Backup completo WP (BD + ficheiros), guardado 3 meses |
| Troca de DNS | D0 meia-noite | TTL 300s durante 24h, observação da propagação |
| Submissão de sitemap | D0+2h | Sitemap.xml submetido ao GSC + Bing Webmaster Tools |
| Monitorização intensiva | D0 a D+7 | Erros 404, Search Console, tráfego GA4, alertas Sentry/Datadog |
| Ajustes | D+7 a D+30 | Redirecionamentos em falta, otimizações CWV |
| Validação final | D+30 a D+60 | Indexação completa verificada, ranking comparado pré/pós |
Ganhos medidos após a migração
Métricas típicas observadas em mais de 30 migrações OptionWeb (sites PME 50-500 páginas):
- TTFB — WordPress 600-1500ms → Next.js static 30-80ms (dividido por 10)
- Lighthouse Performance — WordPress 45-65 → Next.js 95-100 em mobile
- Lighthouse SEO — WordPress 85 (frequentemente) → Next.js 100/100 sistematicamente
- Custos de alojamento — WordPress partilhado 15 €/mês → static export em CDN 5-10 €/mês (Cloudflare Pages, Vercel free, Netlify free)
- Falhas de segurança — Superfície de ataque dividida por ~50 (sem admin WP, sem BD, sem execução PHP)
- Tráfego orgânico — +10 a +30% em 3-6 meses graças aos ganhos CWV (sinais de ranking Google)
Read next
Next.js vs WordPress em 2026: o que escolher para uma PME belga?
Comparação honesta Next.js vs WordPress para PME: custos reais, desempenho, SEO, manutenção, segurança, flexibilidade. Quando escolher um ou outro conforme seu perfil.
Next.js static export e Core Web Vitals: o playbook 2026
Todas as otimizações aplicadas em sites Next.js static export para atingir 95+ PageSpeed mobile: estratégia de fontes, CSS, LCP, INP, CLS, armadilhas Framer Motion, hosting.
SEO técnico de um site estático Next.js: checklist completa 2026
Tudo o que configurar tecnicamente para um site Next.js em static export atingir 100/100 em SEO: metadata, JSON-LD, sitemap, hreflang, robots, Speakable, schemas avançados.
