Aviones al atardecer

Vamos con la última entrada de la serie sobre cómo migrar múltiples blogs en WordPress en uno sólo. Te recuerdo, por si no sabes de qué va el tema, que en la primera entrada te expliqué los primeros pasos que hicimos para fusionar los 3 blogs que teníamos en Nelio anteriormente, extrayendo las bases de datos y limpiando los contenidos, y que en la segunda entramos de lleno con la correspondencia entre los contenidos de las tablas antiguas y cómo fusionarlos en las tablas de la instalación WordPress multisitio destino (la web que estás viendo ahora mismo).

Como resultado de la segunda fase tenemos una base de datos que incluye las siguientes tablas:

Tablas relevantes después de la migración.
Tablas relevantes después de la migración.

Lo que te voy a explicar ahora son los últimos pasos del proceso de fusión y los problemas que nos hemos encontrado. Y es que sí, siempre hay problemas en una migración. La gracia está en saber minimizarlos y que el impacto de estos no sea crítico.

¡Presta atención porque empezamos!

Pasos finales de la fusión

Una vez tenemos las tablas que has visto en la imagen de más arriba estamos casi en el final. Sin embargo, aún tenemos que corregir algunos detalles que tenemos pendientes y realizar unas tareas más antes de dar por finalizada la migración.

Reemplazar enlaces

Seguro que te lo estabas preguntando. Todos los enlaces que hay en los contenidos pueden estar mal debido a la fusión de blogs (y, por tanto, de sus dominios). ¿Cómo arreglamos esto sin morir en el intento? Veamos un ejemplo sencillo para que entiendas la problemática.

Supongamos que teníamos una entrada en el blog de WPrincipiante que contenía un enlace hacia otra entrada del mismo blog. Ese enlace sería del estilo http://wprincipiante.es/nombre-de-la-entrada-enlazada/. Pero esa URL no será válida después de la fusión, ya que la entrada enlazada pasará a tener como URL https://neliosoftware.com/es/blog/nombre-de-la-entrada-enlazada/.

Si no hacemos nada, seguiremos teniendo http://wprincipiante.es/nombre-de-la-entrada-enlazada/ en el contenido después de la fusión. Y esto puede dar lugar a un error 404 que no queremos tener, si eliminamos WPrincipiante (cosa que habrá que hacer para evitar ser penalizados por duplicidad de contenidos).

Lo mismo pasa con los enlaces a imágenes (y demás archivos), que si seguimos el ejemplo anterior tendrán una URL parecida a http://wprincipiante.es/wp-content/uploads/2015/10/nombre-de-la-imagen.jpg, donde /2015/10/ son el año y el mes en el que subimos la imagen a la instalación WordPress.

Para evitar estos problemas debemos reemplazar URLs en los contenidos con cabeza para solucionar estos errores pero sin romper otras cosas. En una entrada anterior ya os expliqué algunas formas de hacer esto mediante plugins para WordPress o sentencias SQL.

Pero si lo hacéis mediante código, como lo hemos hecho nosotros usando un programa en Java, lo mejor que podéis hacer es usar expresiones regulares. Ojo, que estas no son nada sencillas de escribir y podéis liarla mucho si no tenéis experiencia en programación. Para muestra, aquí tienes algunas de las instrucciones Java con expresiones regulares que usamos en nuestro código para el caso de los contenidos del blog de WPrincipiante:

content = content.replaceAll(
   "href=["']http://wprincipiante.es/?["']", 
   "href="https://neliosoftware.com/es/"" );
