Skip to content

Como verificar links quebrados de redes sociais com Wayback Machine CDX

Atualizado em

Veja se URLs antigas do Twitter/X, Reddit ou Instagram ainda têm snapshots arquivados. Guia com CDX, limpeza de URLs, deduplicação, validação e gráficos.

Quando um post some ou uma URL antiga de rede social para de abrir, a primeira pergunta é se o Wayback Machine guardou algum snapshot. Os dados CDX ajudam nessa checagem porque funcionam como um índice do arquivo: URLs capturadas, timestamps, status codes, MIME types, digests e tamanho da resposta. Eles não provam o conteúdo da página sozinhos, mas ajudam a encontrar capturas candidatas, limpar dados, deduplicar, visualizar cobertura e validar snapshots antes de fazer afirmações.

EtapaO que fazerPor que importa
1. Coletar URLs-sementeGuardar URL original, fonte, data de coleta e tipo de alvoMantém a proveniência visível
2. Normalizar variantesRemover ruído de rastreamento sem esconder diferenças reais da plataformaEvita falsos duplicados
3. Consultar o CDXTrazer timestamp, URL original, MIME type, status code, digest e tamanhoCria o dataset bruto de arquivo
4. Enriquecer linhasParsear timestamps, inferir plataforma e classificar perfis, posts e threadsTorna os dados analisáveis
5. Deduplicar com cuidadoComparar digest, URL e grupos de alvoEvita exagerar a preservação
6. Validar snapshotsAbrir https://web.archive.org/web/{timestamp}/{original_url}Separa linhas indexadas de evidência
7. Visualizar coberturaCriar gráficos por plataforma, status, data e alvoRevela lacunas e prioridades de revisão

CDX é a camada de índice das capturas arquivadas. Pense nele como uma entrada de catálogo, não como a própria página arquivada.

Para fluxos relacionados, veja limpeza de dados com Pandas, Pandas to_datetime, Pandas Drop Duplicates e web scraping com Python.

Por que dados arquivados de redes sociais são bagunçados

URLs de redes sociais parecem estáveis, mas o comportamento das plataformas deixa a análise de arquivo cheia de ruído. Um post do Twitter/X pode aparecer em twitter.com, x.com ou mobile.twitter.com. Uma thread do Reddit pode incluir caminhos antigos, âncoras de comentário, parâmetros de query e shortlinks. URLs do Instagram variam entre perfil, post, reel e caminhos de mídia incorporada.

Essas variantes importam porque duas URLs equivalentes para uma pessoa podem aparecer como chaves CDX separadas. Uma consulta ampla demais pode coletar assets irrelevantes. Uma consulta estreita demais pode perder capturas em outro hostname.

Fontes comuns de ruído:

  • Variantes de URL: hostnames, barras finais, fragmentos e parâmetros de rastreamento.
  • Densidade de timestamps: muitas capturas podem representar respostas idênticas repetidas.
  • Comportamento da plataforma: redirects, telas de login, intersticiais, app shells ou páginas pesadas em JavaScript.
  • Confusão de evidência: uma linha CDX costuma ser confundida com prova de conteúdo.

O objetivo não é deixar dados arquivados de redes sociais perfeitos. O objetivo é tornar o fluxo auditável.

Matriz de disponibilidade de dados públicos

Use esta matriz para evitar conclusões fortes antes de começar a análise.

Tipo de dadoTwitter/XRedditInstagramTikTok
Metadados públicos de perfilCDX e snapshots parciaisJSON público e CDXCDX e snapshots parciaisCDX e snapshots parciais
Texto público de postDepende do snapshotJSON público e snapshotsDepende do snapshotDepende do snapshot
Mídia pública de postMelhor esforçoMuitas vezes mais fácil que InstagramDifícil e parcialDifícil e parcial
Posts públicos excluídosSó se capturados antes da exclusãoSó se capturados antes da exclusãoRaroRaro
Contagens históricas de engajamentoDepende do snapshotJSON recente ou depende do snapshotGeralmente indisponívelGeralmente indisponível

Dados de arquivo são mais fortes para histórico de páginas públicas. Eles não são exportação privada, histórico completo de uma conta nem prova de que registros ausentes nunca existiram.

O que a API CDX retorna

A API Wayback CDX retorna linhas do índice de arquivo para um padrão de URL. Uma consulta compacta fica assim:

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"

Os campos principais são:

CampoSignificadoUso
timestampMomento da captura em YYYYMMDDhhmmssCriar linhas do tempo
originalURL original capturadaRecuperar e normalizar alvos
mimetypeMIME type da resposta arquivadaSeparar HTML, imagens, JSON e assets
statuscodeStatus HTTP registrado pelo arquivoFiltrar redirects, erros e respostas bloqueadas
digestImpressão digital do conteúdoEncontrar capturas idênticas repetidas
lengthTamanho da respostaMarcar páginas de erro muito pequenas ou respostas incomuns

collapse=digest pode reduzir duplicados, mas em fluxos de pesquisa costuma ser melhor manter as linhas brutas primeiro e deduplicar depois com regras explícitas.

Monte o dataset

Comece com URLs-semente 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/

Adicione campos como source, collection_date, expected_platform, target_type e notes. Proveniencia faz parte do dataset, não de uma tarefa separada de memória.

Normalize de forma conservadora. Remova ruído óbvio de rastreamento, mas preserve caminhos que podem identificar um post, comentário ou item de mídia especifico:

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

Se duas URLs podem representar objetos diferentes, mantenha as duas e crie um campo derivado normalized_group em vez de forcar tudo para um único valor.

