Elido
11 min de lecturaMigración
Esencial

Migrando de Bitly a Elido: una guía técnica

Cómo mover la infraestructura de enlaces desde Bitly sin un pico de 404: exportación CSV, aprovisionamiento masivo en Elido, momento de cutover de DNS, reconciliación de historial de clics y las cinco trampas que muerden en la segunda semana.

Ana Kowalska
Marketing solutions engineering
Migrando de Bitly a Elido: una guía técnica

Migrar infraestructura de enlaces es de alto riesgo. Cada enlace corto que alguna vez has impreso, incrustado en un pie de email o estampado en un código QR es ahora una dependencia. Múdate torpemente y vas a generar 404 en una porción significativa del tráfico entrante durante semanas antes de que alguien lo note.

Esta guía cubre la mudanza de Bitly a Elido. Asume que ya has decidido cambiar - normalmente por residencia de datos UE, una experiencia de plan gratuito más limpia, reventa de marca blanca o acceso a la API que no requiere el nivel Premium (199 $/mes anual o 300 $/mes mensual a fecha de mayo de 2026). Si todavía estás evaluando, la página de comparación en /compare/vs-bitly es el mejor punto de partida.

Lo que realmente tienes que migrar#

Tres cosas se mueven; nada más importa a nivel de cable.

  1. Enlaces cortos activos. El slug, el destino, etiquetas y carpetas opcionales y el dominio personalizado (si hay).
  2. DNS del dominio personalizado. El registro CNAME que apunta al edge de Bitly necesita apuntar al de Elido.
  3. Historial de clics. Los contadores agregados de Bitly - no eventos en bruto (esos no son exportables).

Todo lo demás - paneles de Bitly Sights, códigos QR de marca, configuraciones de deeplinks - es configuración de cero en Elido, no migración. No intentes portarlos; reconstrúyelos una vez en el nuevo stack.

El proceso de migración de Bitly a Elido en cinco pasos: exportar enlaces de Bitly, mapear slugs a destinos, importar masivamente en Elido, reapuntar el CNAME del dominio personalizado y luego verificar de extremo a extremo

Paso 1: Inventario#

Bitly limita la exportación de datos históricos por nivel. La exportación CSV del panel funciona hasta unos 10K enlaces; más allá de eso, se agota el tiempo o pagina mal. Para inventarios más grandes, camina por la API directamente:

curl -H "Authorization: Bearer $BITLY_TOKEN" \
  "https://api-ssl.bitly.com/v4/groups/$GROUP_GUID/bitlinks?size=100"

Pagina vía la URL pagination.next en cada respuesta. El tamaño de página 100 es el máximo. Persiste los resultados como JSONL - un enlace por línea - para poder reanudar si la exportación se atasca.

