Skip to content

Vérifier des liens morts de réseaux sociaux avec Wayback Machine CDX

Mis à jour le

Vérifiez si d'anciennes URLs Twitter/X, Reddit ou Instagram ont des captures archivées. Guide CDX avec nettoyage d'URLs, déduplication, validation et graphiques.

Quand un post disparaît ou qu'une ancienne URL sociale ne s'ouvre plus, la bonne première question est simple : Wayback Machine a-t-elle gardé une capture ? Les données CDX servent à le vérifier, car elles listent les URLs capturées, horodatages, codes de statut, types MIME, empreintes digest et tailles de réponse. Elles ne prouvent pas le contenu de la page à elles seules, mais elles permettent de trouver des candidats, nettoyer les données, dédupliquer, visualiser la couverture et valider les snapshots avant de conclure.

ÉtapeÀ fairePourquoi c'est important
1. Collecter les URLs de départStocker URL originale, source, date de collecte et type de cibleGarde la provenance visible
2. Normaliser les variantesRetirer le tracking sans masquer les différences réelles entre plateformesÉvite les faux doublons
3. Interroger CDXExtraire timestamp, URL originale, MIME, statut, digest et longueurCrée le dataset brut d'archive
4. Enrichir les lignesParser les dates, inférer la plateforme, classer profils, posts ou filsRend les données analysables
5. Dédupliquer prudemmentComparer digest, URL et groupes de ciblesÉvite de surestimer la conservation
6. Valider les snapshotsOuvrir https://web.archive.org/web/{timestamp}/{original_url}Sépare les lignes indexées des preuves
7. Visualiser la couvertureGrapher captures par plateforme, statut, date et cibleRévèle les manques et priorités de revue

CDX est la couche d'index des captures archivées. Pensez-y comme à une notice de catalogue, pas comme à la page archivée elle-même.

Pour des workflows proches, consultez le nettoyage de données avec Pandas, Pandas to_datetime, la suppression des doublons avec Pandas et le web scraping avec Python.

Pourquoi les archives sociales sont difficiles à exploiter

Les URLs sociales semblent stables, mais le comportement des plateformes rend l'analyse d'archives web bruyante. Un post Twitter/X peut apparaître sous twitter.com, x.com ou mobile.twitter.com. Un fil Reddit peut contenir d'anciens chemins, des ancres de commentaires, des paramètres de requête et des liens courts. Les URLs Instagram varient selon qu'il s'agit d'un profil, d'un post, d'un reel ou d'un média intégré.

Ces variantes comptent : deux URLs équivalentes pour un lecteur peuvent devenir deux clés CDX distinctes. Une requête trop large ramène des assets sans rapport ; une requête trop étroite manque des captures sous un autre hostname.

Sources fréquentes de bruit :

  • Variantes d'URL : hostnames, barres finales, fragments et paramètres de tracking.
  • Densité temporelle : plusieurs captures peuvent représenter la même réponse répétée.
  • Comportement de plateforme : redirections, murs de connexion, interstitiels, shells d'application ou pages très JavaScript.
  • Confusion de preuve : une ligne CDX est parfois prise pour une preuve de contenu.

Le but n'est pas de rendre les archives sociales parfaites. Le but est de rendre le workflow vérifiable.

Matrice de disponibilité des données publiques

Utilisez cette matrice pour éviter de surinterpréter les données dès le départ.

Type de donnéeTwitter/XRedditInstagramTikTok
Métadonnées publiques de profilCDX et snapshots partielsJSON public et CDXCDX et snapshots partielsCDX et snapshots partiels
Texte public des postsDépend du snapshotJSON public et snapshotsDépend du snapshotDépend du snapshot
Médias publicsAu mieuxSouvent plus simple qu'InstagramDifficile et partielDifficile et partiel
Posts publics supprimésSeulement si capturés avant suppressionSeulement si capturés avant suppressionRareRare
Compteurs d'engagement historiquesDépendent du snapshotJSON récent ou snapshotGénéralement indisponiblesGénéralement indisponibles

Les données d'archive sont surtout solides pour l'historique de pages publiques. Elles ne sont ni une exportation privée, ni l'historique complet d'un compte, ni une preuve que les absences n'ont jamais existé.

Ce que renvoie l'API CDX

L'API Wayback CDX renvoie des lignes d'index pour un motif d'URL. Une requête compacte ressemble à ceci :

curl "https://web.archive.org/cdx/search/cdx?url=twitter.com/*/status/*&output=json&fl=timestamp,original,mimetype,statuscode,digest,length&filter=statuscode:200&limit=100"

Les champs essentiels sont :