content = content.replaceAll(
   "href=["']http://wprincipiante.es/", 
   "href="https://neliosoftware.com/es/blog/");
content = content.replaceAll(
   "src=["']http://wprincipiante.es/wp-content/uploads/", 
   "src="https://neliosoftware.com/es/wp-content/uploads/sites/3/" );

Si asumimos que el contenido de la entrada está en la variable content, la primera instrucción reemplaza todos los enlaces a la página principal de WPrincipiante (http://wprincipiante.es) por enlaces a la nueva página principal de Nelio Software en español (https://neliosoftware.com/es/).

La segunda instrucción reemplaza cualquier otro enlace a contenidos de WPrincipiante (http://wprincipiante.es/nombre/) por su equivalente en Nelio Software (https://neliosoftware.com/es/blog/nombre/). Aquí hay que tener cuidado con los enlaces a páginas. Esta instrucción también los modificará, pero te recuerdo que no hemos querido migrar las páginas en WPrincipiante, por lo que tendrás que revisar adicionalmente esto o poner antes de todo expresiones regulares para que se carguen los enlaces a páginas o los modifiquen según necesites.

Por último, la tercera instrucción reemplaza enlaces a imágenes y demás archivos en WPrincipiante (http://wprincipiante.es/wp-content/uploads/2015/10/nombre.jpg) por el equivalente en la web de Nelio Software (https://neliosoftware.com/es/wp-content/uploads/sites/3/wp-content/uploads/2015/10/nombre.jpg, por ejemplo).

Procederemos de la misma forma para los contenidos de las antiguas webs de Nelio Software y Nelio A/B Testing. Como ya te he dicho, las expresiones regulares son muy peligrosas si se usan sin tener muy claro lo que estamos haciendo, pero en manos expertas son la opción más útil y poderosa para poder arreglar todos los enlaces antiguos y cambiarlos por enlaces a la web nueva. Ten mucho cuidado con como las usas, y por si acaso, ten una copia de las tablas disponible para evitar tener que empezar de nuevo.

Cargar archivo SQL

Después del paso anterior ya tenemos los contenidos listos para ser cargados de verdad en la instalación WordPress multisitio final. Ten en cuenta que las tablas que forman parte de la migración son solo un subconjunto de todas las tablas que hay en esa instalación. Por tanto, borrar toda la base de datos y subir un archivo .SQL con solo las tablas de la migración no es correcto.

Lo que tendremos que hacer es exportar en un archivo SQL las tablas de la migración. Al hacer esto recuerda marcar la opción para añadir la sentencia DROP TABLE en el archivo exportado. Esta opción la encontrarás en el programa que uses para trabajar con bases de datos (phpMyAdmin y similares) y lo que hace es borrar cada tabla existente antes de importar su equivalente en la base de datos de la migración, para evitar errores. Asegúrate de que las sentencias DROP TABLE están en el archivo .SQL exportado.

Este archivo sólo tendremos que importarlo en la base de datos de la instalación final y listo. Si entramos en el Escritorio de la instalación WordPress verás que aparecen los comentarios, usuarios, entradas, etiquetas y categorías migrados. Pero ojo, si accedes a la biblioteca de medios verás que las imágenes aparecen rotas. Y si intentas editar una entrada te pasará lo mismo.

No te preocupes, ahora nos ponemos con esto ?.

Transferir imágenes

Es normal que las imágenes no aparezcan en la nueva instalación, ya que no las hemos movido todavía de las instalaciones WordPress viejas, aunque sí hemos reemplazado ya los enlaces en los contenidos. Tenemos varias maneras de transferirlas a la instalación WordPress multisitio, pero la que te voy a explicar, aunque no es la más eficiente, es la que siempre te va a funcionar y nunca me ha dado problemas anteriormente.

Las imágenes de una instalación WordPress las encontrarás en el directorio /wp-content/uploads/ del servidor. En nuestro caso descargamos todas estas imágenes de las webs de WPrincipiante, Nelio Software y Nelio A/B Testing en tres directorios diferentes en nuestro ordenador local.

Una vez el proceso terminó (puede tardar bastante dependiendo del número de imágenes que tengas), movimos las imágenes del directorio de WPrincipiante desde nuestro ordenador al directorio /wp-content/uploads/sites/3/ de la instalación WordPress multisitio final. Estas son las imágenes que se utilizan en el subsitio en español.

Luego subimos las imágenes de Nelio Software al directorio /wp-content/uploads/ directamente, ya que es el directorio que usa el subsitio en inglés. Lo mismo hicimos con las imágenes de Nelio A/B Testing.

Para subir archivos en bloque a un servidor puedes utilizar el cliente FTP que más te guste. Pero si quieres hacerlo mucho más rápido te recomiendo que eches un vistazo al comando de terminal lftp en combinación con el comando mirror. Podrás paralelizar tanto la descarga como la subida de archivos, aumentando la eficiencia y reduciendo el tiempo de todo el proceso. ¡Una maravilla!

Regenerar miniaturas

En la nueva web de Nelio hemos cambiado de tema y ahora usamos uno desarrollado a medida por nuestros amigos de SiloCreativo. Cuando pasamos a usar un tema nuevo en WordPress, las imágenes destacadas es muy posible que no acaben de verse bien del todo. Por si no lo sabías, cuando subes una imagen a WordPress, éste suele generar múltiples miniaturas de la imagen en cuestión. El tamaño concreto de cada miniatura lo suele definir el tema en función de sus necesidades (por ejemplo, una imagen muy pequeña para un widget de entradas relacionadas, una miniatura mediana para la lista de entradas en tu página principal, etc). Si cambias el tema, las miniaturas que tenías de las imágenes antiguas pueden no ser las que tu nuevo tema necesita, con lo que la composición final de tu web puede no verse del todo bien.

Para poder solucionar este problema tenemos Regenerate Thumbnails. Dada una imagen cualquiera de tu biblioteca multimedia, este plugin te permitirá regenerar todas sus miniaturas según las necesidades de tu tema actual. Por cierto, también permite modificar un conjunto de imágenes a través de acciones en lote, que es lo que hemos hecho para readaptar las imágenes transferidas.

Entradas sin imagen destacada

Otra sorpresa de última hora que encontré fue que muchas entradas antiguas no tenían una imagen destacada puesta. No es que no se hubieran migrado; simplemente, la entrada original no tenía ninguna imagen puesta. En nuestro caso no supone ningún problema, ya que el nuevo tema muestra tiene una imagen destacada por defecto. Pero a mí me gusta más que, siempre que sea posible, cada entrada tenga su propia imagen destacada.

La solución es muy sencilla usando un plugin como Media Tools o Auto Post Thumbnails. Estos plugins cogen las entradas que no tienen imagen destacada y, para cada una de ellas, obtienen la primera imagen que aparece en el contenido y la ponen como imagen destacada. Sé que no es perfecto, pero es mejor que nada ?.

Cómo no perder SEO: redireccionando a tope

La clave para no perder SEO en una migración está en la creación de reglas de redirección para que cuando un visitante intenta acceder a una URL antigua, ésta le lleve directamente a la URL equivalente en la nueva instalación. Esto es lo que hemos hecho en nuestra fusión de blogs.

Para ello hemos utilizado el plugin Redirection. Lo hemos instalado en Nelio A/B Testing y WPrincipiante. A la vez que procesábamos una entrada de estos blogs, creábamos una regla de redirección nueva que enlazaba la URL original de la entrada con la nueva URL que le corresponde en la instalación WordPress multisitio.

En la siguiente captura puedes ver ejemplos de redirecciones creadas para las entradas de Nelio A/B Testing:

Redirecciones creadas para entradas de Nelio A/B Testing.
Redirecciones creadas para entradas de Nelio A/B Testing.

En la parte izquierda vemos la expresión regular, y en la parte derecha la URL a la que ha de redirigirse al visitante.

Todas estas redirecciones las hemos cargado en el plugin Redirection tanto en la instalación WordPress de WPrincipiante como en la de Nelio A/B Testing. Luego borramos todas las entradas de estos blogs y comprobamos que las redirecciones funcionaban y nos mandaban a la nueva web.

Hay que decir que este fue el último paso que hicimos en la migración ya que necesitábamos que la nueva web estuviera lanzada. Aún así las reglas de redirección cubrieron un porcentaje muy cercano al 100% de todos los contenidos migrados.

Para el caso de Nelio Software, aunque el mismo dominio iba a seguir existiendo (pero apuntando a una nueva instalación WordPress), también tuvimos que crear alguna regla de redirección, ya que las entradas están ahora bajo el subdominio /blog/. En este caso en concreto usamos una solución diferente y más liviana: simplemente añadimos un fragmento de código PHP utilizando el filtro de WordPress 404_template, que se activa justo antes de que WordPress lance un error 404. Haciendo hook en ese filtro, detectamos cuando un usuario intenta entrar a una URL vieja y, si se confirma que es vieja, le redireccionamos (con wp_redirect) a la nueva URL. Esta nueva URL la podemos tener guardada en una tabla similar a la que vimos en la captura anterior. Como puedes ver, lo bueno de esta solución es que las redirecciones sólo se comprueban y ejecutan antes de lanzar un error 404.

Problemas encontrados

En nuestra migración la mayoría de cosas han funcionado bien a la primera, incluido el código que hice para fusionar los contenidos mediante la correspondencia entre tablas que te expliqué en la segunda parte de esta serie. Esto en si ya es motivo de alegría. Aún así ha habido pequeños problemas que vale la pena mencionar.

Activación de SSL

Este ha sido el mayor problema que hemos tenido en todo el proceso. Una vez teníamos la instalación WordPress multisitio lista con todo funcionando, lo que tocaba hacer era mover el dominio neliosoftware.com para que apuntara a esta instalación.

Seguimos todos los pasos adecuados y además pedimos a nuestro proveedor de alojamiento web un certificado SSL para que la web fuera por HTTPS. Hasta aquí todo normal. Una vez nos concedieron el certificado, nos movieron también la instalación WordPress multisitio a un nuevo servidor, con una nueva IP.

La gestión del nombre de dominio la tenemos en otro proveedor, al que tuvimos que pedirle que cambiara la entrada en el registro DNS de neliosoftware.com para que apuntara a la IP que nos acababan de pasar. Y así hicieron.

Es entonces cuando todo dejó de funcionar. En nuestro proveedor de alojamiento web hicimos todo lo indicado para que el nombre de dominio pasara a estar apuntando a la nueva instalación, pero no había manera de que funcionara. Cuando tocas temas de DNS habitualmente se tarda un tiempo (unas horas) en que todo se propague y funcione, pero aun pasado ese tiempo no se arreglaba. Teníamos la web de Nelio caída sin entender qué estaba pasando.

Como somos informáticos, antes de ponerte en contacto con tu proveedor lo das todo mirando del derecho y del revés qué has hecho mal. No obstante, cuando ya me cansé de probar cosas entré en el chat de soporte que proporcionan y descubrí que el problema no era nuestro. Nuestro proveedor de alojamiento utilizaba ciertas caches internas que ha de vaciar él directamente para que todo funcionara bien. Una vez lo hicieron todo funcionó sin más. Una tontería fuera de nuestro alcance, pero que me volvió locos varias horas.

Errores de rastreo

Una vez que hemos lanzado la nueva web no podemos descuidar ciertas tareas. Una de ellas es ir revisando cómo va todo a través de herramientas como Google Search Console. Gracias a esto hemos podido detectar errores en alguna redirección o simplemente redirecciones que nos habíamos dejado.

Errores de rastreo en Google Search Console.
Errores de rastreo en Google Search Console.

Tampoco hay que volverse loco y mirarlo cada día, pero sí es recomendable echarle un vistazo una vez a la semana durante los primeros meses e ir arreglando las cosas que encuentre. Eso sí, recuerda que no todo lo que detecta es un error real; a veces no sabe interpretar bien las redirecciones y te marca como error URLs que no producen un error 404.

Tareas que hemos dejado para más adelante

No siempre es posible hacerlo todo de una vez. Y en una migración muchas veces los plazos o los recursos disponibles obligan a dejar cosas para el futuro. En Nelio hemos querido sacar la nueva web lo antes posible para así poder comprobar de forma real el impacto que iba a tener la fusión de blogs.

Aquí te comento un par de tareas que tenemos pendientes para realizar en algún momento. Como verás, no son tareas prioritarias. Aún así, las tenemos en nuestra agenda.

Reducir el tamaño de las imágenes

Durante la transferencia de imágenes nos dimos cuenta de que en los inicios de nuestras webs no cuidábamos tanto los detalles como lo hacemos ahora. Nos encontramos con imágenes subidas a las diferentes instalaciones de WordPress con tamaños (en cuanto a medidas y peso) innecesariamente grandes.

Esto implica que, además de ocupar más espacio de disco en el servidor, aumente el gasto en ancho de banda y se carguen ciertos contenidos de forma más lenta. Sin embargo, también vimos que el número de casos en los que las imágenes eran extremadamente grandes era pequeño.

Hemos probado ciertos plugins que reducen las imágenes e incluso hemos programado un script que utiliza ImageMagic para hacerlo, pero los resultados obtenidos no han sido demasiado relevantes en cuanto a ganancia, por lo que hemos dejado como tarea pendiente arreglar esto.

Otro tema que nos sucede es que al transferir todas las imágenes, hay algunas que no se usan porque estaban enlazadas en páginas que no hemos migrado o porque son parte de algún tema de WordPress que ya no usamos. Queda pendiente también revisar esto y eliminar imágenes que no están enlazadas en ningún sitio.

Si usas algo especial para solucionar este pequeño problema, no dudes en dejarnos un comentario con tu explicación. Te lo agradeceremos mucho ?.

Integrar el resto de webs bajo el paraguas de Nelio Software

Nuestro objetivo actual como empresa es que todas nuestras webs estén bajo el dominio neliosoftware.com. En la entrada de Ruth en la que decidimos fusionar nuestras webs ya te explicamos el porqué de todo esto. Pero aun nos queda trabajo para acabar de conseguirlo.

Antes de la migración teníamos las webs de WPrincipiante, Nelio A/B Testing, Nelio Software y Migrate to WordPress. Ahora «sólo» queda Nelio Software como web principal, pero las webs de Nelio A/B Testing y Migrate to WordPress (compuestas únicamente por páginas) siguen vivas.

En nuestra agenda está unificar estas webs y fusionar sus contenidos dentro de la web de Nelio Software (incluso tenemos más o menos claro cómo hacerlo). Pero la falta de tiempo preparando el lanzamiento de Nelio Content nos obliga a aparcar esta unificación y dejarla para más adelante. Esperamos poder hacerlo muy pronto.

Conclusiones

Lo he dicho más de una vez durante esta serie de entradas, pero no me canso de repetirlo: una migración es un proceso complejo donde mimar los detalles es clave para conseguir resultados exitosos.

En nuestro caso, aunque como has visto hemos tenido algún problema destacable, la valoración final de toda la fusión de blogs y del lanzamiento de la nueva web ha sido un éxito. Ahora que ya llevamos unas semanas puedo afirmar que no hemos perdido posicionamiento en buscadores y que el número de visitantes es el esperado (benditas redirecciones ?).

Si estás pensando en hacer un proceso similar al nuestro, migrando contenidos de algún modo, mi único consejo es que vayas poco a poco y con cuidado. Evita siempre que puedas webs que te vendan automatizar todo el proceso con pocos clics, ya que solo son efectivas en casos muy simples. Y no escatimes demasiado con el presupuesto, o es posible que te hagan una chapuza.

Por último, si tienes dudas relacionadas con el SEO o tienes miedo a perder visitantes, lo único que te puedo decir es que si has dedicado el tiempo suficiente a redireccionar todo correctamente no deberías sufrir por esto. Te animo a probar. Y recuerda, siempre me puedes dejar un comentario más abajo con aquello que te preocupe para que te ayudemos entre todos.

Imagen destacada de Blake Richard Verdoorn.

Una respuesta a «Cómo fusionar múltiples blogs en uno sólo – el caso de Nelio (3/3)»

  1. […] Cómo fusionar múltiples blogs en uno sólo – el caso de Nelio (3/3) Hemos seguido paso a paso el proceso de fusión de blogs de Nelio (entre ellos WPrincipiante) y Antonio nos termina de contar la parte más técnica del proceso, con todos esos detalles necesarios para que la máquina funcione correctamente al terminar. […]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad de Nelio Software

Tus datos personales se almacenarán en SiteGround y serán usados por Nelio Software con el único objetivo de publicar tu comentario aquí. Con el envío de este comentario, nos das el consentimiento expreso para ello. Escríbenos para acceder, rectificar, limitar o eliminar tus datos personales.