Lo que quieres de cada fila:

  • link - la URL corta completa (https://bit.ly/abc o https://yourdomain.com/abc)
  • long_url - el destino
  • tags, archived, created_at
  • link_clicks (total de por vida) - el único historial de clics que sacarás de Bitly

Filtra los enlaces archivados a menos que tengas razón para mantenerlos. La mayoría de los equipos encuentran que el 30-50% de su inventario está muerto - campañas viejas, compartidos puntuales - y la migración es el momento adecuado para deshacerse de la basura.

Paso 2: Pre-aprovisionar en Elido#

Antes de tocar DNS, consigue que cada enlace esté reservado en Elido bajo el mismo dominio personalizado y slug.

Para inventarios grandes, usa links.bulkCreate en lugar de creaciones por enlace. Necesitarás tu ID de workspace de Elido y el ID numérico del dominio (busca primero el dominio con workspaceDomains.list(workspaceId)):

import { ElidoApi } from "@elido/sdk";

const api = new ElidoApi({ apiKey: process.env.ELIDO_API_KEY! });

// Resolve your custom domain's numeric ID once, before the import loop
const { items: domains } = await api.workspaceDomains.list(WORKSPACE_ID);
const domain = domains.find((d) => d.hostname === "links.yourbrand.com");
if (!domain) throw new Error("Domain not registered in workspace");

// Batch the JSONL into chunks of 100 (the bulk endpoint maximum)
async function migrateChunk(rows: BitlyRow[]) {
  return api.links.bulkCreate(
    WORKSPACE_ID,
    {
      domain_id: domain.id,
      links: rows.map((row) => ({
        slug: row.slug,
        destination_url: row.long_url,
        tags: [
          ...row.tags,
          `bitly-migrated`, // tag for filtering in analytics
        ],
        title: row.title ?? undefined,
      })),
    },
    { idempotencyKey: `mig-batch-${rows[0].slug}` },
  );
}

El endpoint links.bulkCreate (POST /v1/workspaces/{workspace_id}/links/bulk) acepta hasta 100 enlaces por llamada y devuelve el estado de éxito/fallo por elemento, por lo que un fallo parcial no aborta el lote. Para importaciones de un solo enlace, links.create(workspaceId, input, { idempotencyKey }) acepta los mismos campos domain_id / slug / destination_url / tags y una clave de idempotencia opcional para que un script parcial pueda reanudarse de forma segura.

Algunas cosas que saber antes de ejecutar el script:

  • Registro de dominio primero. El domain_id en el cuerpo de la petición debe referirse a un dominio ya registrado en tu workspace. Registra y verifica el dominio vía el flujo de dominios personalizados antes de comenzar la importación. El dominio no necesita estar en vivo aún - puedes registrarlo bajo Elido antes de cambiar el DNS.
  • Límites de nivel. Elido aplica límites de enlaces a nivel de workspace por nivel. Pre-aprovisionar un inventario de 100K enlaces requiere un plan Business.
  • Límites de tasa. La creación masiva está sujeta a los mismos límites de tasa a nivel de workspace que las creaciones individuales. Una migración de 50K enlaces lleva aproximadamente 10 minutos si lotificas a 100 enlaces por llamada con paralelismo modesto. Mantenlo serial o ligeramente concurrente desde un solo runner para que el log de auditoría muestre un bloque de importación limpio.

Paso 3: Reapuntar el dominio personalizado#

Este es el cutover. Todo antes de esto es reversible; todo después es en vivo.

Baja el TTL en el CNAME existente de Bitly al menos 24 horas antes de la ventana de cutover:

links.yourbrand.com.  300  IN  CNAME  cname.bitly.com.

Si tu TTL ha sido 86400 durante años, "bajar el TTL" es una espera de 24 horas, no una tarea de cinco minutos. Planifica alrededor de ello.

Cronograma del cutover de DNS: bajar el TTL del CNAME 24 horas antes, cambiar el destino a edge.elido.me en la ventana de cambio, la primera petición emite un certificado de Let's Encrypt, luego las peticiones en cache se sirven desde el edge en milisegundos de un solo digito

Cuando se abra la ventana de cambio, cambia el destino:

links.yourbrand.com.  300  IN  CNAME  edge.elido.me.

El edge de Elido usa TLS automático bajo demanda. La primera petición después de que el DNS se propague desencadena una emisión de Let's Encrypt - típicamente 1–3 segundos de latencia en esa petición individual, luego el certificado se almacena en caché y las peticiones subsiguientes se sirven desde el edge de la región de la UE en milisegundos de un solo dígito. El certificado se aprovisiona automáticamente; no hay un paso manual de solicitud de certificado.

Verifica con dig desde algunas redes antes de declarar el cutover hecho. La propagación de DNS es desigual; comprobar solo desde tu portátil significa que has comprobado un solo resolvedor.

Paso 4: Reconciliar el historial de clics#

Bitly no exporta eventos de clic en bruto. No presupuestes tiempo para "importar tu historial" - no es posible, y cualquier herramienta que lo prometa está leyendo agregados y llamándolos eventos.

Lo que obtienes es el contador link_clicks por enlace de la exportación de la API de Bitly. Almacénalo en algún lugar donde puedas unirlo contra tu inventario de enlaces de Elido - una columna separada en un dataset de Metabase, una etiqueta si lo quieres en línea. Elido empieza a contar desde cero en el cutover.

Reconciliacion del historial de clics: Bitly exporta solo un contador total de clics por enlace, Elido cuenta desde cero en el cutover, y la capa de informes suma los dos numeros para el total real por enlace

Para la capa de informes, la fórmula es: total_clicks = elido_clicks + bitly_lifetime_clicks. La API de analítica expone los datos de clic de Elido en /v1/analytics/workspaces/{workspace_id}/timeseries; una consulta de 20 líneas en Metabase o Hex une los dos números si has almacenado la línea base de Bitly.

Si necesitas analítica histórica granular - desglose geográfico por mes, tendencias de referrer - no volverán. Reconstruye las preguntas en el log de eventos en bruto de Elido a partir de aquí; la migración es el corte duro.

Cinco trampas que muerden en la segunda semana#

1. Enlaces bit.ly hardcoded en activos estáticos. PDFs, material impreso, fragmentos incrustados en emails de bienvenida. Estos apuntan al dominio de Bitly, no al tuyo personalizado. Siguen funcionando mientras mantengas la cuenta de Bitly; se rompen en cuanto cancelas. O mantienes una cuenta gratuita de Bitly viva como cementerio de solo redirección, o aceptas la pérdida y no cancelas durante al menos un año.

2. Doble redirección de CDN. Si pones tu dominio detrás de Cloudflare en modo proxy (nube naranja), el handshake SSL hacia Elido puede entrar en conflicto con el SSL Universal de Cloudflare. Establece Cloudflare SSL a "Full (Strict)" y elimina cualquier Page Rule que referenciara el objetivo antiguo de Bitly. O pon la nube gris en el registro temporalmente para la ventana de cutover.

3. Truncamiento de UTM en la exportación. Bitly a veces muestra una URL de destino acortada en el panel pero almacena la URL completa canónica. La exportación CSV normalmente tiene la URL completa; la vista del panel puede no. Si haces scraping del panel en lugar de llamar a la API, perderás UTMs. Ve siempre vía la API.

4. Límites de tasa de la API de Bitly en el lado de lectura. La API de Bitly estrangula agresivamente en GET /bitlinks para cuentas de alto volumen. Leer ingenuamente 1M enlaces secuencialmente puede tomar días. Pagina en paralelo (4–8 paginadores concurrentes) pero vigila los 429; retrocede cuando se disparen.

5. Alcance a nivel de cuenta vs. a nivel de grupo en Bitly. Los grupos de Bitly no son workspaces. Una sola cuenta de Bitly puede poseer múltiples grupos, cada uno con su propia configuración de dominio personalizado. Si tu equipo ha añadido dominios bajo diferentes grupos a lo largo de los años, la exportación necesita enumerar todos los grupos, no solo el predeterminado. Pierde un grupo y ese dominio no migra.

Cumplimiento: por qué la mayoría de equipos realmente se mudan#

La migración suele estar impulsada por el cumplimiento, no por las funciones. El patrón:

  • El DPO señala a Bitly como un subprocesador con sede en EE. UU.; la confianza en el Data Privacy Framework recibe críticas en una auditoría.
  • Adquisiciones pide la lista de subprocesadores; la de Bitly llega a más de 20 proveedores.
  • El BAA en el plan Premium (300 $/mes facturado mensualmente, o 199 $/mes con compromiso anual, a fecha de mayo de 2026 - verifica los precios actuales) se convierte en un requisito para clientes adyacentes a la salud, y el salto de nivel es el disparador.

Elido está alojado en la UE por defecto - los eventos de clic se enrutan a través de la región de la UE, con EE. UU. Este y Asia-Pacífico disponibles como regiones Business+ opt-in. La lista de subprocesadores son cinco proveedores, publicada en /legal/subprocessors. ISO 27001 está vigente; SOC 2 Tipo II está en auditoría. El BAA está disponible en Business+. Schrems II no es una preocupación en la configuración predeterminada porque los datos no salen del EEE a menos que un workspace ancle explícitamente a una región no UE.

Si el cumplimiento es el impulsor, el plan de migración debería incluir un diagrama de flujo de datos lado a lado: dónde vivían los eventos de clic antes, dónde viven ahora. Ese diagrama es lo que tu auditor quiere en la próxima evaluación.

Auto-hospedaje como alternativa#

Para equipos cuya postura de seguridad descarta cualquier acortador SaaS - servicios financieros, gobierno, salud - Elido entrega un Helm chart Apache 2.0. Los mismos binarios que se ejecutan en nuestra región de la UE, desplegados en tu VPC, BYO KMS para cifrado, sin subprocesadores de terceros. La migración se ve idéntica excepto el paso 3 (DNS) apunta a tu ingress in-cluster en lugar de edge.elido.me.

El runbook de auto-hospedaje cubre la instalación de Helm, el bootstrapping de secretos y el cableado de autenticación de Kratos; presupuesta medio día para un despliegue fresco en un cluster k8s existente.

Flujo de trabajo de desarrollador después de la migración#

Una vez en Elido, la API es la superficie principal para cualquier equipo que cree más de unos pocos enlaces a la semana. La especificación OpenAPI 3.1 vive en /help; el paquete @elido/sdk cubre la API en TypeScript, y un SDK de Go se entrega en packages/sdk-go.

Para flujos de trabajo dirigidos por agentes, el servidor MCP de código abierto conecta Elido a Claude, Cursor o cualquier cliente compatible con MCP:

{
  "mcpServers": {
    "elido": {
      "command": "npx",
      "args": ["-y", "@elido/mcp-server"],
      "env": { "ELIDO_API_KEY": "elido_pk_..." }
    }
  }
}

Solo lectura por defecto - los agentes pueden consultar analítica y buscar enlaces sin escrituras. Conceder alcance de escritura es una configuración deliberada por workspace.

Lista de comprobación final antes del cutover#

  • El token API de Bitly tiene acceso a todos los grupos, no solo al predeterminado
  • Inventario exportado como JSONL, enlaces archivados filtrados, conteo cruzado verificado contra el panel de Bitly
  • Todos los slugs pre-aprovisionados en Elido bajo el dominio personalizado correcto; el script devolvió 100% de éxito en un dry-run
  • Dominio personalizado registrado y verificado en el workspace de Elido antes de tocar DNS
  • TTL de DNS en el CNAME existente de Bitly bajado a 300s, al menos 24 horas antes del cutover
  • Modo proxy de Cloudflare y configuración SSL verificados compatibles con el edge de Elido
  • Contadores de clics de por vida de Bitly capturados en la hora del cutover y almacenados para informes
  • Al menos un enlace de prueba inversa impreso y escaneado para confirmar de extremo a extremo
  • Cuenta de Bitly programada para permanecer activa durante 90 días después del cutover como seguro para enlaces bit.ly hardcoded

Hecho correctamente, el cambio visible para el usuario es invisible. Hecho mal, pasas dos semanas atendiendo tickets de "¿por qué bit.ly está roto?" de alguien que no se da cuenta de que no es culpa suya.

El trabajo técnico es directo. La disciplina está en la puesta en escena.

Relacionados en el blog#

Prueba Elido

Pega una URL, obtén un enlace corto

Sin registro. El enlace vive 30 días. Crea una cuenta para conservarlo.

Gratis, sin registro · 2 por día

Prueba Elido

Acortador de URL alojado en la UE: dominios personalizados, análisis profundo y API abierta. Plan gratuito - sin tarjeta de crédito.

Etiquetas
bitly migration
link infrastructure
custom domains
url shortener

Seguir leyendo