Migre do WordPress para PHP personalizado sem perder SEO – O guia completo de 7 passos
Mudar do WordPress para uma base de código PHP personalizado pode reduzir o TTFB em 70%, eliminar vulnerabilidades de plugins e dar a você 100% de propriedade. Mas se você lidar mal com redirecionamentos e metadados, vai prejudicar seus rankings. Já migrei mais de 30 sites WordPress – aqui está o processo exato que preserva (e muitas vezes melhora) o SEO.
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.