Limpe e enriqueça as linhas CDX

Depois de exportar CDX em JSON ou CSV, parseie o timestamp, converta campos numéricos, infira a plataforma e crie URLs de snapshot do 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)
)

Em seguida, deduplique de acordo com a pergunta que você quer responder:

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

Se você se importa com cada vez que o arquivo viu uma URL, mantenha mais linhas. Se você se importa com estados distintos de conteúdo, deduplique de forma mais agressiva.

Valide antes de afirmar

Uma linha CDX com statuscode=200 e uma pista, não uma conclusão. O snapshot pode ser o post original, mas também pode ser uma tela de login, destino de redirect, app shell, intersticial ou captura parcial.

Use três niveis de confianca:

NívelSignificadoUse para
IndexadoO CDX retornou uma linhaDescoberta e fila de revisão
RecuperadoO snapshot do Wayback abre e retorna conteúdo significativoAnálise de candidatos
ValidadoUm revisor confirmou que o conteúdo ou metadado necessário está visívelTrabalho sensível a evidência

Para cada linha que sustenta uma conclusão, adicione campos de revisão:

ColunaFinalidade
wayback_urlURL direta do snapshot
validation_statusindexed, retrieved, valid_snapshot, login_wall, redirect_only, error ou unknown
validation_notesMotivo legível para o status

Isso é especialmente importante no Instagram. Pesquisas sobre capturas do Instagram observaram que muitos mementos podem redirecionar para páginas de login ou não trazer imagens dos posts, então contagens brutas de captura podem enganar.

Visualize a cobertura

Depois que o dataset estiver limpo, a visualização ajuda a decidir se vale investir em mais revisão:

  • linha do tempo de capturas por plataforma,
  • distribuição de status code por plataforma,
  • distribuição de MIME type,
  • contagem de digests únicos por alvo,
  • primeira e última data de captura por URL,
  • taxa de duplicados por plataforma.

Para exploração em notebook, o PyGWalker pode inspecionar o dataframe de forma interativa:

import pygwalker as pyg
 
pyg.walk(deduped)

Para uma tabela de resumo 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"]

O Graphic Walker é útil para uma versão no navegador do mesmo fluxo: carregue o dataset limpo, arraste campos de timestamp e plataforma para uma linha do tempo e alterne entre resumos por status code, MIME type e digest.

O que dados CDX podem e não podem provar

Dados CDX podem ajudar a estabelecer que uma URL pública teve capturas arquivadas, quando essas capturas foram indexadas, qual status code e MIME type foram registrados e se capturas repetidas parecem compartilhar um digest.

Dados CDX não provam sozinhos que um post excluído existiu em uma forma específica, que uma captura de tela é autêntica, que a página arquivada renderizou igual para todos os usuários ou que todo asset, comentário, imagem ou embed foi preservado.

Use CDX para descoberta e estrutura. Use validação de snapshot para evidência.

Falhas comuns

FalhaO que fazer
Resposta 200 e uma tela de loginRotule como login_wall, não como evidência valida
Capturas duplicadas demaisCompare digest antes de interpretar volume de capturas
Cadeias de redirectMantenha linhas apenas de redirect, mas revise o destino
Assets ausentesInspecione snapshots renderizados quando imagem ou video importa
Migração de hostnameAcompanhe twitter.com, x.com e hostnames mobile explicitamente

Se você prefere um fluxo UI-first, o PeekVault (opens in a new tab) pode buscar registros públicos do Wayback para URLs de redes sociais e exportar linhas como CSV, JSON ou HTML. Trate qualquer exportação como dataset inicial que ainda precisa de validação.

Uso responsavel

Análise de arquivos pode tocar contextos sensíveis, especialmente quando conteúdo de redes sociais mudou, desapareceu ou virou disputa.

Use estes limites:

  • Trabalhe com registros públicos de arquivo.
  • Não sugira acesso a contas privadas ou conteúdo privado.
  • Não trate ausência de registros arquivados como prova de que algo nunca existiu.
  • Não trate uma linha CDX como prova de conteúdo sem abrir o snapshot.
  • Mantenha proveniência e notas de validação.
  • Respeite preocupações de remoção, privacidade e segurança.

Esses limites são éticos, mas também práticos. Um dataset que separa linhas brutas de índice de evidências validadas é mais fácil de revisar, reproduzir e contestar.

FAQ

O que são dados do Wayback Machine CDX?

Dados do Wayback Machine CDX são metadados do índice de arquivo. Eles listam URLs capturadas, timestamps, status codes, MIME types, digests e tamanhos. Ajudam a encontrar snapshots candidatos, mas não são o conteúdo da página arquivada em si.

Dados CDX provam que um post excluído de rede social existiu?

Não sozinhos. Dados CDX podem mostrar que uma URL pública teve registros arquivados, mas você ainda precisa inspecionar o snapshot real do Wayback e confirmar que o conteúdo relevante está visível e faz sentido.

Por que um status code 200 às vezes falha na análise de arquivo?

Um status 200 significa que o arquivo registrou uma resposta HTTP bem-sucedida, mas essa resposta ainda pode ser uma tela de login, app shell, página de redirect ou captura incompleta. Trate o status code como filtro, não como evidência final.

Como deduplicar capturas repetidas do Wayback?

Comece com original mais digest, para que respostas idênticas repetidas da mesma URL virem uma única linha. Para análises mais amplas, compare deduplicação por plataforma, tipo de alvo, URL normalizada e digest.

Guias relacionados

Referências

📚