Skip to content

Defekte Social-Media-Links mit Wayback Machine CDX prüfen

Aktualisiert am

Prüfe, ob alte Twitter/X-, Reddit- oder Instagram-URLs archivierte Snapshots haben. CDX-Workflow mit URL-Bereinigung, Deduplizierung, Validierung und Charts.

Wenn ein Social-Media-Post verschwunden ist oder eine alte URL nicht mehr lädt, ist die erste Frage oft: Gibt es noch einen Snapshot in der Wayback Machine? CDX hilft bei dieser Prüfung, weil es den Archivindex liefert: erfasste URLs, Zeitstempel, Statuscodes, MIME-Typen, Digests und Antwortgrößen. Das beweist noch nicht, was auf der archivierten Seite sichtbar war. Es liefert aber Kandidaten, die du bereinigen, deduplizieren, visualisieren und anschließend manuell prüfen kannst.

SchrittVorgehenWarum es wichtig ist
1. Seed-URLs sammelnOriginal-URL, Quelle, Sammeldatum und Zieltyp speichernMacht die Herkunft nachvollziehbar
2. Varianten normalisierenTracking-Rauschen entfernen, ohne echte Plattformunterschiede zu verdeckenVerhindert falsche Duplikate
3. CDX abfragenZeitstempel, Original-URL, MIME-Typ, Statuscode, Digest und Länge abrufenErzeugt den rohen Archivdatensatz
4. Zeilen anreichernZeitstempel parsen, Plattform ableiten, Profile, Posts und Threads klassifizierenMacht die Daten auswertbar
5. Sorgfältig deduplizierendigest, URL und Zielgruppen vergleichenVerhindert übertriebene Aussagen zur Archivierung
6. Snapshots validierenhttps://web.archive.org/web/{timestamp}/{original_url} öffnenTrennt Indexeinträge von belastbarer Evidenz
7. Abdeckung visualisierenCaptures nach Plattform, Status, Datum und Ziel darstellenZeigt Lücken und Prüfprioritäten

CDX ist die Indexschicht archivierter Captures. Behandle sie wie einen Katalogeintrag, nicht wie die archivierte Seite selbst.

Für angrenzende Workflows siehe Pandas-Datenbereinigung, Pandas to_datetime, Pandas Drop Duplicates und Web Scraping mit Python.

Warum Social-Media-Archivdaten unordentlich sind

Social-Media-URLs wirken stabil, aber Plattformverhalten macht Archivanalysen schnell unscharf. Ein Twitter/X-Post kann unter twitter.com, x.com oder mobile.twitter.com auftauchen. Ein Reddit-Thread kann alte Pfade, Kommentar-Anker, Query-Parameter und Shortlinks enthalten. Instagram-URLs unterscheiden sich je nach Profil, Post, Reel oder eingebettetem Medienpfad.

Diese Varianten sind wichtig, weil zwei für Menschen identische URLs als getrennte CDX-Schlüssel erscheinen können. Eine zu breite Abfrage sammelt leicht fremde Assets. Eine zu enge Abfrage verpasst Captures unter einem anderen Hostnamen.

Häufige Rauschquellen:

  • URL-Varianten: Hostnamen, abschließende Slashes, Fragmente und Tracking-Parameter.
  • Zeitstempel-Dichte: Viele Captures können wiederholt identische Antworten sein.
  • Plattformverhalten: Redirects, Login-Walls, Interstitials, App-Shells oder stark JavaScript-basierte Seiten.
  • Evidenzverwechslung: Ein CDX-Eintrag wird oft fälschlich als Inhaltsbeweis gelesen.

Das Ziel ist nicht, Social-Media-Archivdaten perfekt zu machen. Das Ziel ist ein prüfbarer Workflow.

Matrix zur öffentlichen Datenverfügbarkeit

Nutze diese Matrix, um vor der Analyse keine zu starken Aussagen zu treffen.

DatentypTwitter/XRedditInstagramTikTok
Öffentliche Profil-MetadatenCDX und Teil-SnapshotsÖffentliches JSON und CDXCDX und Teil-SnapshotsCDX und Teil-Snapshots
Öffentlicher Post-TextAbhängig vom SnapshotÖffentliches JSON und SnapshotsAbhängig vom SnapshotAbhängig vom Snapshot
Öffentliche Post-MedienBest EffortOft einfacher als InstagramSchwierig und unvollständigSchwierig und unvollständig
Gelöschte öffentliche PostsNur wenn vor dem Löschen erfasstNur wenn vor dem Löschen erfasstSeltenSelten
Historische Engagement-ZahlenAbhängig vom SnapshotNeues JSON oder Snapshot-abhängigMeist nicht verfügbarMeist nicht verfügbar

