Перейти к содержанию

Как перестать терять источники: архивация страниц от одного файла до WARC

Опубликовано
  • Админы
Ссылка в заметке — это не архив, а обещание
Ссылка в заметке — это не архив, а обещание

Через год после того, как вы сослались на страницу в отчёте, шансы, что она откроется, — примерно один к четырём. Это не фигура речи. В августе 2026 года команда македонского сокращателя ссылок 0.mk подняла из базы все адреса, созданные с 2009 по 2014 год — 657 607 штук, из них 655 178 пригодных к проверке, — и попробовала открыть каждый. Краулер шёл до пяти редиректов и повторял попытку из второй сети; успехом считался ответ 2xx или 3xx. Открылось 23,32 %.

Умирают ссылки при этом не так, как обычно представляют. Привычное «страница удалена» — лишь четверть случаев: 25,44 % адресов отвечают ошибкой 4xx или 5xx, из них 76 403 — честный 404. Больше половины, 51,24 %, не отвечают вообще: не разрешается имя, не поднимается соединение, не согласуется TLS. Исчезает не документ — исчезает хост целиком. Из 133 605 уникальных хостов хотя бы один живой адрес нашёлся только у 34 827; у 98 778 не работает ничего.

Общий вывод авторов невесёлый для всех, кто любит небольшие сайты: централизованный веб пережил полтора десятилетия заметно лучше малого. YouTube и Википедия на месте, личные блоги и форумы — нет. Дальше — практическая часть: пять уровней того, что с этим можно делать, от нулевого до избыточного, с инструментами, командами и честным перечислением того, где каждый уровень ломается.

⚠️ Осторожно

Прежде чем переносить проценты на себя: это выборка одного сокращателя ссылок одной страны за конкретные пять лет. Авторы прямо оговариваются, что описывают македонский сегмент, а не глобальный веб. Год 2011 с его 92,53 % мёртвых ссылок перекошен единственной партией в 83 398 ссылок на один домен. Порядок величины эта оговорка не отменяет — сравнимые результаты давали и другие исследования линкрота, — но конкретные цифры не универсальны.

Для OSINT это не философия, а рабочая проблема. Отчёт, в котором источник дан ссылкой, через год превращается в набор утверждений без подтверждения. Причём ломается он не по вашей вине и без предупреждения: у владельца сайта кончился хостинг, домен перекупили, движок переехал и поменял схему адресов. Смысл разбиения на уровни именно в этом: не надо сразу строить архивный кластер, надо понимать, на какой ступеньке вы сейчас и что даёт следующая.

Уровень 0. Ссылка в заметке

Здесь находится большинство. Ссылка скопирована в документ, в Notion, в канал Telegram, в конец отчёта. Никакой копии контента нет.

📌 Заметка

Ссылка — это не документ, а адрес, по которому документ обещали держать. Обещание одностороннее и бесплатное для того, кто его дал. Ровно поэтому доля выживших за 15 лет ссылок в исследовании 0.mk — 23 %.

Отдельная ловушка нулевого уровня — скриншот. Скриншот выглядит как копия, но не является ей: у него нет ни URL в машинночитаемом виде, ни времени получения, ни HTTP-заголовков, ни исходного HTML. Как иллюстрация — годится. Как фиксация источника — нет.

Уровень 1. Чужой архив

Самый дешёвый шаг вверх: попросить сохранить страницу кого-то, кто занимается этим профессионально. Практически это Wayback Machine и archive.today.

У Wayback Machine есть форма Save Page Now на archive.org/web/: вставляете адрес, получаете постоянную ссылку на снимок. Важные ограничения записаны в справке самого проекта:

  • сохраняется одна страница, а не сайт целиком;
  • картинки и CSS этой страницы сохраняются, исходящие ссылки — нет;
  • IP отправителя не сохраняется, отправка анонимна;
  • часть сайтов запрещает обход, у части ломается на настройках TLS.

Практический приём: сохраняйте не только целевую страницу, но и те, на которые собираетесь ссылаться внутри неё. Иначе через год у вас будет живой снимок статьи со сплошь мёртвыми ссылками в тексте.

❗ Главное

Главный недостаток первого уровня — вы не контролируете хранилище. Снимок может быть удалён по запросу правообладателя, страница может быть исключена из архива задним числом, а сам архив — стать недоступным из вашей страны. Чужой архив прекрасен как дубль и плох как единственная копия.

Поэтому первый уровень имеет смысл не вместо остальных, а вдобавок: он публичный и на него можно сослаться в тексте, чего нельзя сделать с файлом на своём диске.

