Vérifier des liens morts de réseaux sociaux avec Wayback Machine CDX
Mis à jour le

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 | À faire | Pourquoi c'est important |
|---|---|---|
| 1. Collecter les URLs de départ | Stocker URL originale, source, date de collecte et type de cible | Garde la provenance visible |
| 2. Normaliser les variantes | Retirer le tracking sans masquer les différences réelles entre plateformes | Évite les faux doublons |
| 3. Interroger CDX | Extraire timestamp, URL originale, MIME, statut, digest et longueur | Crée le dataset brut d'archive |
| 4. Enrichir les lignes | Parser les dates, inférer la plateforme, classer profils, posts ou fils | Rend les données analysables |
| 5. Dédupliquer prudemment | Comparer digest, URL et groupes de cibles | Évite de surestimer la conservation |
| 6. Valider les snapshots | Ouvrir https://web.archive.org/web/{timestamp}/{original_url} | Sépare les lignes indexées des preuves |
| 7. Visualiser la couverture | Grapher captures par plateforme, statut, date et cible | Ré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ée | Twitter/X | TikTok | ||
|---|---|---|---|---|
| Métadonnées publiques de profil | CDX et snapshots partiels | JSON public et CDX | CDX et snapshots partiels | CDX et snapshots partiels |
| Texte public des posts | Dépend du snapshot | JSON public et snapshots | Dépend du snapshot | Dépend du snapshot |
| Médias publics | Au mieux | Souvent plus simple qu'Instagram | Difficile et partiel | Difficile et partiel |
| Posts publics supprimés | Seulement si capturés avant suppression | Seulement si capturés avant suppression | Rare | Rare |
| Compteurs d'engagement historiques | Dépendent du snapshot | JSON récent ou snapshot | Généralement indisponibles | Gé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 :
| Champ | Signification | Usage |
|---|---|---|
timestamp | Date de capture au format YYYYMMDDhhmmss | Construire des timelines |
original | URL originale capturée | Retrouver et normaliser les cibles |
mimetype | Type MIME de la réponse archivée | Séparer HTML, images, JSON et assets |
statuscode | Statut HTTP enregistré par l'archive | Filtrer redirections, erreurs et blocages |
digest | Empreinte du contenu | Trouver des captures identiques répétées |
length | Taille de la réponse | Signaler 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 :
| Niveau | Signification | À utiliser pour |
|---|---|---|
| Indexé | CDX a renvoyé une ligne | Découverte et file de revue |
| Récupéré | Le snapshot Wayback s'ouvre et renvoie un contenu utile | Analyse candidate |
| Validé | Une personne confirme que le contenu ou les métadonnées nécessaires sont visibles | Travail sensible aux preuves |
Pour chaque ligne qui soutient une conclusion, ajoutez des champs de revue :
| Colonne | Rôle |
|---|---|
wayback_url | URL directe du snapshot |
validation_status | indexed, retrieved, valid_snapshot, login_wall, redirect_only, error ou unknown |
validation_notes | Raison 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
digestuniques 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'échec | Que faire |
|---|---|
Une réponse 200 est un mur de connexion | La marquer login_wall, pas comme preuve valide |
| Trop de captures dupliquées | Comparer digest avant d'interpréter le volume |
| Chaînes de redirection | Garder les lignes de redirection, mais vérifier la destination |
| Assets manquants | Inspecter les snapshots rendus si images ou vidéos comptent |
| Migration de hostname | Suivre 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
- Hub Data Science
- Meilleurs datasets publics pour vos projets
- Nettoyage de données avec Pandas
- Pandas to_datetime
- Supprimer les doublons avec Pandas
- Exporter un DataFrame en CSV
- Web scraping avec Python
Références
- Internet Archive : documentation de Wayback CDX Server API (opens in a new tab)
- Bragg et Weigle : Discovering the Traces of Disinformation on Instagram in the Internet Archive (opens in a new tab)
- Kanaries : documentation PyGWalker (opens in a new tab)
- Kanaries : documentation Graphic Walker (opens in a new tab)