Archivdaten sind am stärksten für öffentliche Seitenhistorie. Sie sind kein privater Export, keine vollständige Account-Historie und kein Beweis dafür, dass fehlende Datensätze nie existiert haben.

Was die CDX API zurückgibt

Die Wayback CDX API liefert Archivindex-Zeilen für ein URL-Muster. Eine kompakte Abfrage sieht so aus:

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"

Die Kernfelder sind:

FeldBedeutungNutzung
timestampCapture-Zeit in YYYYMMDDhhmmssZeitachsen bauen
originalUrsprünglich erfasste URLZiele rekonstruieren und normalisieren
mimetypeMIME-Typ der archivierten AntwortHTML, Bilder, JSON und Assets trennen
statuscodeVom Archiv aufgezeichneter HTTP-StatusRedirects, Fehler und blockierte Antworten filtern
digestInhalts-FingerprintWiederholt identische Captures finden
lengthAntwortgrößeSehr kleine Fehlerseiten oder ungewöhnliche Antworten markieren

collapse=digest kann Duplikate reduzieren. Für Research-Workflows ist es aber oft besser, zuerst rohe Zeilen zu behalten und später mit expliziten Regeln zu deduplizieren.

Datensatz aufbauen

Beginne mit expliziten Seed-URLs:

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/

Ergänze Felder wie source, collection_date, expected_platform, target_type und notes. Provenienz gehört in den Datensatz, nicht in eine separate Erinnerung.

Normalisiere konservativ. Entferne offensichtliches Tracking-Rauschen, aber bewahre Pfade, die einen bestimmten Post, Kommentar oder ein Medienelement identifizieren können:

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), ""))

Wenn zwei URLs unterschiedliche Objekte meinen könnten, behalte beide und füge lieber ein abgeleitetes Feld normalized_group hinzu, statt sie zwangsweise zu einem Wert zu machen.

CDX-Zeilen bereinigen und anreichern

Nach dem Export von CDX JSON oder CSV parsest du den Zeitstempel, konvertierst numerische Felder, leitest die Plattform ab und erzeugst Wayback-Snapshot-URLs:

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)
)

Dedupliziere danach passend zur Frage, die du beantworten willst:

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

Wenn dich jeder Zeitpunkt interessiert, zu dem das Archiv eine URL gesehen hat, behalte mehr Zeilen. Wenn dich unterschiedliche Inhaltszustände interessieren, dedupliziere aggressiver.

Vor jeder Aussage validieren

Eine CDX-Zeile mit statuscode=200 ist ein Hinweis, kein Ergebnis. Der Snapshot kann der ursprüngliche Post sein, aber auch eine Login-Wall, ein Redirect-Ziel, eine App-Shell, ein Interstitial oder ein unvollständiger Capture.

Arbeite mit drei Vertrauensstufen:

StufeBedeutungEinsatz
IndexiertCDX hat eine Zeile geliefertDiscovery und Review-Queue
AbgerufenDer Wayback-Snapshot öffnet sich und zeigt sinnvollen InhaltKandidatenanalyse
ValidiertEin Reviewer hat den benötigten Inhalt oder die Metadaten bestätigtEvidenzsensible Arbeit

Füge für jede Zeile, die eine Schlussfolgerung stützt, Review-Felder hinzu:

SpalteZweck
wayback_urlDirekte Snapshot-URL
validation_statusindexed, retrieved, valid_snapshot, login_wall, redirect_only, error oder unknown
validation_notesMenschlich lesbare Begründung für den Status

Das ist besonders bei Instagram wichtig. Forschung zu Instagram-Captures zeigt, dass viele Mementos auf Login-Seiten umleiten oder Post-Bilder fehlen lassen. Reine Capture-Zahlen können deshalb irreführend sein.

Abdeckung visualisieren

Sobald der Datensatz sauber ist, hilft Visualisierung bei der Entscheidung, welche Reviews sich lohnen:

  • Capture-Zeitachse nach Plattform,
  • Statuscode-Verteilung nach Plattform,
  • MIME-Typ-Verteilung,
  • Anzahl eindeutiger Digests pro Ziel,
  • erstes und letztes Capture-Datum je URL,
  • Duplikatquote nach Plattform.