Уровень 2. Один самодостаточный файл

Первая ступень, где копия оказывается физически у вас.

monolith — небольшая утилита на Rust, которая собирает страницу в один HTML-файл: CSS, картинки и скрипты вшиваются как data-URL. Получается документ, который открывается офлайн и выглядит так же, как оригинал.

# Debian/Ubuntu — из cargo, в репозиториях версия обычно старая
cargo install monolith

# сохранить страницу целиком
monolith https://example.com/article -o article.html

# без скриптов и шрифтов — файл меньше и безопаснее открывать
monolith -j -F https://example.com/article -o article.html

# в шаблоне имени доступны подстановки
monolith https://example.com/article -o '%title%.%timestamp%.html'

Полезные ключи: -j — выбросить JavaScript, -c — без CSS, -i — без картинок, -F — без веб-шрифтов, -v — без видео, -a — без аудио, -I — изолировать документ (запретить любые внешние запросы), -d/-B — белый и чёрный списки доменов для ресурсов, -m — сохранить в MHTML, -u — свой User-Agent, -t — таймаут. Актуальная версия на момент написания — 2.10.1 от 30 марта 2025 года.

⛔ Так делать нельзя

Ключевое ограничение monolith записано в его же README: своего движка JavaScript у него нет. Он забирает HTML в том виде, в каком его отдал сервер. Всё, что дорисовывается на клиенте — бесконечная лента, комментарии, содержимое одностраничного приложения, — в файл не попадёт. Сохранить таким способом ленту соцсети или SPA-панель и решить, что копия снята, — типичная ошибка.

Там, где monolith не справляется, работает SingleFile — расширение для Firefox и Chromium с той же идеей, но выполняющееся прямо в браузере. Оно сохраняет уже отрендеренный DOM, со всем, что подгрузил JavaScript, и в вашей сессии — то есть страницу за логином тоже. Цена: это ручное действие в браузере, автоматизировать его сложнее.

Уровень 3. Свой архивный сервис

Когда сохранять надо регулярно и помногу, ручной запуск утилиты перестаёт работать. Здесь появляется ArchiveBox — самохостящийся архиватор, который на каждый URL прогоняет сразу несколько экстракторов и складывает результат в структуру папок плюс SQLite.

Что он сохраняет для одного адреса: SingleFile-снимок, PDF, скриншот PNG, сырой DOM, WARC через wget, текстовую выжимку (htmltotext), читабельную версию (readability, mercury), фавикон, медиа через yt-dlp, клон репозитория для ссылок на GitHub/GitLab — и, если разрешить, дублирует копию в archive.org.

mkdir -p ~/archivebox/data && cd ~/archivebox
curl -fsSL 'https://docker-compose.archivebox.io' > docker-compose.yml
docker compose run archivebox init --install
docker compose up

Веб-интерфейс поднимется на порту 8000. Дальше URL-ы можно подавать не только руками: поддерживаются импорт истории и закладок браузера, выгрузки из Pocket и Pinboard, RSS-ленты, браузерное расширение и запуск по расписанию.

ℹ️ Справка

Требования, о которых стоит знать заранее. ArchiveBox тянет за собой Chrome (для скриншотов и PDF), wget, yt-dlp, Python ≥ 3.13, Node ≥ 22, curl, git и ripgrep. Зависимости модульные — ненужные экстракторы можно не ставить. Архитектуры: amd64, arm64 и arm7, то есть Raspberry Pi 3 и новее тоже подходит, хотя рендеринг в Chrome на нём будет медленным.

Главный ресурс здесь — диск, и планировать его надо от того, какие экстракторы включены. Полный набор на одну статью — это singlefile-копия, PDF, скриншот в полный рост страницы и WARC; вместе легко получается несколько мегабайт на URL, а если в статье есть встроенное видео и включён media-экстрактор, счёт идёт на сотни мегабайт. Прикидка «сто ссылок в неделю» превращается в десятки гигабайт в год. Выключить лишние экстракторы дешевле, чем потом чистить.

Чем сохранять источник: три вопроса и четыре ответа
Чем сохранять источник: три вопроса и четыре ответа

Уровень 4. WARC и доказательная ценность

Уровни 2 и 3 дают вам копию, которую удобно читать. Уровень 4 — копию, которую можно предъявить.

WARC (Web ARChive) — формат Библиотеки Конгресса и де-факто стандарт веб-архивирования: он хранит не «отрендеренную страницу», а сами HTTP-транзакции — запросы, ответы, заголовки, тела, время. Именно поэтому WARC ценнее HTML-файла: из него видно, что именно сервер ответил и когда.

