Skip to content

Cómo comprobar enlaces rotos de redes sociales con Wayback Machine CDX

Actualizado el

Comprueba si URLs antiguas de Twitter/X, Reddit o Instagram tienen capturas archivadas. Guía con CDX, limpieza de URLs, deduplicación, validación y gráficos.

Cuando un post desaparece o una URL social deja de abrir, la primera pregunta suele ser si Wayback Machine guardó alguna captura. CDX ayuda a responder eso porque funciona como un índice de archivo: URLs capturadas, fechas, códigos de estado, tipos MIME, huellas digest y tamaños de respuesta. No prueba por sí solo qué mostraba la página, pero sí permite encontrar candidatos, limpiar datos, deduplicar, visualizar cobertura y validar snapshots antes de sacar conclusiones.

PasoQué hacerPor qué importa
1. Reunir URLs semillaGuardar URL original, fuente, fecha de recolección y tipo de objetivoMantiene visible la procedencia
2. Normalizar variantesQuitar ruido de tracking sin borrar diferencias reales de plataformaEvita falsos duplicados
3. Consultar CDXExtraer timestamp, URL original, MIME, estado, digest y longitudCrea el dataset bruto del archivo
4. Enriquecer filasParsear fechas, inferir plataforma y clasificar perfiles, posts o hilosHace los datos analizables
5. Deduplicar con cuidadoComparar digest, URL y grupos de objetivoEvita exagerar la preservación
6. Validar snapshotsAbrir https://web.archive.org/web/{timestamp}/{original_url}Separa filas indexadas de evidencia
7. Visualizar coberturaGraficar capturas por plataforma, estado, fecha y objetivoMuestra huecos y prioridades de revisión

CDX es la capa de índice de las capturas archivadas. Piensa en ella como una ficha de catálogo, no como la página archivada.

Para flujos cercanos, consulta limpieza de datos con Pandas, Pandas to_datetime, eliminación de duplicados en Pandas y web scraping con Python.

Por qué los archivos de redes sociales son ruidosos

Las URLs sociales parecen estables, pero el comportamiento de cada plataforma complica el análisis. Un post de Twitter/X puede aparecer bajo twitter.com, x.com o mobile.twitter.com. Un hilo de Reddit puede incluir rutas antiguas, anclas de comentarios, parámetros de consulta y enlaces cortos. En Instagram, las rutas cambian entre perfil, publicación, reel y recursos incrustados.

Estas variantes importan porque dos URLs equivalentes para una persona pueden aparecer como claves CDX distintas. Una consulta demasiado amplia puede traer assets irrelevantes. Una consulta demasiado estrecha puede perder capturas alojadas en otro hostname.

Fuentes habituales de ruido:

  • Variantes de URL: hostnames, barras finales, fragmentos y parámetros de tracking.
  • Densidad temporal: muchas capturas pueden ser respuestas idénticas repetidas.
  • Comportamiento de plataforma: redirecciones, muros de login, intersticiales, shells de aplicación o páginas muy dependientes de JavaScript.
  • Confusión probatoria: una fila CDX se trata a veces como si fuera prueba del contenido.

El objetivo no es hacer perfecto el archivo social. El objetivo es que el flujo sea auditable.

Matriz de disponibilidad pública

Usa esta matriz para no prometer más de lo que los datos pueden sostener.

Tipo de datoTwitter/XRedditInstagramTikTok
Metadatos públicos de perfilCDX y snapshots parcialesJSON público y CDXCDX y snapshots parcialesCDX y snapshots parciales
Texto público de postsDepende del snapshotJSON público y snapshotsDepende del snapshotDepende del snapshot
Medios públicosMejor esfuerzoA menudo más fácil que InstagramDifícil y parcialDifícil y parcial
Posts públicos eliminadosSolo si se capturaron antes de borrarseSolo si se capturaron antes de borrarseRaroRaro
Métricas históricas de interacciónDependen del snapshotJSON reciente o snapshotNormalmente no disponibleNormalmente no disponible

Los datos de archivo son más sólidos para estudiar el historial de páginas públicas. No son una exportación privada, un historial completo de cuenta ni una prueba de que los registros ausentes nunca existieron.

Qué devuelve la API CDX

La Wayback CDX API devuelve filas de índice para un patrón de URL. Una consulta compacta se ve así:

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"

Campos principales:

CampoSignificadoUso
timestampHora de captura en YYYYMMDDhhmmssConstruir líneas de tiempo
originalURL original capturadaRecuperar y normalizar objetivos
mimetypeTipo MIME de la respuesta archivadaSeparar HTML, imágenes, JSON y assets
statuscodeEstado HTTP registrado por el archivoFiltrar redirecciones, errores y bloqueos
digestHuella del contenidoDetectar capturas idénticas repetidas
lengthTamaño de la respuestaMarcar páginas de error pequeñas o respuestas raras

collapse=digest puede reducir duplicados, pero en investigación suele ser mejor conservar primero las filas brutas y deduplicar después con reglas explícitas.

Construir el dataset

Empieza con URLs semilla explícitas:

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/

Añade campos como source, collection_date, expected_platform, target_type y notes. La procedencia forma parte del dataset; no debe quedar como memoria externa.

Normaliza con criterio conservador. Elimina tracking evidente, pero conserva rutas que puedan identificar un post, comentario o recurso concreto:

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 dos URLs podrían representar objetos distintos, conserva ambas y añade un campo derivado normalized_group en lugar de forzarlas a un único valor.

