11 min de lectureMigration
Pilier

Migrer de Bitly vers Elido : un guide technique

Comment déplacer l'infrastructure de liens depuis Bitly sans pic de 404 : export CSV, provisionnement en masse sur Elido, timing du basculement DNS, réconciliation de l'historique de clics et les cinq pièges qui mordent en deuxième semaine.

Ana Kowalska
Marketing solutions engineering
Migrer de Bitly vers Elido : un guide technique

Migrer une infrastructure de liens est à enjeux élevés. Chaque lien court que vous avez jamais imprimé, intégré dans un pied de page d'email ou estampillé sur un code QR est désormais une dépendance. Bougez maladroitement et vous renvoyez en 404 une part significative du trafic entrant pendant des semaines avant que quelqu'un ne le remarque.

Ce guide couvre le passage de Bitly à Elido. Il suppose que vous avez déjà décidé de changer - généralement pour la résidence des données UE, une expérience d'offre gratuite plus propre, la revente en marque blanche, ou un accès API qui n'exige pas le palier Premium (199 $/mois en annuel ou 300 $/mois en mensuel au 05/2026). Si vous êtes encore en évaluation, la page de comparaison à /compare/vs-bitly est le meilleur point de départ.

Ce que vous avez réellement à migrer#

Trois choses bougent ; rien d'autre n'importe au niveau du câble.

  1. Les liens courts actifs. Le slug, la destination, les tags et dossiers optionnels, et le domaine personnalisé (le cas échéant).
  2. Le DNS du domaine personnalisé. L'enregistrement CNAME pointant vers le edge de Bitly doit pointer vers celui d'Elido.
  3. L'historique de clics. Les compteurs agrégés de Bitly - pas les événements bruts (ils ne sont pas exportables).

Tout le reste - tableaux de bord Bitly Sights, codes QR de marque, configurations de deeplink - est de la configuration greenfield sur Elido, pas de la migration. N'essayez pas de les porter ; reconstruisez une fois sur la nouvelle pile.

Le pipeline de migration Bitly vers Elido en cinq etapes : exporter les liens depuis Bitly, mapper les slugs vers les destinations, importer en masse dans Elido, repointer le CNAME du domaine personnalise, puis verifier de bout en bout

Étape 1 : Inventaire#

Bitly limite l'export des données historiques par palier. L'export CSV du tableau de bord fonctionne jusqu'à environ 10K liens ; au-delà, il échoue ou pagine mal. Pour des inventaires plus grands, parcourez l'API directement :

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

Paginez via l'URL pagination.next dans chaque réponse. La taille de page 100 est le maximum. Persistez les résultats en JSONL - un lien par ligne - pour pouvoir reprendre si l'export cale.

Ce que vous voulez de chaque ligne :

  • link - l'URL courte complète (https://bit.ly/abc ou https://yourdomain.com/abc)
  • long_url - la destination
  • tags, archived, created_at
  • link_clicks (total à vie) - le seul historique de clics que vous obtiendrez de Bitly

Filtrez les liens archivés à moins d'avoir une raison de les garder. La plupart des équipes trouvent que 30 à 50 % de leur inventaire est mort - anciennes campagnes, partages ponctuels - et la migration est le bon moment pour laisser tomber les déchets.

Étape 2 : Pré-provisionner sur Elido#

Avant de toucher au DNS, faites réserver chaque lien sur Elido sous le même domaine personnalisé et slug.

Pour les grands inventaires, utilisez links.bulkCreate plutôt que des créations link par link. Vous aurez besoin de votre ID d'espace de travail Elido et de l'ID numérique du domaine (recherchez d'abord le domaine avec 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}` },
  );
}

L'endpoint links.bulkCreate (POST /v1/workspaces/{workspace_id}/links/bulk) accepte jusqu'à 100 liens par appel et renvoie un statut succès/échec par item, donc une défaillance partielle n'interrompt pas le batch. Pour les imports de lien unique, links.create(workspaceId, input, { idempotencyKey }) accepte les mêmes champs domain_id / slug / destination_url / tags et une clé d'idempotence optionnelle pour qu'un script partiel puisse reprendre en toute sécurité.

Quelques choses à savoir avant de lancer le script :

  • Enregistrement du domaine d'abord. Le domain_id dans le corps de la requête doit faire référence à un domaine déjà enregistré dans votre espace de travail. Enregistrez et vérifiez le domaine via le flux de domaines personnalisés avant de commencer l'import. Le domaine n'a pas besoin d'être en service - vous pouvez l'enregistrer sous Elido avant de basculer le DNS.
  • Limites de palier. Elido applique des limites de liens au niveau de l'espace de travail par palier. Pré-provisionner un inventaire de 100K liens exige un plan Business.
  • Limites de débit. La création en masse est soumise aux mêmes limites de débit au niveau de l'espace de travail que les créations individuelles. Une migration de 50K liens prend environ 10 minutes si vous batchez à 100 liens par appel avec un parallélisme modeste. Restez en série ou légèrement concurrent depuis un seul runner pour que le journal d'audit montre un bloc d'import propre.