Самый простой способ получить WARC — обычный wget:

wget --warc-file=snapshot-2026-08-14 \
     --warc-cdx \
     --page-requisites \
     --no-warc-compression \
     --user-agent="Mozilla/5.0 (research archiving)" \
     https://example.com/article

Для сайтов целиком и для страниц с тяжёлым JavaScript есть Browsertrix от Webrecorder — краулер, который водит настоящий браузер и пишет результат в WARC/WACZ; это уже полноценный сервис, а не утилита.

Дальше — то, что превращает файл в свидетельство:

# отпечаток архива
sha256sum snapshot-2026-08-14.warc > snapshot-2026-08-14.warc.sha256

# и запись факта: что, откуда, когда, чем
cat > snapshot-2026-08-14.txt <<'EOF'
URL:        https://example.com/article
Дата (UTC): 2026-08-14T05:40:12Z
Инструмент: wget 1.24.5, --warc-file
Оператор:   <кто снимал>
SHA-256:    <из .sha256>
EOF

🔒 Безопасность

Хеш, посчитанный вами же и лежащий рядом с файлом, доказывает только целостность — что файл не менялся с момента подсчёта. Он не доказывает, что архив снят именно в указанную дату: дату вы вписали сами. Если фиксация нужна для спора или отчёта с юридическими последствиями, отпечаток надо закрепить у независимой стороны — доверенной службой меток времени (RFC 3161), нотариально или хотя бы отправив хеш в публичный канал с внешней датировкой. И отдельно: в разных юрисдикциях требования к цифровым доказательствам различаются, здесь описан технический минимум, а не юридическая процедура.

Матрица выбора

Что защищаетЖивёт без васJS и логинЗатратыГодится как доказательство
0. Ссылканичего0нет
1. Wayback / archive.todayсам факт публикациида, но не вамичастично0слабо, но публично проверяемо
2. monolithтекст и вёрсткунетнетсекундынет
2. SingleFileотрендеренную страницунетдаручной кликнет
3. ArchiveBoxвсё сразу, массовонетчастичносервер + дискчастично (внутри есть WARC)
4. WARC + метка времениHTTP-транзакциинетзависит от краулеразаметныеда

Нормальная рабочая конфигурация для OSINT-задач — не одна строка из таблицы, а две: уровень 1 для публичной ссылки в отчёте плюс уровень 2 или 3 для своей копии. Уровень 4 достают тогда, когда материал может понадобиться в споре.

Где это всё ломается

Динамика и логин. Всё, что живёт за авторизацией, сохраняется только из браузера с вашей сессией — то есть SingleFile или Browsertrix с профилем. И тут же появляется вопрос, что именно вы утащили: если в снимок попали ваши куки или личные данные третьих лиц, хранить такой архив надо соответственно.

Сайт против архива. Часть ресурсов сознательно блокирует архиваторы — по User-Agent, по robots.txt, капчей, по поведенческим признакам. Оборотная сторона той же медали разбиралась в теме про восемь рубежей обороны сайта от ИИ-скраперов: владельцы сайтов не отличают ваш архиватор от скрапера, обучающего чужую модель, и защищаются от всех сразу.

Объём. Архив без ротации и без бюджета на диск заканчивается тем, что его удаляют целиком. Решайте заранее, что храните вечно, а что — год.

Проверка. Самое частое разочарование — обнаружить через год, что «сохранённая» страница не открывается: файл битый, экстрактор упал молча, в snapshot попала капча вместо контента. Открывать копию с отключённой сетью — единственный способ убедиться, что она самодостаточна.

✅ Как правильно

Минимальная дисциплина, которая окупается

  1. Сохранять источник в момент, когда вы его нашли, а не когда сядете писать отчёт. Задним числом снимок не сделать: страница уже другая.
  2. Класть рядом текстовый файл: URL, дата и время в UTC, инструмент, кто снимал.
  3. Дублировать в Wayback всё, что публично доступно, — это бесплатная страховка и публичная ссылка для текста.
  4. Раз в квартал открывать несколько случайных копий из архива офлайн и проверять, что они живые.
  5. Хранить архив там же, где остальные важные данные, и по тем же правилам: три копии, два носителя, одна вне дома.

Источники

💬 Вопрос к сообществу

На каком уровне вы сейчас — и что вас туда привело? Отдельно интересно: у кого ArchiveBox прожил дольше года и сколько он в итоге съел диска на реальном потоке ссылок?

Featured Replies

No posts to show

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу
Яндекс.Метрика

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.