Migre do WordPress para PHP personalizado sem perder SEO – O guia completo de 7 passos
Tirar sites do WordPress sem perder posições é o que faço para viver, e há um método repetível por trás disso. Uma base de código PHP personalizada e limpa pode reduzir o TTFB em 70%, eliminar uma classe inteira de vulnerabilidades de plugins e lhe dar 100% de propriedade — mas erre nos redirecionamentos ou nos metadados e verá suas posições afundarem. Ao longo de mais de 30 migrações do WordPress, refinei a sequência exata que preserva, e geralmente melhora, o SEO. Ela se baseia nas próprias diretrizes do Google para mudança de sites, não em suposições. Aqui estão os sete passos, na ordem que realmente importa.
Por que migrar do WordPress para PHP personalizado?
- Desempenho lento – Mesmo com cache, o WordPress carrega mais de 847KB de JavaScript.
- Vulnerabilidades de plugins – 96% dos sites WordPress hackeados são devidos a plugins desatualizados.
- Taxas mensais – Plugins premium, hospedagem otimizada para WP e manutenção se acumulam.
- Dependência – Você não possui o código; você possui um banco de dados de posts e um tema.
PHP personalizado oferece controle total, tempos de carga abaixo de um segundo e zero taxas mensais de plataforma. Mas a migração deve ser impecável.
Antes de começar: A auditoria de pré‑migração
- Exportar todas as URLs – Use Screaming Frog (gratuito até 500 URLs) ou
wget:wget --spider --force-html -r -l 3 https://seudominio.com 2>&1 | grep '^--' | awk '{ print $3 }' > urls.txt - Registrar rankings – Exporte as 100 principais palavras-chave do Google Search Console (relatório de desempenho).
- Salvar metadados – O Screaming Frog pode exportar tags de título, meta descrições e H1 como CSV.
- Documentar backlinks – Use Search Console → Links → Links externos, ou Ahrefs/SEMrush se disponível.
Passo 1: Rastrear seu site antigo (Análise profunda com Screaming Frog)
Baixe o Screaming Frog SEO Spider (gratuito para até 500 URLs). Configure-o para extrair:
- Todas as URLs internas.
- Tags de título e meta descrições.
- Tags canônicas.
- Cabeçalhos H1.
- Códigos de resposta (200, 301, 404).
Exporte como CSV. Este arquivo se torna seu mapa de migração. Você o usará para verificar se cada página existente tem um destino.
Passo 2: Mapear URLs para a nova estrutura – Mantenha idêntico se possível
A abordagem mais segura: manter exatamente os mesmos caminhos de URL. Se suas URLs do WordPress são limpas (ex. /servicos/web-design), você pode reutilizá-las. Mude a estrutura apenas se:
- Suas URLs do WordPress incluem
/2023/01/nome-do-post/(datas) – remova as datas. - Você tem conteúdo duplicado de arquivos
/categoria/e/tag/– elimine esses.
Exemplo de mapeamento para um blog:
/2023/01/por-que-php-personalizado → /blog/por-que-php-personalizado
/categoria/desempenho → /blog/categoria/desempenho (opcional, você pode eliminar páginas de categoria)
/tag/seo → (eliminar – páginas de tag muitas vezes diluem a autoridade)
Crie um CSV com duas colunas: old_url, new_url. Para páginas que você não está recriando (ex. arquivos de tag), redirecione para a página relevante mais próxima.
Passo 3: Exportar conteúdo do WordPress
Método A – WP REST API (mais fácil para sites pequenos)
<code><?php<br>$posts = json_decode(file_get_contents('https://seudominio.com/wp-json/wp/v2/posts?per_page=100&page=1'));<br>foreach ($posts as $post) {<br> $data = [<br> 'title' => $post->title->rendered,<br> 'slug' => $post->slug,<br> 'content' => $post->content->rendered,<br> 'excerpt' => $post->excerpt->rendered,<br> 'date' => $post->date,<br> 'meta' => [<br> 'title' => get_post_meta($post->id, '_yoast_wpseo_title', true),<br> 'description' => get_post_meta($post->id, '_yoast_wpseo_metadesc', true)<br> ]<br> ];<br> // Inserir na tabela MySQL personalizada<br>}<br>?></code>
Método B – WP CLI (mais rápido para sites grandes)
<code>wp export --dir=/tmp --post_type=post,page --with_attachments</code>
Método C – MySQL direto (para controle total)
<code>SELECT ID, post_title, post_name, post_content, post_date FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page');</code>
Em seguida, busque os metadados Yoast SEO de wp_postmeta onde meta_key IN ('_yoast_wpseo_title','_yoast_wpseo_metadesc').
Passo 4: Reconstruir seu site PHP personalizado com os mesmos metadados
- A mesma tag
<title>exata (do Yoast ou All in One SEO). - A mesma
<meta name="description">. - O mesmo
<h1>(embora uma mudança pequena geralmente seja aceitável).
Armazene os metadados em seu banco de dados (ex. uma tabela page_meta) ou em um array PHP. Para sites dinâmicos, você pode até manter o banco de dados do WordPress como fonte somente leitura durante a transição – mas isso adiciona complexidade.
Passo 5: Implementar redirecionamentos 301 (O passo mais crítico)
Um redirecionamento 301 diz ao Google: “Esta página foi movida permanentemente.” O Google transfere quase 100% do poder de rankeamento da página antiga para a nova URL.
Para Apache (.htaccess) – Melhor para menos de 200 redirecionamentos
<code>Redirect 301 /url-antiga /url-nova<br>Redirect 301 /2023/01/por-que-php-personalizado /blog/por-que-php-personalizado</code>
Para milhares de redirecionamentos – Use um mapa PHP (evita inflar .htaccess)
<code><?php<br>$redirects = json_decode(file_get_contents(__DIR__ . '/redirects.json'), true);<br>$request = $_SERVER['REQUEST_URI'];<br>if (isset($redirects[$request])) {<br> header('HTTP/1.1 301 Moved Permanently');<br> header('Location: ' . $redirects[$request]);<br> exit;<br>}<br>?></code>
Para Nginx – Use a diretiva map
<code>map $request_uri $new_uri {<br> /url-antiga /url-nova;<br> /2023/01/por-que-php-personalizado /blog/por-que-php-personalizado;<br>}<br>server {<br> if ($new_uri) {<br> return 301 $new_uri;<br> }<br>}</code>
Dica profissional: Nunca encadeie redirecionamentos (A → B → C). Cada salto perde uma pequena quantidade de valor do link. Sempre redirecione diretamente A → C.
Passo 6: Gerar um sitemap XML dinâmico
Não use um sitemap estático – ele ficará desatualizado. Em vez disso, crie sitemap.php que gera XML dinamicamente:
<code><?php<br>header('Content-Type: application/xml');<br>echo '<?xml version="1.0" encoding="UTF-8"?>';<br>echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';<br>$pages = getAllPageUrlsFromDatabase(); // sua função personalizada<br>foreach ($pages as $url) {<br> echo '<url><loc>' . htmlspecialchars($url) . '</loc><lastmod>' . date('Y-m-d') . '</lastmod></url>';<br>}<br>echo '</urlset>';<br>?></code>
Em seguida, adicione uma regra de reescrita no .htaccess:
<code>RewriteRule ^sitemap\.xml$ sitemap.php [L]</code>
Envie o sitemap para o Google Search Console imediatamente após o lançamento.
Passo 7: Lançar e monitorar por 30 dias
- Verificar todos os redirecionamentos – Use um crawler (Screaming Frog) para visitar cada URL antiga e verificar se retorna um 301 para a nova URL.
- Monitorar diariamente o relatório “Cobertura” do Google Search Console – Procure erros 404. Para cada 404, adicione um redirecionamento ausente ou corrija o link quebrado.
- Enviar o novo sitemap – No Search Console, vá em Sitemaps → Adicionar um novo sitemap (
sitemap.xml). - Observar as Core Web Vitals – Dentro de uma semana, você deve ver melhora. Caso contrário, depure imagens, CSS ou a configuração do servidor.
- Comparar os rankings após 4 semanas – Exporte os dados do GSC novamente. A maioria dos clientes vê nenhuma mudança ou uma leve melhora devido a tempos de carregamento mais rápidos.
Armadilhas comuns e como evitá-las
Armadilha 1: Mudar URLs sem redirecionamentos
Sintoma: Erros 404 no Search Console.
Solução: Implemente o mapa PHP de redirecionamentos antes de lançar.
Armadilha 2: Esquecer de migrar as meta descrições
Sintoma: O Google reescreve seu snippet com texto aleatório.
Solução: Use a mesma exportação de metadados do Passo 1.
Armadilha 3: Perder imagens (arquivos de mídia)
Sintoma: Imagens quebradas no site personalizado.
Solução: Copie toda a pasta /wp-content/uploads/ para o diretório público do seu novo site. Configure um redirecionamento de /wp-content/uploads/... para /uploads/... se você moveu a pasta.
Armadilha 4: Avisos de conteúdo misto (imagens HTTP)
Sintoma: O navegador mostra “conteúdo não seguro” em HTTPS.
Solução: Pesquise e substitua URLs antigas de imagens em seu banco de dados de http://siteantigo.com para https://novo-site.com.
Caso de estudo real: Migração de um site empresarial de 500 páginas
Uma rede de franquias nacional tinha um site WordPress com mais de 500 páginas de localizações, cada uma com conteúdo único. O tempo de carregamento era de 2,8s (mobile), e eles pagavam $300/mês por hospedagem e plugins.
Processo:
- Exportação de todos os dados de localização usando WP CLI.
- Reconstrução de um site PHP personalizado com um único template PHP que puxava dados de localização do MySQL.
- Manutenção da estrutura de URL idêntica (
/localizacoes/cidade-estado/). - Uso de um mapa PHP para redirecionamentos 301 (embora as URLs não tenham mudado, eles mantiveram o mapa por segurança).
Resultados após 60 dias:
- TTFB: 800ms → 180ms.
- Desempenho Lighthouse: 58 → 96.
- Custo de hospedagem: $300/mês → $30/mês (VPS padrão).
- Rankings: Melhoraram para 87% das páginas de localização (devido à velocidade).
- Tráfego orgânico: +23% em 3 meses.
O cliente agora possui o código completamente, não paga taxas de plugins e pode adicionar novas localizações instantaneamente através de um simples upload CSV.
Você deve migrar? Um quadro de decisão
Migre para PHP personalizado se:
- Seu site é principalmente estático ou tem conteúdo previsível (blog + serviços).
- Você está cansado da manutenção de plugins e atualizações de segurança.
- Você quer 100% de propriedade do código e nenhuma taxa mensal de plataforma.
Continue no WordPress se:
- Você precisa de e-commerce avançado (embora o PHP personalizado possa lidar com isso).
- Você depende muito de extensões do WooCommerce.
- Sua equipe não é técnica e está acostumada com o admin do WP.
Pronto para fazer a mudança?
Migrei mais de 30 sites WordPress para PHP personalizado – de pequenos blogs a lojas de e-commerce com 2.000 páginas. Cuido de tudo: exportação de conteúdo, mapeamento de URLs, redirecionamentos 301, preservação de metadados e monitoramento pós-lançamento.
Seu site PHP personalizado carregará em menos de 0,8s, alcançará 100 no Lighthouse e você nunca mais pagará taxas de plugins.
Todos os dados são de migrações reais de clientes realizadas pela BuiltToWinWeb. Os resultados individuais podem variar com base na complexidade e conteúdo do site.