Étape 3 : Réorienter le domaine personnalisé#

C'est le basculement. Tout ce qui précède est réversible ; tout ce qui suit est en direct.

Abaissez le TTL sur le CNAME Bitly existant au moins 24 heures avant la fenêtre de basculement :

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

Si votre TTL est à 86400 depuis des années, « abaisser le TTL » est une attente de 24 heures, pas une tâche de cinq minutes. Planifiez autour.

Chronologie du basculement DNS : abaisser le TTL du CNAME 24 heures avant, permuter la cible vers edge.elido.me a la fenetre de changement, la premiere requete emet un certificat Let's Encrypt, puis les requetes mises en cache sont servies depuis le edge en quelques millisecondes

Quand la fenêtre de changement s'ouvre, échangez la cible :

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

Le edge d'Elido utilise le TLS automatique à la demande. La première requête après propagation DNS déclenche une émission Let's Encrypt - typiquement 1 à 3 secondes de latence sur cette seule requête, puis le certificat met en cache et les requêtes suivantes sont servies depuis le edge en région UE en quelques millisecondes. Le cert est provisionné automatiquement ; il n'y a pas d'étape de demande de cert manuelle.

Vérifiez avec dig depuis quelques réseaux avant de déclarer le basculement terminé. La propagation DNS est inégale ; ne vérifier que depuis votre portable, c'est n'avoir vérifié qu'un résolveur.

Étape 4 : Réconcilier l'historique de clics#

Bitly n'exporte pas les événements de clics bruts. Ne budgétisez pas de temps pour « importer votre historique » - ce n'est pas possible, et tout outil qui le promet lit des agrégats et les appelle des événements.

Ce que vous obtenez, c'est le compteur link_clicks par lien de l'export API Bitly. Stockez-le quelque part où vous pouvez le joindre contre votre inventaire de liens Elido - une colonne séparée dans un dataset Metabase, un tag si vous le voulez en ligne. Elido commence à compter depuis zéro au basculement.

Reconciliation de l'historique de clics : Bitly exporte uniquement un compteur de clics a vie par lien, Elido compte depuis zero au basculement, et la couche de reporting additionne les deux nombres pour le total reel par lien

Pour la couche de reporting, la formule est : total_clicks = elido_clicks + bitly_lifetime_clicks. L'API analytique expose les données de clics d'Elido à /v1/analytics/workspaces/{workspace_id}/timeseries ; une requête Metabase ou Hex de 20 lignes recoud les deux nombres si vous avez stocké la baseline Bitly.

Si vous avez besoin d'analytique historique granulaire - répartition géo par mois, tendances de référents - elle ne revient pas. Reconstruisez les questions sur le journal d'événements brut d'Elido pour l'avenir ; la migration est la coupure dure.

Cinq pièges qui mordent en deuxième semaine#

1. Liens bit.ly codés en dur dans des actifs statiques. PDF, supports imprimés, extraits d'intégration dans les emails de bienvenue. Ceux-ci pointent vers le domaine de Bitly, pas vers le vôtre. Ils continuent de fonctionner tant que vous gardez le compte Bitly ; ils cassent dès que vous annulez. Soit gardez un compte Bitly gratuit vivant comme cimetière de redirection, soit acceptez la perte et n'annulez pas pendant au moins un an.

2. Double-redirection CDN. Si vous fronttez votre domaine avec Cloudflare en mode proxy (nuage orange), le handshake SSL vers Elido peut entrer en conflit avec le SSL universel de Cloudflare. Réglez le SSL Cloudflare à « Full (Strict) » et supprimez toutes les Page Rules qui référençaient l'ancienne cible Bitly. Ou passez l'enregistrement en nuage gris temporairement pour la fenêtre de basculement.

3. Troncature UTM dans l'export. Bitly montre parfois une URL de destination raccourcie dans le tableau de bord mais stocke l'URL canonique complète. L'export CSV a généralement l'URL complète ; la vue du tableau de bord peut ne pas l'avoir. Si vous scrapez le tableau de bord plutôt que d'appeler l'API, vous perdrez des UTM. Passez toujours par l'API.

4. Limites de débit côté lecture de l'API Bitly. L'API Bitly throttle agressivement sur GET /bitlinks pour les comptes à fort volume. Lire naïvement 1M de liens séquentiellement peut prendre des jours. Paginez en parallèle (4-8 paginateurs concurrents) mais surveillez les 429 ; reculez quand ils se déclenchent.