ChampSignificationUsage
timestampDate de capture au format YYYYMMDDhhmmssConstruire des timelines
originalURL originale capturéeRetrouver et normaliser les cibles
mimetypeType MIME de la réponse archivéeSéparer HTML, images, JSON et assets
statuscodeStatut HTTP enregistré par l'archiveFiltrer redirections, erreurs et blocages
digestEmpreinte du contenuTrouver des captures identiques répétées
lengthTaille de la réponseSignaler petites pages d'erreur ou réponses atypiques

collapse=digest peut réduire les doublons, mais en recherche il vaut souvent mieux garder les lignes brutes puis dédupliquer avec des règles explicites.

Construire le dataset

Commencez avec des URLs de départ explicites :

label,platform,url
example_x_post,x,https://twitter.com/example/status/1234567890
example_reddit_thread,reddit,https://www.reddit.com/r/example/comments/abc123/example_thread/
example_instagram_profile,instagram,https://www.instagram.com/example/

Ajoutez source, collection_date, expected_platform, target_type et notes. La provenance fait partie du dataset.

Normalisez avec prudence. Supprimez le tracking évident, mais conservez les chemins qui peuvent identifier un post, un commentaire ou un média précis :

from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse
 
TRACKING_PREFIXES = ("utm_",)
TRACKING_KEYS = {"fbclid", "gclid", "igshid"}
 
def normalize_url(url: str) -> str:
    parsed = urlparse(url.strip())
    query = [
        (key, value)
        for key, value in parse_qsl(parsed.query, keep_blank_values=True)
        if key not in TRACKING_KEYS
        and not any(key.startswith(prefix) for prefix in TRACKING_PREFIXES)
    ]
    path = parsed.path[:-1] if parsed.path != "/" and parsed.path.endswith("/") else parsed.path
    return urlunparse(("https", parsed.netloc.lower(), path, "", urlencode(query), ""))

Si deux URLs peuvent représenter des objets différents, gardez les deux et ajoutez normalized_group au lieu de les fusionner.

Nettoyer et enrichir les lignes CDX

Après export CDX en JSON ou CSV, parsez l'horodatage, convertissez les champs numériques, inférez la plateforme et créez les URLs Wayback :

from urllib.parse import urlparse
import pandas as pd
 
df = pd.read_csv("social_cdx_export.csv")
 
df["captured_at"] = pd.to_datetime(
    df["timestamp"].astype(str),
    format="%Y%m%d%H%M%S",
    utc=True,
    errors="coerce",
)
df["capture_month"] = df["captured_at"].dt.strftime("%Y-%m")
df["statuscode"] = pd.to_numeric(df["statuscode"], errors="coerce")
df["length"] = pd.to_numeric(df["length"], errors="coerce")
 
def platform_from_url(url: str) -> str:
    host = urlparse(str(url)).netloc.lower()
    if "twitter.com" in host or "x.com" in host:
        return "x"
    if "reddit.com" in host:
        return "reddit"
    if "instagram.com" in host:
        return "instagram"
    return "other"
 
df["platform"] = df["original"].apply(platform_from_url)
df["wayback_url"] = (
    "https://web.archive.org/web/"
    + df["timestamp"].astype(str)
    + "/"
    + df["original"].astype(str)
)

Dédupliquez ensuite selon la question posée :

deduped = (
    df.sort_values("captured_at")
      .drop_duplicates(subset=["original", "digest"], keep="first")
      .copy()
)
 
duplicate_ratio = 1 - (len(deduped) / len(df))

Si vous voulez savoir chaque fois que l'archive a vu une URL, gardez plus de lignes. Si vous cherchez des états de contenu distincts, dédupliquez plus agressivement.

Valider avant de conclure

Une ligne CDX avec statuscode=200 est une piste, pas une conclusion. Le snapshot peut être le post original, mais aussi un mur de connexion, une redirection, un shell d'application, un interstitiel ou une capture partielle.

Utilisez trois niveaux de confiance :

NiveauSignificationÀ utiliser pour
IndexéCDX a renvoyé une ligneDécouverte et file de revue
RécupéréLe snapshot Wayback s'ouvre et renvoie un contenu utileAnalyse candidate
ValidéUne personne confirme que le contenu ou les métadonnées nécessaires sont visiblesTravail sensible aux preuves

Pour chaque ligne qui soutient une conclusion, ajoutez des champs de revue :

ColonneRôle
wayback_urlURL directe du snapshot
validation_statusindexed, retrieved, valid_snapshot, login_wall, redirect_only, error ou unknown
validation_notesRaison lisible du statut

