Como migrar de Joomla a Drupal sin perder contenido ni posicionamiento SEO
He hecho esta migracion suficientes veces como para reconocer la mirada del cliente cuando llega el momento de hablar del salto. Llevan anos en Joomla, tienen articulos posicionados, el trafico organico les paga facturas, y la pregunta siempre es la misma con distinto nivel de panico: "¿Y si lo pierdo todo?".
Respuesta honesta: no lo vas a perder si haces los deberes. Pero conozco las cicatrices de los que migraron un viernes por la tarde "para tenerlo listo el lunes" y volvieron el martes a explicarle al jefe por que el organico se habia caido un 60%. Vamos por partes, en el orden que toca, porque saltarse el orden es la forma mas rapida de hundir el proyecto.
Por que migrar de Joomla a Drupal sigue teniendo sentido
Joomla no es un mal CMS, lo digo antes de que alguien se ofenda en LinkedIn. Pero el ecosistema ha evolucionado desigual:
- Releases. El salto de Joomla 4 a 5 dejo extensiones colgadas. Drupal mantiene calendario predecible y los modulos contribuidos se adaptan rapido.
- Modelado de contenido. Tipos, taxonomias, referencias entre entidades, paragraphs, vistas dinamicas. En Drupal lo tienes en nucleo. En Joomla dependes de extensiones de pago que algun dia dejan de actualizarse.
- Rendimiento. Para miles de nodos, BigPipe, Internal Page Cache y Dynamic Page Cache marcan diferencia.
- Seguridad. El equipo de Drupal publica SAs los miercoles con detalle y CVSS. Es de los procesos mas serios del open source.
Si necesitas crecer, integrar con CRM o ERP, o dejar de depender de extensiones huerfanas, migrar de Joomla a Drupal tiene sentido. Falta ejecutarlo sin romper lo que ya funciona.
Paso 1: auditar antes de tocar absolutamente nada
No es opcional. Sin este paso, dentro de tres semanas no podras distinguir una fluctuacion normal de una caida grave.
Inventario de contenido
Necesitas un listado real, no una intuicion:
- Articulos, categorias, etiquetas
- Paginas estaticas, menus, posiciones de plantilla
- Usuarios, roles, permisos
- Multimedia: imagenes, PDFs, videos alojados
Para el mapa de URLs uso Screaming Frog. Rastrea, exporta a CSV, y tienes el primer documento de trabajo: cada URL, su codigo de estado, su title y su meta description.
Linea base SEO
Antes de tocar nada, congela los numeros:
- Trafico organico mensual de los ultimos 12 meses
- Keywords posicionadas y su posicion media (Google Search Console por mes, Ahrefs o Semrush si los tienes)
- Top 50 paginas por trafico organico: las intocables
- Backlinks externos por URL: las paginas con autoridad entrante son criticas
Paso 2: la estrategia de URLs es donde se gana o se pierde
Google indexa URLs. Si una URL cambia y no le dices a donde apunta ahora, interpreta que la pagina ya no existe. Asi de simple, asi de brutal.
Plan A: mantener exactamente la misma estructura
Si en Joomla con SEF activado tus articulos viven en /categoria/titulo-articulo, replica ese patron en Drupal con Pathauto. Configuras los patrones por tipo de contenido en /admin/config/search/path/patterns y listo. Cuantas menos URLs cambien, menos posibilidades hay de meter la pata.
Plan B: cambiar URLs y redirigir cada una
A veces la estructura no se puede salvar: parametros ?option=com_content&view=article&id=42, slugs duplicados, rutas inconsistentes. Aprovecha el cambio, pero con una norma innegociable: cada URL antigua tiene su 301 a la nueva. No 302, no meta refresh, no JavaScript. 301 permanente.
El modulo Redirect gestiona redirecciones individuales y puede importar un CSV antiguo->nuevo. Para volumenes grandes, complementa con reglas en .htaccess o en Nginx, mas rapidas que pasar por el bootstrap de Drupal.
Truco de campo: hoja de calculo con columna A (URL antigua), columna B (URL nueva), columna C (codigo de estado esperado). Para las 50 paginas top revisa una por una, manualmente. El resto puede seguir reglas automaticas.
Paso 3: la migracion de contenido con Migrate API
Aqui es donde Drupal brilla. El nucleo trae Migrate API, framework serio, con soporte para Joomla mediante modulos contribuidos.
Stack que necesitas
migrateymigrate_drupal(nucleo)- Migrate Plus (
migrate_plus): plugins de proceso y ejecuciones por grupos - Migrate Tools (
migrate_tools): comandos drush para ejecutar y depurar - Joomla a Drupal source plugin: conector que mapea tablas (
#__content,#__categories,#__users) a entidades de Drupal
Lo instalas todo con composer, lo habilitas y tienes el arsenal.
Como se ejecuta sin morir en el intento
Conecta la base de datos de Joomla como secundaria en
settings.php. Drupal lee directamente de sus tablas. Si la dejas intocada, puedes reejecutar migraciones tantas veces como necesites.Lanza por fases con drush. El orden importa: usuarios, taxonomias, nodos, ficheros, comentarios.
drush migrate:status --group=joomla drush migrate:import upgrade_joomla_users drush migrate:import upgrade_joomla_taxonomy drush migrate:import upgrade_joomla_node_articleValida campo por campo. Los campos personalizados de Joomla casi nunca tienen equivalente exacto. Fechas con zona horaria, imagenes destacadas, HTML sucio del editor... revisalo. Si algo falla:
drush migrate:rollback, ajustas el yml y reimportas.Multimedia. Imagenes y PDFs deben mantener su URL o redirigirse. Google Images indexa por separado y los backlinks a PDFs cuentan. Copia
/imagesa/sites/default/filesy define un proceso en el yml que reescriba rutas en el cuerpo.
Paso 4: preservar todo lo que Google mira en cada pagina
Migrar el texto es la mitad del trabajo. Lo que sostiene el posicionamiento son los detalles:
- Meta titles y meta descriptions. Si usabas sh404SEF, JoomSEF o similar, exporta los metas personalizados a CSV y reimportarlos con Metatag y un proceso de Migrate Plus. No dejes que Drupal regenere los titles por defecto.
- Jerarquia de encabezados. Drupal genera el H1 desde el titulo del nodo. Asegurate de que en el cuerpo no hay un segundo H1 heredado del editor de Joomla. He visto migraciones llegar a produccion con dos H1 por pagina.
- Datos estructurados (Schema/JSON-LD). Schema.org Metatag cubre Article, Organization, BreadcrumbList. Esquemas custom van en plantillas Twig.
- hreflang. Si el sitio es multilingue, el modulo Hreflang genera las etiquetas. Verificalo antes del lanzamiento: un hreflang mal puesto hace que Google sirva la version equivocada por region.
- Sitemap XML. Con Simple Sitemap generas el sitemap dinamicamente. Que solo incluya nodos publicados, sin admin ni vistas filtradas.
Paso 5: el dia del lanzamiento (que no es viernes)
Te lo digo en serio: no lances un viernes. Ni un jueves por la tarde. Si algo se rompe el viernes a las 19:00, el lunes a las 9:00 llevas 60 horas con la web rota y Google ya ha empezado a desindexar. Lanza un martes o miercoles por la manana, con el equipo descansado y jornada por delante.
Checklist previo al go-live
- Redirecciones testeadas con verificacion masiva (httpstatus.io o script propio que recorra el CSV)
- Paginas top renderizan, cargan rapido, Core Web Vitals en verde en PageSpeed Insights
robots.txtno bloquea nada indexable (cuidado: staging suele llevar unDisallow: /que la gente olvida quitar)- Sitemap XML accesible en
/sitemap.xml - Certificado SSL en orden, sin mixed content
Primeras 48 horas
- Envia el sitemap a Google Search Console: Propiedad -> Sitemaps -> Anadir
- Pide indexacion manual de las 20 paginas mas importantes
- Vigila Cobertura cada pocas horas: si aparecen 404, redirige antes de que Google los procese
- Revisa logs del servidor: los 404 reales aparecen antes ahi que en Search Console
Primeras 4 semanas
Es normal ver baile de posiciones las dos o tres primeras semanas. Google necesita procesar las 301, revisar el contenido nuevo y reasignar autoridad. Si las redirecciones estan bien y el contenido es equivalente, las posiciones vuelven.
Si a la cuarta semana sigues con caidas en paginas concretas, audita por este orden:
- La 301 es directa (sin cadenas) y devuelve exactamente 301, no 302
- La pagina destino tiene contenido equivalente, no resumido ni placeholder
- Core Web Vitals no son peores que los de la antigua
- No hay un
noindexdespistado heredado de staging
Para mantener rendimiento despues del salto, te dejo nuestra guia sobre optimizacion de rendimiento en Drupal y la de buenas practicas de SEO tecnico en Drupal.
Errores que he visto hundir migraciones
Despues de bastantes proyectos, los desastres se repiten con un patron aburrido:
- No hacer 301. El error mas elemental y el mas destructivo. Cada URL sin redireccion es trafico y autoridad que se evaporan.
- Cambiar contenido y estructura a la vez. Migra primero. Optimiza despues, midiendo. Si tocas todo y aparece un problema, no podras aislarlo.
- Olvidar imagenes y PDFs. URLs rotas de medios ensucian Search Console, generan miles de 404 y afectan al rastreo.
- Dejar de mirar despues del lanzamiento. La euforia dura dos dias. Los problemas reales aparecen entre el dia 5 y el 20.
- Migrar sin staging. Siempre un entorno de prueba que replique produccion. Detectar un problema en staging cuesta minutos; en produccion puede costar posiciones que tardan meses en recuperarse.
Cuando llamar a alguien que ya lo haya hecho
Si tienes menos de 50 paginas y estructura limpia, probablemente puedas con esta guia. Pero si manejas miles de contenidos, integraciones con CRM, hreflang en cinco idiomas o trafico organico que paga las facturas, el coste de equivocarte supera con creces el de delegarlo.
En Tangram Consulting hemos ejecutado migraciones de Joomla a Drupal en sitios muy distintos, desde corporativos medianos a plataformas con miles de URLs y geolocalizacion. Si quieres que alguien revise tu caso antes de poner la primera ficha, estamos a un correo.
Lo que Google ve cuando migras mal
Google no ve un rediseno ni el esfuerzo del equipo. Ve URLs que devuelven 404, redirecciones encadenadas que dilapidan autoridad, metas que han desaparecido, schema roto y un sitemap que no cuadra. Y reacciona en consecuencia.
La buena noticia: tambien ve cuando lo haces bien. 301 limpias, contenido equivalente, sitemap actualizado, datos estructurados consistentes, Core Web Vitals que aguantan. Entonces lo que ve es una mudanza ordenada, no una desaparicion. Y el posicionamiento se queda donde estaba, o sube, porque la nueva plataforma le da margenes que la antigua no tenia. Esa es la diferencia entre migrar un viernes y migrar un martes con la cabeza fria.