5. Portée au niveau du compte vs au niveau du groupe Bitly. Les groupes Bitly ne sont pas des espaces de travail. Un seul compte Bitly peut posséder plusieurs groupes, chacun avec sa propre configuration de domaine personnalisé. Si votre équipe a ajouté des domaines sous différents groupes au fil des ans, l'export doit énumérer tous les groupes, pas seulement celui par défaut. Manquez un groupe et ce domaine ne migre pas.

Conformité : pourquoi la plupart des équipes bougent vraiment#

La migration est généralement motivée par la conformité, pas par les fonctionnalités. Le pattern :

  • Le DPO signale Bitly comme sous-traitant basé aux États-Unis ; la dépendance au Data Privacy Framework reçoit des objections lors d'un audit.
  • L'approvisionnement demande la liste des sous-traitants ; celle de Bitly s'étend à 20+ fournisseurs.
  • Le BAA sur le plan Premium (300 $/mois facturé mensuellement, ou 199 $/mois en engagement annuel, au 05/2026 - vérifiez la tarification actuelle) devient une exigence pour les clients adjacents santé, et le saut de palier est le déclencheur.

Elido est hébergé dans l'UE par défaut - les événements de clics passent par la région UE, avec US Est et Asie-Pacifique disponibles comme régions Business+ optionnelles. La liste des sous-traitants compte cinq fournisseurs, publiée à /legal/subprocessors. ISO 27001 est en cours ; SOC 2 Type II est en audit. Le BAA est disponible sur Business+. Schrems II n'est pas une préoccupation sur la configuration par défaut parce que les données ne quittent pas l'EEE à moins qu'un espace de travail n'épingle explicitement à une région non-UE.

Si la conformité est le moteur, le plan de migration devrait inclure un diagramme de flux de données côte à côte : où vivaient les événements de clics avant, où ils vivent maintenant. Ce diagramme est ce que votre auditeur veut lors de la prochaine évaluation.

L'auto-hébergement comme alternative#

Pour les équipes dont la posture de sécurité exclut tout SaaS de raccourcissement - services financiers, gouvernement, santé - Elido livre un chart Helm Apache 2.0. Les mêmes binaires qui tournent dans notre région UE, déployés dans votre VPC, votre propre KMS pour le chiffrement, pas de sous-traitants tiers. La migration ressemble à l'identique sauf l'étape 3 (DNS) qui pointe vers votre ingress dans le cluster au lieu de edge.elido.me.

Le runbook d'auto-hébergement couvre l'installation Helm, l'amorçage des secrets et le câblage de la couche d'authentification ; comptez une demi-journée pour un déploiement frais sur un cluster k8s existant.

Workflow développeur après la migration#

Une fois sur Elido, l'API est la surface principale pour toute équipe créant plus de quelques liens par semaine. La spec OpenAPI 3.1 vit à /help ; le package @elido/sdk couvre l'API en TypeScript, et un SDK Go est livré dans packages/sdk-go.

Pour les workflows pilotés par agent, le serveur MCP open source connecte Elido à Claude, Cursor ou tout client compatible MCP :

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

Lecture seule par défaut - les agents peuvent interroger l'analytique et rechercher des liens sans écritures. Accorder la portée d'écriture est un paramètre délibéré par espace de travail.

Checklist finale avant basculement#

  • Le token API Bitly a accès à tous les groupes, pas seulement celui par défaut
  • Inventaire exporté en JSONL, liens archivés filtrés, comptage croisé contre le tableau de bord Bitly
  • Tous les slugs pré-provisionnés sur Elido sous le bon domaine personnalisé ; le script a renvoyé 100 % de succès en dry-run
  • Domaine personnalisé enregistré et vérifié dans l'espace de travail Elido avant de toucher au DNS
  • TTL DNS sur le CNAME Bitly existant abaissé à 300s, au moins 24 heures avant le basculement
  • Mode proxy Cloudflare et réglage SSL vérifiés compatibles avec le edge d'Elido
  • Comptes de clics à vie Bitly capturés à l'heure du basculement et stockés pour le reporting
  • Au moins un lien de test inverse imprimé et scanné pour confirmer de bout en bout
  • Compte Bitly programmé pour rester actif 90 jours après le basculement comme assurance pour les liens bit.ly codés en dur

Bien fait, le changement côté utilisateur est invisible. Mal fait, vous passez deux semaines à gérer des tickets « pourquoi bit.ly est cassé ? » de quelqu'un qui ne réalise pas que ce n'est pas sa faute.

Le travail technique est simple. La discipline est dans la mise en scène.

À lire aussi sur le blog#

Essayer Elido

Collez une URL, obtenez un lien court

Sans inscription. Lien actif 30 jours. Inscrivez-vous pour le garder pour toujours.

Gratuit, sans inscription · 2 par jour

Essayer Elido

Raccourcisseur d'URL hébergé en UE : domaines personnalisés, analyses approfondies et API ouverte. Forfait gratuit - sans carte bancaire.

Tags
bitly migration
link infrastructure
custom domains
url shortener

Lire la suite