El problema: migrar sin perder el SEO
Migrar una tienda a Tiendanube no es solo copiar productos. Las URLs cambian completamente. Una zapatilla que antes tenía su propia URL ahora pasa a una estructura distinta. Google tiene indexadas las URLs viejas, los clientes las tienen guardadas, y si no redirigís todas correctamente, cada una da un error 404.
Un 404 no es solo un error molesto. Es autoridad SEO que desaparece. Todos los backlinks, el historial de clics, el tiempo en página que Google acumuló sobre esa URL se pierden si no existe una redirección 301 que le diga "este contenido se movió acá".
En la migración que hice había más de 600 URLs indexadas entre productos, categorías y páginas de contenido. La tarea era crear 600 redirecciones.
El límite de Tiendanube: sin API, sin importación
Lo primero que hice fue buscar una API de redirecciones en Tiendanube. Tienen una API pública bastante completa para productos, órdenes y clientes, pero las redirecciones SEO no están incluidas. Solo existe un formulario en el panel de administración donde cargás la URL vieja, la URL nueva, y hacés click en "Agregar". De a una.
Hacer 600 veces ese proceso a mano llevaría horas. Y no es un trabajo que se pueda delegar fácilmente porque requiere conocer el sitio y verificar que cada URL destino sea correcta.
La solución: una extensión de Firefox que automatiza el proceso
Inspeccionando el panel de administración de Tiendanube con las DevTools del navegador, encontré que el formulario hace un POST a https://cirrus.tiendanube.com/v1/seo-redirects con un JSON simple: {"urlOld": "/url-vieja", "urlNew": "/url-nueva"}. Eso era todo lo que necesitaba.
Decidí crear una extensión de Firefox que:
- Lee un archivo CSV con las columnas
fromyto - Captura automáticamente el token de autenticación de Tiendanube mientras navegás el admin (sin que tengas que copiarlo a mano)
- Hace los POSTs uno por uno con un delay configurable para no saturar el servidor
- Muestra el progreso en tiempo real con un log de cada redirección
- Permite detener y retomar desde donde quedó si algo falla
Cómo captura el token automáticamente
El desafío técnico más interesante fue capturar el token sin pedírselo al usuario. Tiendanube usa tokens de sesión en los headers de cada request, y esos tokens expiran. Copiarlos a mano cada vez que expiran es tedioso.
La extensión inyecta un script en las páginas del admin de Tiendanube que intercepta los requests XHR y fetch del navegador. Cuando detecta un request con los headers x-access-token, x-store-id y x-user-id, los captura y los guarda automáticamente. El ícono de la extensión en la barra del navegador cambia de naranja a verde para indicar que el token está listo.
Cuando el token expira y aparece un error 401, la extensión se detiene sola y avisa. Con recargar el admin de Tiendanube alcanza para capturar el nuevo token y continuar.
Cómo armé el CSV de redirecciones
Para armar el CSV usé el export de páginas válidas de Google Search Console, que lista todas las URLs que Google tiene indexadas con fecha de último rastreo. De ahí clasifiqué las URLs por tipo (productos, categorías, páginas CMS) y las crucé contra los productos de Tiendanube usando su API para hacer el matching automático por slug.
El resultado fue un Excel con 579 productos, 59 categorías y 13 páginas de contenido. El matching automático resolvió el 93% de los productos sin intervención manual. Los 43 restantes los completé a mano buscando por nombre.
El resultado
Con la extensión, importar las 600 redirecciones llevó unos 15 minutos en vez de varias horas. El delay entre requests está configurado en 800ms por defecto para no levantar alertas de rate limiting, pero se puede ajustar.
Desde que se activaron las redirecciones, Google empezó a rastrear las URLs nuevas siguiendo los 301, y el tráfico orgánico se recuperó sin caídas abruptas.
Preguntas frecuentes
¿Funciona solo con Firefox?
La extensión usa la API de extensiones de Firefox (WebExtensions), que es compatible con Chrome con mínimos cambios. El código es prácticamente idéntico entre ambos navegadores.
¿Es seguro interceptar el token así?
El token solo se guarda en el storage local de la extensión, en tu navegador. No sale a ningún servidor externo. La extensión solo hace requests a cirrus.tiendanube.com, el mismo dominio que usa el admin oficial.
¿Qué pasa si Tiendanube actualiza su API interna?
La extensión captura también los headers de versión directamente de los requests reales del admin, así siempre usa la versión correcta y en caso de cambiar el formato de request habría que actualizar el plugin.
¿Tiendanube va a agregar importación masiva algún día?
Es una funcionalidad que debería existir, especialmente para migraciones. Por ahora no está, de ahí la necesidad de esta solución.