Für explorative Notebook-Arbeit kann PyGWalker den Dataframe interaktiv untersuchen:

import pygwalker as pyg
 
pyg.walk(deduped)

Für eine schnelle Zusammenfassung:

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 ist nützlich für eine browserbasierte Variante desselben Workflows: bereinigten Datensatz laden, Zeitstempel- und Plattformfelder in eine Zeitachse ziehen und dann zwischen Statuscode-, MIME-Typ- und Digest-Auswertungen wechseln.

Was CDX Daten beweisen können und was nicht

CDX Daten können zeigen, dass eine öffentliche URL archivierte Captures hatte, wann diese Captures indexiert wurden, welcher Statuscode und MIME-Typ aufgezeichnet wurden und ob wiederholte Captures denselben Digest teilen.

CDX Daten können allein nicht beweisen, dass ein gelöschter Post in einer bestimmten Form existierte, dass ein Screenshot authentisch ist, dass die archivierte Seite für alle Nutzer gleich gerendert wurde oder dass jedes Asset, jeder Kommentar, jedes Bild oder jedes Embed erhalten blieb.

Nutze CDX für Discovery und Struktur. Nutze Snapshot-Validierung für Evidenz.

Häufige Fehlerfälle

FehlerfallVorgehen
200-Antwort ist eine Login-WallAls login_wall markieren, nicht als valide Evidenz
Zu viele doppelte Capturesdigest vergleichen, bevor Capture-Volumen interpretiert wird
Redirect-KettenRedirect-only-Zeilen behalten, aber Ziel prüfen
Fehlende AssetsGerenderte Snapshots inspizieren, wenn Bilder oder Video wichtig sind
Hostname-Migrationtwitter.com, x.com und mobile Hostnamen explizit tracken

Wenn du einen UI-first-Workflow bevorzugst, kann PeekVault (opens in a new tab) öffentliche Wayback-Datensätze für Social-Media-URLs durchsuchen und Zeilen als CSV, JSON oder HTML exportieren. Behandle jeden Export als Startdatensatz, der weiterhin validiert werden muss.

Verantwortungsvolle Nutzung

Archivanalysen können sensible Kontexte berühren, besonders wenn Social-Media-Inhalte geändert, gelöscht oder umstritten sind.

Setze diese Grenzen:

  • Arbeite mit öffentlichen Archivdatensätzen.
  • Impliziere keinen Zugriff auf private Accounts oder private Inhalte.
  • Behandle fehlende Archivdatensätze nicht als Beweis dafür, dass etwas nie existiert hat.
  • Behandle eine CDX-Zeile nicht als Inhaltsbeweis, ohne den Snapshot zu öffnen.
  • Bewahre Provenienz und Validierungsnotizen auf.
  • Respektiere Takedown-, Datenschutz- und Sicherheitsbedenken.

Diese Grenzen sind ethisch, aber auch praktisch. Ein Datensatz, der rohe Indexzeilen von validierter Evidenz trennt, lässt sich leichter prüfen, reproduzieren und hinterfragen.

FAQ

Was sind Wayback Machine CDX Daten?

Wayback Machine CDX Daten sind Metadaten des Archivindex. Sie listen erfasste URLs, Zeitstempel, Statuscodes, MIME-Typen, Digests und Längen. Sie helfen dir, mögliche Snapshots zu finden, sind aber nicht der archivierte Seiteninhalt selbst.

Können CDX Daten beweisen, dass ein gelöschter Social-Media-Post existierte?

Nicht allein. CDX Daten können zeigen, dass eine öffentliche URL Archiveinträge hatte. Du musst trotzdem den eigentlichen Wayback-Snapshot prüfen und bestätigen, dass der relevante Inhalt sichtbar und aussagekräftig ist.

Warum scheitert ein 200-Statuscode manchmal in der Archivanalyse?

Ein 200-Status bedeutet, dass das Archiv eine erfolgreiche HTTP-Antwort aufgezeichnet hat. Diese Antwort kann aber trotzdem eine Login-Wall, App-Shell, Redirect-Seite oder unvollständige Erfassung sein. Behandle den Statuscode als Filter, nicht als endgültige Evidenz.

Wie sollte ich wiederholte Wayback-Captures deduplizieren?

Starte mit original plus digest, damit wiederholt identische Antworten für dieselbe URL zu einer Zeile zusammenfallen. Für breitere Analysen vergleiche Deduplizierung nach Plattform, Zieltyp, normalisierter URL und Digest.

Verwandte Anleitungen

Quellen

📚