C'est particulièrement important pour Instagram. Des recherches ont montré que beaucoup de mementos redirigent vers des pages de connexion ou perdent les images des posts ; les compteurs bruts peuvent donc tromper.

Visualiser la couverture

Une fois le dataset propre, la visualisation aide à prioriser la revue :

  • timeline des captures par plateforme,
  • distribution des codes de statut par plateforme,
  • distribution des types MIME,
  • nombre de digest uniques par cible,
  • première et dernière date de capture par URL,
  • ratio de doublons par plateforme.

Pour l'exploration en notebook, PyGWalker peut inspecter le dataframe de manière interactive :

import pygwalker as pyg
 
pyg.walk(deduped)

Pour une table de synthèse rapide :

summary = (
    df.groupby("platform")
      .agg(
          total_captures=("original", "count"),
          unique_urls=("original", "nunique"),
          unique_digests=("digest", "nunique"),
          first_capture=("captured_at", "min"),
          last_capture=("captured_at", "max"),
      )
      .reset_index()
)
summary["duplicate_ratio"] = 1 - summary["unique_digests"] / summary["total_captures"]

Graphic Walker est pratique dans un navigateur : chargez le dataset nettoyé, glissez date et plateforme dans une timeline, puis alternez entre résumés par statut, MIME et digest.

Ce que CDX peut prouver, ou non

Les données CDX peuvent aider à établir qu'une URL publique a eu des captures archivées, quand elles ont été indexées, quel code de statut et type MIME ont été enregistrés et si plusieurs captures semblent partager une même empreinte digest.

CDX ne peut pas prouver seul qu'un post supprimé existait sous une forme précise, qu'une capture d'écran est authentique, que la page archivée s'affichait pareil pour tous, ni que tous les assets, commentaires, images ou embeds ont été conservés.

Utilisez CDX pour la découverte et la structure. Utilisez la validation des snapshots pour la preuve.

Cas d'échec fréquents

Cas d'échecQue faire
Une réponse 200 est un mur de connexionLa marquer login_wall, pas comme preuve valide
Trop de captures dupliquéesComparer digest avant d'interpréter le volume
Chaînes de redirectionGarder les lignes de redirection, mais vérifier la destination
Assets manquantsInspecter les snapshots rendus si images ou vidéos comptent
Migration de hostnameSuivre explicitement twitter.com, x.com et les hostnames mobiles

Si vous préférez commencer par une interface, PeekVault (opens in a new tab) peut chercher des enregistrements Wayback publics pour des URLs sociales et exporter les lignes en CSV, JSON ou HTML. Considérez tout export comme un dataset de départ qui demande encore validation.

Usage responsable

L'analyse d'archives peut toucher des contextes sensibles, surtout quand des contenus sociaux ont changé, disparu ou sont contestés.

Gardez ces limites :

  • Travaillez avec des enregistrements d'archive publics.
  • Ne suggérez pas l'accès à des comptes ou contenus privés.
  • Ne traitez pas l'absence d'archives comme preuve que quelque chose n'a jamais existé.
  • Ne traitez pas une ligne CDX comme preuve de contenu sans ouvrir le snapshot.
  • Conservez la provenance et les notes de validation.
  • Respectez les demandes de retrait, la vie privée et les questions de sécurité.

Ces limites sont éthiques, mais aussi pratiques. Un dataset qui sépare les lignes brutes d'index et les preuves validées est plus facile à relire, reproduire et contester.

FAQ

Que sont les données CDX de Wayback Machine ?

Ce sont des métadonnées d'index d'archive. Elles listent URLs capturées, horodatages, codes de statut, types MIME, empreintes digest et tailles. Elles aident à trouver des snapshots candidats, mais ne sont pas le contenu archivé lui-même.

CDX peut-il prouver qu'un post supprimé a existé ?

Pas seul. CDX peut montrer qu'une URL publique possède des enregistrements d'archive, mais il faut encore inspecter le snapshot Wayback réel et confirmer que le contenu utile est visible et exploitable.

Pourquoi un statut 200 échoue-t-il parfois en analyse d'archives ?

Un 200 signifie que l'archive a enregistré une réponse HTTP réussie, mais cette réponse peut être un mur de connexion, un shell d'application, une page de redirection ou une capture incomplète. Utilisez le statut comme filtre, pas comme preuve finale.

Comment dédupliquer des captures Wayback répétées ?

Commencez par original plus digest pour réduire les réponses identiques d'une même URL à une ligne. Pour une analyse plus large, comparez les déduplications par plateforme, type de cible, URL normalisée et digest.

Guides associés

Références

📚