Hace tres años un cliente me llamó un jueves por la tarde en pánico absoluto. Había entregado una migración de Drupal a WordPress a una agencia dev barata, el sitio se lanzó un viernes, y el lunes su tráfico orgánico había caído un 67%. Desaparecido. Seis años de autoridad SEO, simplemente... evaporados. Sin redirecciones. Miles de URLs rotas. El presupuesto de rastreo de Google quemado.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.
Punto clave: las migraciones de Drupal a WordPress fallan en mapeo de URLs y traducción de taxonomías, no en el cambio de CMS; implementa un mapa de redirecciones completo y transporta metadatos para mantener los 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.
He reconstruido ese tipo de desastres más veces de las que me gustaría contar. Después de 12,000+ migraciones en Seahawk Media, puedo decirte con cierta confianza: el movimiento técnico de Drupal a WordPress es en realidad la parte fácil. La preservación de SEO es donde todo sale mal -- y donde absolutamente no tiene que salir así.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.
Esta es la guía que sigo. Siempre.
---
Por qué las migraciones de Drupal a WordPress son un campo minado SEO
Drupal y WordPress generan URLs de manera diferente. El sistema de rutas predeterminado de Drupal, combinado con módulos como Pathauto, a menudo produce estructuras de URL que no tienen ninguna coincidencia con lo que WordPress genera de fábrica. Un nodo de Drupal en /content/our-services/web-design se convierte en /our-services/web-design o incluso /web-design en WordPress, dependiendo de cómo configures los permalinks. Esas son URLs diferentes. Google las ve como páginas diferentes. Sin una redirección, la antigua está muerta./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.
Y no se trata solo de URLs. El sistema de taxonomía de Drupal se mapea a categorías y etiquetas de WordPress -- pero no perfectamente. Los tipos de contenido personalizados en Drupal se convierten en Custom Post Types en WordPress, y si no construyes esos CPTs antes de migrar, tu contenido termina en el lugar equivocado completamente. He visto un sitio de noticias impulsado por Drupal donde 800 nodos de "artículos" se importaron como Posts estándar de WordPress, sobrescribiendo la estructura de archivo personalizado en la que se basaba su enlazado interno.
Aquí está lo que la mayoría de los desarrolladores pasan por alto: cada decisión estructural que tomas en WordPress antes de la migración afecta directamente qué redirecciones necesitarás después. Consigue primero la arquitectura correcta. Las redirecciones son un parche, no un plan.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.
---
Paso 1: Auditoría Previa a la Migración -- Sabe Qué Estás Moviendo Antes de Moverlo
No toques la instalación de Drupal hasta que tengas un rastreo completo del sitio en vivo. Uso Screaming Frog configurado para rastrear hasta 500,000 URLs (la versión de pago). Exporta todo: URLs, códigos de estado, títulos, metadescripciones, H1s, etiquetas canónicas, enlaces internos entrantes, conteos de palabras.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.
También extrae tus datos de Google Search Console. Filtra por clics en los últimos 16 meses (no 3, no 6-16, porque quieres captar contenido estacional). Exporta cada URL que haya recibido al menos un clic. Estas son tus URLs protegidas. Pierde posiciones en cualquiera de estas y el cliente lo notará.protected URLs. Lose rankings on any of these and the client will notice.
Lo que estoy buscando específicamente:
- Contenido duplicado que ya existe en el sitio de Drupal (corregirlo antes de migrar, no después) already existing on the Drupal site (fix it before migrating, not after)
- Páginas de contenido delgado de menos de 200 palabras que no ocupan posiciones en nada -- estas pueden consolidarse o eliminarse en lugar de migrarse under 200 words that rank for nothing -- these can be consolidated or deleted rather than migrated
- Patrones de URL no estándar como /node/1234 URLs que Drupal a veces expone incluso cuando Pathauto está activo like
/node/1234URLs that Drupal sometimes exposes even when Pathauto is active - Páginas de archivo de taxonomía que ocupan posiciones -- rutas /tags/, /category/, /topic/ que tienen impresiones reales en Search Console that rank --
/tags/,/category/,/topic/paths that have actual Search Console impressions
Ese último punto atrapa a la gente constantemente. Las páginas de términos de taxonomía de Drupal a menudo se posicionan para consultas de cola larga. Si no recreas archivos de taxonomía de WordPress equivalentes y redirige las rutas antiguas, acabas de tirar a la basura tráfico pasivo.and redirect the old paths, you've just thrown away passive traffic.
---
Paso 2: Mapeo de URLs -- La Hoja de Cálculo Que Nadie Quiere Construir
¿Aburrido? Sí. ¿Innegociable? También sí.
Construye un mapa de URLs en Google Sheets (o Airtable si lo prefieres, he usado ambos). La columna A contiene cada URL de Drupal. La columna B es la URL de WordPress correspondiente a la que se resolverá. La columna C es un estado: coincidencia exacta, redirección necesaria, consolidar o eliminar.exact match,redirect needed,consolidate, or delete.
Para un sitio de 300 páginas, esto toma media jornada. Para un sitio de 8,000 páginas -- que Seahawk manejó para un cliente de educación superior en 2021 -- toma un equipo de tres personas aproximadamente cuatro días de trabajo más un viernes por la noche muy tedioso. Vale la pena cada vez.
Algunas reglas que sigo:
- Preserva slugs siempre que sea posible. Si Drupal tiene /blog/how-to-fix-crawl-errors, haz que WordPress use el mismo slug. La mayoría de las veces puedes. Los ajustes de enlace permanente en WordPress Ajustes → Enlaces permanentes te permiten coincidir con cualquier patrón que Drupal estuviera 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 redirijas a la página de inicio. Los desarrolladores perezosos hacen esto. Mata el link equity y confunde a los usuarios. Cada URL antigua debe tener un destino específico.Lazy devs do this. It kills link equity and confuses users. Every old URL gets a specific destination.
- Ten cuidado con las URLs paginadas. La paginación de Drupal se ve como ?page=1. WordPress usa /page/2/. Mapea estas o déjalas como 404s (que generalmente está bien -- las páginas paginadas rara vez tienen autoridad de enlace significativa, pero confirma primero en GSC).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). - Consulta las cadenas de consulta por separado. Cosas como /search?keys=wordpress no necesitan redirecciones. /events?date=2023-06 tal vez sí, dependiendo de si esas páginas tienen posicionamiento.Things like
/search?keys=wordpressdon't need redirects./events?date=2023-06might, depending on whether those pages rank.
---
Paso 3: Migración de Contenido -- FG Drupal to WordPress y Qué Sucede Realmente
El plugin FG Drupal to WordPress hace el trabajo pesado en la mayoría de migraciones. Se conecta directamente a tu base de datos de Drupal, extrae nodos, usuarios, términos de taxonomía y medios. Para Drupal 7, funciona de maravilla. Para Drupal 9/10, necesitarás la versión premium, que cuesta alrededor de €99 la última vez que revisé. Vale cada euro comparado con una migración 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.
Lo que el plugin maneja bien:
- Contenido de cuerpo de nodos (incluyendo imágenes incrustadas si configuras correctamente la ruta de medios)
- Términos de taxonomía mapeados a categorías/etiquetas de WordPress
- Campos personalizados básicos si estás en el nivel premium
Lo que no manejará y tendrás que corregir manualmente:
- Drupal Views — se trata de layouts de página personalizados/queries. Los reconstruirás en WordPress usando plugins como WPGridBuilder o simplemente loops personalizados 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 — asígnalos manualmente a Gravity Forms o WPForms; la lógica no se transfiere -- map these to Gravity Forms or WPForms manually; the logic doesn't transfer
- Grupos de campos complejos — la Field API de Drupal soporta algunas estructuras de datos genuinamente extrañas. Tendrás que exportarlas a CSV e importarlas vía 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
- Regiones de contenido de bloques — el sistema de bloques de Drupal no es nada parecido a los widgets/bloques FSE de WordPress. Es una decisión de diseño, no una tarea de migración -- Drupal's block system is nothing like WordPress widgets/FSE blocks. Design decision, not a migration task
Una cosa que siempre hago después de que FG Drupal to WordPress termina: ejecuto un conteo de filas. ¿Cuántos nodos había en Drupal? ¿Cuántas entradas de posts/CPT hay ahora en WordPress? Deberían coincidir (menos todo lo que excluiste deliberadamente). Una discrepancia del 3% en un sitio de 5,000 nodos son 150 páginas faltantes. Ve a buscarlas.
---
Paso 4: Implementando Redirecciones Sin Destruir Tu Servidor
Una vez que el mapa de URLs está construido y el contenido está en vivo en el entorno de staging de WordPress, es hora de las redirecciones. Dos herramientas: el plugin Redirection para sitios más pequeños (menos de ~1,000 redirecciones) y reglas .htaccess para cualquier cosa más grande en Apache, o bloques nginx.conf en 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 qué esta división? El plugin Redirection procesa redirecciones vía PHP, lo que significa un golpe al servidor por cada verificación de redirección. Con 5,000 redirecciones y 50,000 vistas de página diarias, ese es un overhead real. Las redirecciones a nivel de servidor son más rápidas por un orden de magnitud.
Para migraciones grandes, exporto el mapa de URLs desde Google Sheets, escribo un script rápido para generar los bloques RewriteRule, y los pongo en .htaccess antes del go-live. Toma 20 minutos. Ahorra horas de debugging en un sitio lento después del lanzamiento.RewriteRule blocks, and drop them into.htaccess before go-live. Takes 20 minutes. Saves hours of debugging a sluggish site post-launch.
Una cosa en la que la gente no piensa: cadenas de redirecciones. Si Drupal ya tenía redirecciones en lugar (muchos sitios Drupal maduros las tienen, a través del módulo Redirect), necesitas encontrarlas y colapsar la cadena. A → B → C necesita convertirse en A → C. La propia documentación de Google es bastante clara en que las cadenas ralentizan la transferencia de PageRank, incluso si no la eliminan.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.
---
Paso 5: Después del lanzamiento — La ventana de 72 horas
Lanza el sitio un martes o miércoles. Nunca viernes. Aprendí esto de la forma difícil con un cliente en 2018 — lanzamos una migración de 1,200 páginas un viernes por la tarde y descubrimos una estructura de enlaces permanentes mal configurada a las 6pm. Para el lunes, Google ya había rastreado e indexado una ola de URLs rotas.
Esto es lo que monitoreo en las primeras 72 horas:
- Reporte de cobertura de GSC — vigila un pico de 404s. Algunos son esperados (rutas antiguas del sistema Drupal). Un pico en tus páginas de dinero no lo es. -- watch for a spike in 404s. Some are expected (old Drupal system paths). A spike across your money pages is not.
- Re-rastreo de Screaming Frog — rastrea el sitio WordPress en vivo la mañana después del lanzamiento. Compara la cantidad de URLs con tu línea base previa a la migración. -- crawl the live WordPress site the morning after launch. Compare URL count to your pre-migration baseline.
- Verificaciones puntuales de redirecciones — prueba manualmente tus 20 URLs de Drupal con mayor tráfico desde GSC. Pégalas en el navegador. ¿Llegan a donde deberían? -- manually test your 20 highest-traffic Drupal URLs from GSC. Paste them into a browser. Do they land where they should?
- Etiquetas canónicas — confirma que WordPress esté generando la etiqueta canónica correcta en cada página. Yoast y Rank Math lo hacen automáticamente, pero verifica de todas formas. -- confirm WordPress is outputting the right canonical on every page. Yoast and Rank Math both do this automatically, but check anyway.
- Envío de XML sitemap -- envía el nuevo sitemap en GSC inmediatamente. No esperes a que Google lo encuentre. -- submit the new sitemap in GSC immediately. Don't wait for Google to find it.
Una cosa que hago y que la mayoría de las personas omite: envía también el antiguo sitemap XML de Drupal en GSC después del lanzamiento, apuntando al dominio antiguo o subdominio si lo mantuviste activo temporalmente. Esto le dice a Google exactamente cuáles URLs antiguas rastrear, seguir las redirecciones y actualizar su índice más 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.
---
Paso 6: La revisión de salud SEO de 30 días
Una migración no termina en el lanzamiento. El índice tarda tiempo en actualizarse. Esto es lo que reviso en el marcador de 30 días:
- Cambios en posición de ranking -- usa Ahrefs o Semrush para comparar posiciones de palabras clave 30 días antes de la migración vs. 30 días después. Espera fluctuación menor (5-10 posiciones) en algunos términos. Una caída de 30+ posiciones en una palabra clave principal requiere investigación. -- 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.
- Objetivos de backlinks -- si tenías backlinks externos apuntando a URLs específicas de Drupal, verifica que esas URLs estén redirigiendo correctamente. El reporte Lost Backlinks de Ahrefs lo muestra. Los objetivos de backlinks rotos son equity de enlaces que estás perdiendo activamente. -- 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.
- Regresión de velocidad de página -- los sitios WordPress a veces son más lentos que sitios Drupal bien optimizados. Ejecuta una auditoría Lighthouse en tus 5 páginas más importantes y compara con tu línea base previa a la migración. -- 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.
- Tasa de indexación -- ¿cuántas de tus URLs enviadas están indexadas? A los 30 días, quieres al menos 80% de tus páginas de contenido principal indexadas. Cualquier cosa por debajo de 60% sugiere un problema de rastreabilidad (verifica robots.txt y asegúrate de no haber bloqueado accidentalmente a Googlebot en 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 tuvo un cliente fintech el año pasado donde la revisión de 30 días reveló que 340 páginas de producto habían sido accidentalmente configuradas como noindex por una acción masiva de Yoast mal configurada durante la migración. Detectado a los 30 días: reparable en una tarde. Detectado a los 6 meses: probablemente un agujero de posicionamiento que aún estás intentando llenar.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
¿Cuánto tiempo lleva realmente una migración de Drupal a WordPress?
Depende completamente del tamaño del sitio y la complejidad del contenido. Un sitio brochure de 50 páginas: 2-3 días incluyendo QA. Un archivo de noticias de 5,000 páginas con tipos de contenido personalizados: 6-10 semanas. El trabajo de SEO -- auditoría, mapeo de URLs, implementación de redirecciones, monitoreo post-lanzamiento -- típicamente agrega 30-40% a lo que sea que sea la estimación de desarrollo principal. No dejes que nadie te diga lo contrario.
¿Perderé posiciones en los resultados después de migrar de Drupal a WordPress?
La fluctuación a corto plazo es normal e inevitable. Si has hecho el mapeo de URLs, redirecciones y etiquetas canónicas correctamente, la mayoría de rankings se estabilizan dentro de 6-12 semanas. Los sitios que he visto sufrir pérdidas permanentes todos tenían el mismo problema: sin redirecciones, o redirecciones en masa apuntando a la página de inicio. Haz el trabajo. Los rankings vuelven.
¿Debo migrar todo el contenido de Drupal o empezar de cero?
Depende de lo que el contenido está haciendo por ti. Extrae tus datos de GSC. Cualquier contenido sin clics en 16 meses y sin backlinks es candidato para eliminación en lugar de migración. Migrar contenido delgado y de bajo valor infla tu sitio WordPress y puede diluir el crawl budget. Sé implacable. Dicho esto, nunca elimines una URL que tenga backlinks externos, incluso si la página en sí es basura -- redirigela a algo relevante.
¿Cuál es el mejor tema de WordPress para usar después de una migración de Drupal?
Honestamente, la elección del tema tiene casi ningún impacto en SEO si estás usando HTML bien estructurado y manteniendo la velocidad de página bajo control. Por defecto elijo GeneratePress por su markup limpio y overhead mínimo, o Kadence si el cliente quiere más flexibilidad de diseño. Evita temas con page builder pesado que generan 400KB de CSS no utilizado en cada carga 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.
¿Necesito un desarrollador o puedo hacerlo yo mismo?
¿Para un sitio pequeño con menos de 50 páginas con contenido simple y sin tipos de contenido personalizados? Probablemente puedas arreglarte con FG Drupal to WordPress y el plugin Redirection, siguiendo los pasos anteriores. Para cualquier cosa más grande, o cualquier cosa con CPTs, taxonomías complejas, o una huella SEO existente significativa -- contrata un desarrollador. El costo de arreglar una migración fallida siempre es mayor que el costo de hacerlo correctamente la primera vez.
---
La migración en sí es quizá 40% del trabajo. El otro 60% es la infraestructura de SEO que construyes alrededor de ella -- el mapeo, las redirecciones, el monitoreo, la paciencia de observar los datos durante 30 días antes de declarar victoria. He visto sitios WordPress hermosamente construidos hundirse en búsqueda porque el trabajo de redirección fue descuidado, y he visto instalaciones WordPress destartaladas, apenas tematizadas, mantener cada ranking porque el mapa de URLs fue meticuloso.
Haz las cosas aburridas correctamente. El resto tiende a seguir.
