Live · status OK
Back to blog
Desenvolvimento14 min

Migrar de WordPress para Next.js: guia passo a passo 2026

TL;DR

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.

Julien Daniel
ByJulien Daniel
Founder & CTO, OptionWeb
Share
Diagrama de migração WordPress para Next.js com fluxo de conteúdo e redirecionamentos

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 SpiderCrawl 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 ConsoleExportação das 1000 queries mais performantes + landing pages. Identifica as URLs que devem ser obrigatoriamente preservadas.
  • Wayback MachineSnapshot histórico do site como referência de design e conteúdo.
  • WordPress phpMyAdminInventário de custom post types, meta fields, taxonomias, comentários.
  • Google Analytics 4Top 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étodoQuando usarLimites
WP REST API (/wp-json)Site com API aberta, dev técnicoAutenticação, paginação, mídias separadas
Plugin WP All ExportVolume importante, estrutura custom59-99 €, curva de aprendizagem
Exportação XML nativa WPSite pequeno, conteúdo standardSem mídias, estrutura rígida
Scrape via PuppeteerSite cujo admin já não tensLento, 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.

scripts/export-wp.tsts
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.

next.config.mjsts
/** @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:

  1. Listar todas as URLs WordPress (Screaming Frog ou Google Analytics)
  2. Ordenar por tráfego orgânico nos últimos 12 meses (foco no top 80% do tráfego)
  3. Mapear cada URL antiga para a nova URL Next.js
  4. Configurar as 301 em .htaccess (Apache) ou rewrites Next.js + Cloudflare
  5. Testar cada mapeamento com curl -I ou Screaming Frog em modo redirect-check
  6. Submeter o novo sitemap ao Search Console no dia do go-live
  7. Monitorizar os 404 no Search Console durante 4-6 semanas, adicionar redirecionamentos em falta
.htaccessapache
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:

FaseDuraçãoAção
Pré-deployD-7Site Next.js completo em staging, auditoria SEO, testes Lighthouse, validação cliente
Snapshot WordPressD-1Backup completo WP (BD + ficheiros), guardado 3 meses
Troca de DNSD0 meia-noiteTTL 300s durante 24h, observação da propagação
Submissão de sitemapD0+2hSitemap.xml submetido ao GSC + Bing Webmaster Tools
Monitorização intensivaD0 a D+7Erros 404, Search Console, tráfego GA4, alertas Sentry/Datadog
AjustesD+7 a D+30Redirecionamentos em falta, otimizações CWV
Validação finalD+30 a D+60Indexaçã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):

  • TTFBWordPress 600-1500ms → Next.js static 30-80ms (dividido por 10)
  • Lighthouse PerformanceWordPress 45-65 → Next.js 95-100 em mobile
  • Lighthouse SEOWordPress 85 (frequentemente) → Next.js 100/100 sistematicamente
  • Custos de alojamentoWordPress partilhado 15 €/mês → static export em CDN 5-10 €/mês (Cloudflare Pages, Vercel free, Netlify free)
  • Falhas de segurançaSuperfí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)
Tags#nextjs#wordpress#migracao#static-export#seo#performance