Cuando un sitio cambia de arquitectura, cada URL antigua es una apuesta. Si deja de responder, se pierden enlaces, rastreo y visitas. Con 726 rutas en libelium.com y 20 en iris360iot.com, la regla del briefing sonaba sencilla. Ninguna URL con valor se elimina sin destino equivalente y redirección validada. Cumplirla exigió montar una pequeña maquinaria, y la decisión que más pesó fue medirlo todo en un barrido repetible. Es parte del caso completo de la reescritura de las dos webs.
Reenviar el correo al cambiar de casa
Al mudarte pides a correos que reenvíe tu carta a la nueva dirección. Si el reenvío pasa por tres buzones intermedios, la carta llega tarde o se pierde. Una redirección debe ir de la dirección vieja a la nueva en un solo paso.
Primero el inventario, luego los destinos
Empecé leyendo los sitemaps de la web antigua. Libelium aportó 726 rutas únicas en cinco sitemaps, y 608 salían del antiguo blog libeliumworld, que mezclaba noticias, informes y casos de éxito.
Escribí un script que pide cada ruta a la web nueva y clasifica la respuesta. No inventa destinos. Los estados posibles son 200, 301 correcto de un salto, cadena, bucle, 404 y 5xx. Genera un informe y sale con error si encuentra un 404, un bucle o un 5xx, así que sirve igual de comprobación que de registro.
El inventario tiene un hueco respecto al briefing, que pide también tráfico, enlaces y leads por URL. El mío es un inventario de rutas y no consta que lo cruzara después con la hoja de redirecciones del cliente.
Un motor de redirecciones en el plugin núcleo
Las redirecciones viven en el plugin núcleo, y cada sitio aporta su propia semilla en un CSV con ruta antigua, ruta nueva y código. El código compartido no lleva rutas ni dominios, el mismo reparto por sitio que expliqué al pasar a un monorepo.
Las reglas se ejecutan antes que las redirecciones canónicas de WordPress, y eso garantiza el salto único. Al guardar una regla, el motor rechaza duplicados, bucles y cadenas. Una redirección 301GlosarioRedirección 301Respuesta HTTP que indica que un recurso se ha movido de forma permanente a otra URL. Los buscadores trasladan a la URL nueva las señales de la antigua, como los enlaces entrantes. En una migración, el mapa de redirecciones asocia cada URL antigua con un destino equivalente en un solo salto. Una cadena de redirecciones encadena varios saltos antes de llegar al destino y retrasa la carga y el rastreo.Ver término completo → cuyo destino ya redirige a otro sitio no entra.
Además registra los 404 y los 5xx por ruta, con visitas y referers, sin IP ni datos personales. Purga a los 90 días y envía un resumen semanal si hay errores repetidos o un enlace interno roto.
Dos barridos, dos fotografías
Lancé el barrido el 6 y el 7 de octubre contra los dominios de pruebas.
| Estado en la web nueva | Libelium, 6 oct | Libelium, 7 oct |
|---|---|---|
| 200 directo | 396 | 396 |
| 301 correcto de un salto | 38 | 324 |
| Cadena de 2 a 4 saltos | 257 | 0 |
| 404 | 35 | 6 |
Los 301 pasaron de 38 a 324. Salen de las 257 cadenas colapsadas y de 29 antiguos 404 que recibieron destino. iris360 cerró con 8 rutas en 200, 12 en 301 y ninguna con problemas.
Dos líneas para 254 URLs
El primer barrido mostró dónde estaba el volumen. Casi todas las cadenas venían de libeliumworld. Una ruta pasaba primero por un slug heredado, que WordPress resolvía solo, antes de llegar a su destino. Dos saltos en inglés y cuatro en las rutas en español.
Dos líneas con comodín resolvieron el grupo.
/libeliumworld/success-stories/*,/success-stories/*,301
/libeliumworld/casos-exito/*,/casos-exito/*,301El asterisco final copia el resto de la ruta. Dos reglas cubren 254 URLs a un salto, con los mismos destinos que ya devolvía el último salto de la cadena. Más de un salto es tolerable para el SEO, pero Google pierde señal con cada salto extra, y por eso las quise todas en uno.
El 404 que fabricaba mi propio código
Los informes habían pasado a un tipo de contenido propio, con un 301 desde su ruta antigua. En español, 24 de ellos acababan en /es/es/... y devolvían 404. TranslatePress ya añade el prefijo de idioma al construir la URL base, y mi redirección lo añadía otra vez. Lo arreglé leyendo la URL base sin el filtro de idioma.
Tras desplegarlo, el barrido aún mostró 16 cadenas. Quince eran informes en español donde WordPress y TranslatePress hacían un segundo salto, y la otra una página corporativa. Las resolví con reglas explícitas. El doble prefijo lo encontró el barrido, no yo.
Seis 404 sin decisión
Quedan seis rutas en 404. Son tres entradas del antiguo blog, cada una en inglés y en español, sobre el Alhambra Living Lab, la detección de incendios en estaciones de carga y una arquitectura de datos ETL medallion. La web antigua las servía con 200 y la nueva no las tiene.
Hay dos caminos, migrar los posts o redirigirlos a otra sección, y ningún fichero recoge una decisión. Con esas seis, la regla del briefing no se cumple todavía en el barrido.
Lo que el barrido no ve
Los barridos comprueban respuestas HTTP en un entorno de pruebas. El corte a producción se ejecutó el mismo día del último barrido y no tengo uno posterior contra el dominio definitivo. Tampoco tengo analítica posterior, línea base de tráfico ni ficha de KPI. No puedo decir cuántas señales se conservaron. Puedo decir que 720 de las 726 rutas de Libelium y las 20 de iris360 responden con 200 o con un 301 directo en pruebas.
Lo transferible cabe en tres hábitos. Automatiza el barrido para poder repetirlo tras cada cambio. Resuelve los grupos con comodines en lugar de ruta por ruta. Y desconfía de tu propio código de redirección, porque el mío fabricó un 404 que un humano no habría visto. La guía para repetirlo está en la checklist de migración de URLs.