Limpiar y enriquecer filas CDX

Después de exportar CDX en JSON o CSV, parsea el timestamp, convierte campos numéricos, infiere la plataforma y crea URLs directas de 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)
)

Luego deduplica según la pregunta de análisis:

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

Si te importa cada vez que el archivo vio una URL, conserva más filas. Si te importan estados de contenido distintos, deduplica con más fuerza.

Validar antes de afirmar

Una fila CDX con statuscode=200 es una pista, no una conclusión. El snapshot puede ser el post original, pero también un muro de login, una redirección, un shell de app, un intersticial o una captura parcial.

Usa tres niveles de confianza:

NivelSignificadoÚsalo para
IndexadoCDX devolvió una filaDescubrimiento y colas de revisión
RecuperadoEl snapshot de Wayback abre y muestra contenido útilAnálisis candidato
ValidadoUna persona confirmó que el contenido o metadato necesario es visibleTrabajo sensible a evidencia

Para cada fila que apoye una conclusión, añade campos de revisión:

ColumnaPropósito
wayback_urlURL directa del snapshot
validation_statusindexed, retrieved, valid_snapshot, login_wall, redirect_only, error o unknown
validation_notesMotivo legible del estado

Esto es especialmente importante en Instagram. Investigaciones sobre capturas de Instagram han encontrado que muchos mementos redirigen a login o no incluyen imágenes de posts, por lo que los conteos brutos pueden engañar.

Visualizar cobertura

Cuando el dataset está limpio, la visualización ayuda a decidir si merece la pena revisar más:

  • línea temporal de capturas por plataforma,
  • distribución de códigos de estado por plataforma,
  • distribución de tipos MIME,
  • número de digest únicos por objetivo,
  • primera y última fecha de captura por URL,
  • ratio de duplicados por plataforma.

Para exploración en notebooks, PyGWalker permite inspeccionar el dataframe de forma interactiva:

import pygwalker as pyg
 
pyg.walk(deduped)

Para una tabla resumen rápida:

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 es útil si prefieres el mismo flujo en navegador: carga el dataset limpio, arrastra campos de fecha y plataforma a una línea temporal y cambia entre resúmenes por estado, MIME y digest.

Qué puede y no puede probar CDX

CDX puede ayudar a establecer que una URL pública tuvo capturas archivadas, cuándo se indexaron, qué código de estado y tipo MIME se registraron y si varias capturas parecen compartir una misma huella digest.

CDX no puede probar por sí solo que un post eliminado existiera con una forma exacta, que una captura de pantalla sea auténtica, que la página archivada se renderizara igual para todos los usuarios ni que todos los assets, comentarios, imágenes o embeds se conservaran.

Usa CDX para descubrir y estructurar. Usa validación de snapshots para evidencia.

Fallos comunes

CasoQué hacer
Una respuesta 200 es un muro de loginEtiquétala como login_wall, no como evidencia válida
Demasiadas capturas duplicadasCompara digest antes de interpretar el volumen
Cadenas de redirecciónConserva filas de solo redirección, pero revisa el destino
Assets ausentesInspecciona snapshots renderizados si importan imágenes o video
Migración de hostnameRastrea twitter.com, x.com y hostnames móviles explícitamente

Si prefieres empezar desde una interfaz, PeekVault (opens in a new tab) puede buscar registros públicos de Wayback para URLs sociales y exportar filas como CSV, JSON o HTML. Trata cualquier exportación como dataset inicial que todavía requiere validación.

Uso responsable

El análisis de archivos puede tocar contextos sensibles, sobre todo cuando el contenido social cambió, desapareció o está en disputa.

Límites recomendados:

  • Trabaja con registros de archivo públicos.
  • No insinúes acceso a cuentas o contenido privado.
  • No trates la ausencia de registros como prueba de que algo nunca existió.
  • No trates una fila CDX como prueba de contenido sin abrir el snapshot.
  • Conserva procedencia y notas de validación.
  • Respeta solicitudes de retirada, privacidad y seguridad.

Estos límites son éticos y prácticos. Un dataset que separa filas brutas de índice y evidencia validada es más fácil de revisar, reproducir y cuestionar.

Preguntas frecuentes

¿Qué son los datos CDX de Wayback Machine?

Son metadatos del índice de archivo. Enumeran URLs capturadas, timestamps, códigos de estado, tipos MIME, huellas digest y tamaños. Ayudan a encontrar snapshots candidatos, pero no son el contenido archivado de la página.

¿CDX puede probar que existió un post eliminado?

No por sí solo. CDX puede mostrar que una URL pública tuvo registros de archivo, pero aún debes inspeccionar el snapshot real de Wayback y confirmar que el contenido relevante es visible y significativo.

¿Por qué un estado 200 a veces falla en análisis de archivo?

Un 200 significa que el archivo registró una respuesta HTTP exitosa, pero esa respuesta puede ser un muro de login, un shell de app, una redirección o una captura incompleta. Trátalo como filtro, no como evidencia final.

¿Cómo deduplicar capturas repetidas de Wayback?

Empieza con original más digest para colapsar respuestas idénticas de la misma URL en una sola fila. Para análisis más amplio, compara deduplicación por plataforma, tipo de objetivo, URL normalizada y digest.

Guías relacionadas

Referencias

📚