Três anos atrás, um cliente me ligou numa quinta-feira à tarde em pânico absoluto. Ele havia passado uma migração de Drupal para WordPress para uma agência de desenvolvimento barata, o site foi ao ar numa sexta-feira e na segunda-feira o tráfego orgânico dele tinha caído 67%. Desaparecido. Seis anos de equity em SEO, simplesmente... evaporado. Sem redirecionamentos. Milhares de URLs quebradas. Orçamento de crawl do Google incinerado.Drupal-to-WordPress migration to a cheap dev shop, the site went live on a Friday, and by Monday their organic traffic had dropped 67%. Gone. Six years of SEO equity, just... evaporated. No redirects. Thousands of broken URLs. Google's crawl budget torched.
Aprendizado principal: migrações de Drupal para WordPress falham no mapeamento de URLs e tradução de taxonomia, não na mudança de CMS; entregue um mapa de redirecionamento completo e transporte de metadados para preservar rankings.Drupal to WordPress migrations fail on URL mapping and taxonomy translation, not the CMS swap; ship a complete redirect map and transport metadata to keep rankings.
Já reconstruí esse tipo de desastre mais vezes do que gosto de contar. Depois de mais de 12.000 migrações na Seahawk Media, posso dizer com confiança: a mudança técnica de Drupal para WordPress é na verdade a parte fácil. A preservação de SEO é onde tudo dá errado -- e onde absolutamente não precisa dar.Seahawk Media, I can tell you with some confidence: the technical move from Drupal to WordPress is actually the easy part. The SEO preservation is where everything goes wrong -- and where it absolutely doesn't have to.
Este é o manual que sigo. Todas as vezes.
---
Por Que Migrações de Drupal para WordPress São um Campo Minado de SEO
Drupal e WordPress geram URLs de forma diferente. O sistema de path padrão do Drupal, combinado com módulos como Pathauto, geralmente produz estruturas de URL que não têm nenhuma sobreposição com o que WordPress gera nativamente. Um nó Drupal em /content/our-services/web-design vira /our-services/web-design ou até /web-design no WordPress, dependendo de como você configura os permalinks. São URLs diferentes. Google as vê como páginas diferentes. Sem um redirecionamento, a antiga está morta./content/our-services/web-design becomes/our-services/web-design or even/web-design on WordPress, depending on how you set permalinks. Those are different URLs. Google sees them as different pages. Without a redirect, the old one is dead.
E não é só URLs. O sistema de taxonomia do Drupal mapeia para categorias e tags do WordPress -- mas não perfeitamente. Tipos de conteúdo customizados no Drupal viram Custom Post Types no WordPress, e se você não construir esses CPTs antes de migrar, seu conteúdo cai no bucket errado completamente. Já vi um site de notícias alimentado por Drupal onde 800 nós "article" foram todos importados como Posts padrão do WordPress, sobrescrevendo a estrutura de arquivo customizada em que sua linkagem interna dependia.
Aqui está o que a maioria dos devs ignora: toda decisão estrutural que você toma no WordPress antes da migração afeta diretamente quais redirecionamentos você vai precisar depois. Acerte a arquitetura primeiro. Redirecionamentos são um patch, não um plano.every structural decision you make in WordPress before the migration directly affects which redirects you'll need after it. Get the architecture right first. Redirects are a patch, not a plan.
---
Passo 1: Auditoria Pré-Migração -- Saiba o Que Você Está Movendo Antes de Mover
Não mexa na instalação Drupal até ter um crawl completo do site ao vivo. Eu uso Screaming Frog configurado para fazer crawl de até 500.000 URLs (a versão paga). Exporte tudo: URLs, status codes, title tags, meta descriptions, H1s, canonical tags, links internos recebidos, contagens de palavras.Screaming Frog set to crawl up to 500,000 URLs (the paid version). Export everything: URLs, status codes, title tags, meta descriptions, H1s, canonical tags, inbound internal links, word counts.
Também puxe seus dados do Google Search Console. Filtre por cliques dos últimos 16 meses (não 3, não 6-16, porque você quer pegar conteúdo sazonal). Exporte toda URL que recebeu pelo menos um clique. Estas são suas URLs protegidas. Perder rankings em qualquer uma delas e o cliente vai notar.protected URLs. Lose rankings on any of these and the client will notice.
O que estou especificamente procurando:
- Conteúdo duplicado já existente no site Drupal (corrija antes de migrar, não depois) already existing on the Drupal site (fix it before migrating, not after)
- Páginas de conteúdo fino com menos de 200 palavras que não rankeiam para nada -- estas podem ser consolidadas ou deletadas em vez de migradas under 200 words that rank for nothing -- these can be consolidated or deleted rather than migrated
- Padrões de URL não-padrão como URLs /node/1234 que Drupal às vezes expõe mesmo quando Pathauto está ativo like
/node/1234URLs that Drupal sometimes exposes even when Pathauto is active - Páginas de arquivo de taxonomia que rankeiam -- caminhos /tags/, /category/, /topic/ que têm impressões reais no Search Console that rank --
/tags/,/category/,/topic/paths that have actual Search Console impressions
Este último pega as pessoas constantemente. Páginas de termo de taxonomia Drupal frequentemente rankeam para queries de cauda longa. Se você não recriar equivalentes de arquivos de taxonomia WordPress e redirecionar os paths antigos, você acabou de jogar fora tráfego passivo.and redirect the old paths, you've just thrown away passive traffic.
---
Passo 2: Mapeamento de URL -- A Planilha Que Ninguém Quer Construir
Entediante? Sim. Inegociável? Também sim.
Construa um mapa de URL no Google Sheets (ou Airtable se preferir, já usei os dois). Coluna A é toda URL Drupal. Coluna B é a URL WordPress correspondente para a qual ela será resolvida. Coluna C é um status: exact match, redirect needed, consolidate, ou delete.exact match,redirect needed,consolidate, or delete.
Para um site de 300 páginas, leva meio dia. Para um site de 8.000 páginas -- que Seahawk gerenciou para um cliente de educação superior em 2021 -- leva um time de três cerca de quatro dias de trabalho mais uma sexta-feira muito tediosa. Vale a pena sempre.
Algumas regras que sigo:
- Preserve slugs sempre que possível. Se Drupal tem /blog/how-to-fix-crawl-errors, faça WordPress usar o mesmo slug. Na maioria das vezes você consegue. As configurações de permalink em WordPress Configurações → Permalinks permitem que você combine qualquer padrão que Drupal estava usando.If Drupal has
/blog/how-to-fix-crawl-errors, make WordPress use the same slug. Most of the time you can. The permalink settings in WordPress Settings → Permalinks let you match whatever pattern Drupal was using. - Nunca redirecione para a homepage. Devs preguiçosos fazem isso. Mata link equity e confunde usuários. Toda URL antiga recebe um destino específico.Lazy devs do this. It kills link equity and confuses users. Every old URL gets a specific destination.
- Cuidado com URLs paginadas. Paginação no Drupal parece ?page=1. WordPress usa /page/2/. Mapeie estas ou deixe como 404s (o que geralmente é okay -- páginas paginadas raramente mantêm equity de link significativo, mas confirme no GSC primeiro).Drupal pagination looks like
?page=1. WordPress uses/page/2/. Map these or leave them as 404s (which is usually fine -- paginated pages rarely hold meaningful link equity, but confirm in GSC first). - Documente as query strings separadamente. Coisas como /search?keys=wordpress não precisam de redirecionamentos. /events?date=2023-06 talvez precise, dependendo de essas páginas estarem rankando.Things like
/search?keys=wordpressdon't need redirects./events?date=2023-06might, depending on whether those pages rank.
---
Etapa 3: Migração de Conteúdo -- FG Drupal para WordPress e O Que Realmente Acontece
O plugin FG Drupal to WordPress faz o trabalho pesado na maioria das migrações. Ele se conecta diretamente ao seu banco de dados Drupal, puxa nodes, usuários, termos de taxonomia e mídia. Para Drupal 7, funciona muito bem. Para Drupal 9/10, você precisa da versão premium, que custa cerca de €99 da última vez que verifiquei. Vale cada centavo comparado à migração manual.FG Drupal to WordPress plugin does the heavy lifting for most migrations. It connects directly to your Drupal database, pulls nodes, users, taxonomy terms, and media. For Drupal 7, it works brilliantly. For Drupal 9/10, you'll need the premium version, which is about €99 last time I checked. Worth every penny versus manual migration.
O que o plugin trata bem:
- Conteúdo do corpo do node (incluindo imagens incorporadas se você configurar o caminho de mídia corretamente)
- Termos de taxonomia mapeados para categorias/tags do WordPress
- Custom fields básicos se você estiver na tier premium
O que não funcionará e você precisará corrigir manualmente:
- Drupal Views -- são layouts/queries de página personalizados. Você vai reconstruir esses no WordPress usando plugins como WPGridBuilder ou apenas loops customizados de WP_Query -- these are custom page layouts/queries. You'll rebuild these in WordPress using plugins like WPGridBuilder or just custom WP_Query loops
- Webforms -- mapeie para Gravity Forms ou WPForms manualmente; a lógica não é transferida -- map these to Gravity Forms or WPForms manually; the logic doesn't transfer
- Grupos de campo complexos -- A Field API do Drupal suporta algumas estruturas de dados genuinamente estranhas. Você vai precisar exportar para CSV e importar via WP All Import -- Drupal's Field API supports some genuinely weird data structures. You'll need to export these to CSV and import via WP All Import
- Regiões de conteúdo em blocos -- O sistema de blocos do Drupal não é nada parecido com widgets/blocos FSE do WordPress. É uma decisão de design, não uma tarefa de migração -- Drupal's block system is nothing like WordPress widgets/FSE blocks. Design decision, not a migration task
Uma coisa que sempre faço após FG Drupal to WordPress terminar: executar uma contagem de linhas. Quantos nodes havia no Drupal? Quantas entradas de posts/CPT agora estão no WordPress? Elas devem corresponder (menos qualquer coisa que você deliberadamente excluiu). Uma discrepância de 3% em um site com 5.000 nodes é 150 páginas faltando. Vá encontrá-las.
---
Passo 4: Implementando Redirecionamentos Sem Destruir Seu Servidor
Uma vez que o mapa de URL está construído e o conteúdo está ativo no ambiente de staging do WordPress, é hora dos redirecionamentos. Duas ferramentas: o plugin Redirection para sites menores (menos de ~1.000 redirecionamentos) e regras .htaccess para qualquer coisa maior em Apache, ou blocos nginx.conf em Nginx.Redirection plugin for smaller sites (under ~1,000 redirects) and.htaccess rules for anything larger on Apache, or nginx.conf blocks on Nginx.
Por que a divisão? O plugin Redirection processa redirecionamentos via PHP, o que significa um hit no servidor para cada verificação de redirecionamento. Com 5.000 redirecionamentos e 50.000 pageviews diárias, isso é overhead real. Redirecionamentos em nível de servidor são uma ordem de magnitude mais rápidos.
Para migrações grandes, exporto o mapa de URL do Google Sheets, escrevo um script rápido para gerar os blocos RewriteRule e os coloco em .htaccess antes do go-live. Leva 20 minutos. Economiza horas debugando um site lento pós-lançamento.RewriteRule blocks, and drop them into.htaccess before go-live. Takes 20 minutes. Saves hours of debugging a sluggish site post-launch.
Uma coisa que as pessoas não pensam: cadeias de redirecionamento. Se o Drupal já tinha redirecionamentos em lugar (muitos sites Drupal maduros têm, via módulo Redirect), você precisa encontrá-los e colapsar a cadeia. A → B → C precisa se tornar A → C. A própria documentação do Google é bem clara de que cadeias desaceleram a transferência de PageRank, mesmo que não a eliminem.redirect chains. If Drupal already had redirects in place (many mature Drupal sites do, via the Redirect module), you need to find those and collapse the chain. A → B → C needs to become A → C.Google's own documentation is pretty clear that chains slow down PageRank transfer, even if they don't eliminate it.
---
Etapa 5: Pós-Lançamento -- A Janela de 72 Horas
Saia do ar numa terça ou quarta. Nunca sexta. Aprendi isso da forma difícil com um cliente em 2018 -- lançamos uma migração de 1.200 páginas numa sexta à tarde e descobrimos uma estrutura de permalink mal configurada às 6pm. Na segunda, o Google já tinha rastreado e indexado uma onda de URLs quebradas.
Aqui está o que monitoro nas primeiras 72 horas:
- Relatório de Cobertura do GSC -- fique atento a um pico de 404s. Alguns são esperados (caminhos antigos do sistema Drupal). Um pico nas suas páginas principais não é. -- watch for a spike in 404s. Some are expected (old Drupal system paths). A spike across your money pages is not.
- Re-rastreamento com Screaming Frog -- rastreie o site WordPress ativo na manhã seguinte ao lançamento. Compare a contagem de URLs com sua linha de base pré-migração. -- crawl the live WordPress site the morning after launch. Compare URL count to your pre-migration baseline.
- Verificações spot-check de redirecionamentos -- teste manualmente suas 20 URLs Drupal com maior tráfego do GSC. Cole-as num navegador. Elas chegam onde deveriam? -- manually test your 20 highest-traffic Drupal URLs from GSC. Paste them into a browser. Do they land where they should?
- Tags canônicos -- confirme que WordPress está exibindo a tag canônica correta em cada página. Yoast e Rank Math fazem isso automaticamente, mas verifique mesmo assim. -- confirm WordPress is outputting the right canonical on every page. Yoast and Rank Math both do this automatically, but check anyway.
- Envio do XML sitemap -- envie o novo sitemap no GSC imediatamente. Não espere Google encontrá-lo. -- submit the new sitemap in GSC immediately. Don't wait for Google to find it.
Uma coisa que faço e que a maioria das pessoas pula: envie também o antigo XML sitemap do Drupal no GSC após o lançamento, apontando para o domínio antigo ou subdomínio se você o manteve temporariamente. Isso diz exatamente ao Google quais URLs antigas rastrear, seguir os redirecionamentos e atualizar seu índice mais rápido.submit the old Drupal XML sitemap in GSC as well, after launch, pointing at the old domain or subdomain if you kept it up temporarily. This tells Google exactly which old URLs to crawl, follow the redirects, and update its index faster.
---
Etapa 6: A Verificação de Saúde SEO de 30 Dias
Uma migração não termina no lançamento. O índice leva tempo para atualizar. Aqui está o que observo aos 30 dias:
- Mudanças na posição de ranking -- use Ahrefs ou Semrush para comparar posições de palavras-chave 30 dias antes da migração versus 30 dias depois. Espere pequenas flutuações (5-10 posições) em alguns termos. Uma queda de 30+ posições em uma palavra-chave primária precisa de investigação. -- use Ahrefs or Semrush to compare keyword positions 30 days pre-migration vs. 30 days post. Expect minor fluctuation (5-10 positions) on some terms. A drop of 30+ positions on a primary keyword needs investigation.
- Alvo de backlinks -- se você tinha backlinks externos apontando para URLs específicas do Drupal, verifique que essas URLs estão redirecionando corretamente. O relatório Lost Backlinks do Ahrefs identifica isso. Alvo de backlink quebrado é equity de link que você está ativamente perdendo. -- if you had external backlinks pointing to specific Drupal URLs, check that those URLs are redirecting cleanly. Ahrefs' Lost Backlinks report surfaces this. Broken backlink targets are link equity you're actively haemorrhaging.
- Regressão de velocidade da página -- sites WordPress às vezes são mais lentos que sites Drupal bem otimizados. Execute uma auditoria Lighthouse nas suas 5 páginas mais importantes e compare com seu baseline pré-migração. -- WordPress sites are sometimes slower than well-tuned Drupal sites. Run a Lighthouse audit on your 5 most important pages and compare to your pre-migration baseline.
- Taxa de indexação -- quantas de suas URLs enviadas estão indexadas? Aos 30 dias, você quer pelo menos 80% de suas páginas de conteúdo principal indexadas. Qualquer coisa abaixo de 60% sugere um problema de rastreabilidade (verifique robots.txt e certifique-se de que você não bloqueou acidentalmente o Googlebot em WordPress Settings → Reading). -- how many of your submitted URLs are indexed? At 30 days, you want at least 80% of your main content pages indexed. Anything under 60% suggests a crawlability problem (check robots.txt and make sure you didn't accidentally block Googlebot in WordPress Settings → Reading).
Seahawk teve um cliente fintech no ano passado onde a verificação de 30 dias revelou 340 páginas de produto tendo sido acidentalmente configuradas como noindex por uma ação em massa do Yoast mal configurada durante a migração. Detectado aos 30 dias: consertável em uma tarde. Detectado aos 6 meses: provavelmente um buraco de ranking que você ainda está tentando preencher.noindex by a misconfigured Yoast bulk action during migration. Caught at 30 days: fixable in an afternoon. Caught at 6 months: probably a ranking hole you're still trying to fill.
---
FAQ
Quanto tempo realmente leva uma migração de Drupal para WordPress?
Depende inteiramente do tamanho e complexidade do conteúdo do site. Um site brochura de 50 páginas: 2-3 dias incluindo QA. Um arquivo de notícias de 5.000 páginas com tipos de conteúdo customizado: 6-10 semanas. O trabalho de SEO -- auditoria, mapeamento de URL, implementação de redirecionamento, monitoramento pós-lançamento -- normalmente adiciona 30-40% a qualquer que seja a estimativa de desenvolvimento principal. Não deixe ninguém lhe dizer o contrário.
Vou perder posicionamentos após migrar de Drupal para WordPress?
Flutuação de curto prazo é normal e quase inevitável. Se você fez corretamente o mapeamento de URL, redirecionamentos e tags canônicas, a maioria dos rankings se estabiliza dentro de 6-12 semanas. Os sites que vi sofrer perdas permanentes tinham o mesmo problema: sem redirecionamentos, ou redirecionamentos em massa apontando para a homepage. Faça o trabalho. Os rankings voltam.
Devo migrar todo o conteúdo do Drupal ou começar do zero?
Depende do que o conteúdo está fazendo por você. Puxe seus dados do GSC. Qualquer conteúdo com zero cliques nos últimos 16 meses e sem backlinks é candidato para deleção ao invés de migração. Migrar conteúdo fino e de baixo valor infla seu site WordPress e pode diluir crawl budget. Seja implacável. Dito isto, nunca delete uma URL que tenha algum backlink externo, mesmo que a página em si seja ruim -- redirecione-a para algo relevante.
Qual é o melhor tema WordPress para usar após uma migração de Drupal?
Honestamente, a escolha do tema tem quase nenhum impacto em SEO se você estiver usando HTML bem estruturado e mantendo a velocidade da página sob controle. Eu padronizo GeneratePress pelo seu markup limpo e overhead mínimo, ou Kadence se o cliente quer mais flexibilidade de design. Evite temas page-builder-pesados que geram 400KB de CSS não utilizado em cada carregamento de página.GeneratePress for its clean markup and minimal overhead, or Kadence if the client wants more design flexibility. Avoid page-builder-heavy themes that output 400KB of unused CSS on every page load.
Preciso de um desenvolvedor ou consigo fazer isso sozinho?
Para um site pequeno com menos de 50 páginas com conteúdo simples e sem tipos de post customizado? Você provavelmente consegue gerenciar com FG Drupal to WordPress e o plugin Redirection, seguindo os passos acima. Para qualquer coisa maior, ou qualquer coisa com CPTs, taxonomias complexas, ou um footprint SEO existente significativo -- contrate um desenvolvedor. O custo de consertar uma migração mal feita é sempre maior que o custo de fazer certo na primeira vez.
---
A migração em si é talvez 40% do trabalho. Os outros 60% são a infraestrutura de SEO que você constrói ao redor dela -- o mapeamento, os redirects, o monitoramento, a paciência de observar os dados por 30 dias antes de declarar vitória. Já vi sites WordPress lindamente construídos despencar nos resultados de busca porque o trabalho de redirect foi negligente, e já vi instalações WordPress improvisadas e mal-temadas manter todo ranking porque o mapa de URLs foi meticuloso.
Acerte as coisas chatas. O resto tende a seguir.
