Поиск битых ссылок

Дайте нам начальный адрес. Наш робот обходит сайт страницу за страницей, пробует каждую встреченную ссылку и картинку и возвращает те, что не работают, вместе со страницами, на которых они стоят.

The crawl stops at 100 pages or 600 requests, whichever comes first. A small site is done in seconds, a large one in a few minutes. Keep this tab open while it runs.

Или попробуйте wikipedia.org

Ссылки ломаются, даже если их никто не трогает

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

Этот медленный распад называют link rot, «гниением ссылок», и он не прекращается никогда. Исследование Pew Research Center 2024 года показало, что 38% веб-страниц, существовавших в 2013 году, через десять лет уже были недоступны. Чтобы узнать, как обстоят дела на вашем сайте, кто-то должен попробовать каждую ссылку. Для человека это мучение, для программы пустяк.

Как идет обход

  1. Мы загружаем начальную страницу и читаем robots.txt. Запрещенные в нем пути не трогаем.
  2. Собираются все <a href> и <img src>, включая картинки с отложенной загрузкой в data-src. Ссылки mailto:, tel: и javascript: пропускаются, а #fragment отбрасывается.
  3. Ссылки на страницы того же хоста попадают в очередь и читаются по порядку. example.com и www.example.com считаются одним сайтом. Другие поддомены нет.
  4. Все остальное (другие сайты, PDF, картинки, загрузки) только проверяется. Мы начинаем с запроса HEAD, который просит статус без тела, и переходим к обычному GET, если сервер отказывает в HEAD.
  5. Редиректы проходятся вручную, до пяти переходов. Шестой переход или адрес, перенаправляющий сам на себя, считается петлей.

Обход останавливается после 100 прочитанных страниц или 600 запросов. Он открывает не больше четырех соединений к хосту одновременно, ждет ответа шесть секунд и проверяет каждый адрес один раз, сколько бы на него ни ссылались. Когда путь встречается больше чем с пятью разными строками запроса, лишние варианты игнорируются. Иначе календарь или страница фильтров съели бы весь бюджет.

Как читать четыре списка

Битые ссылки
Цель ответила ошибкой или не ответила. 404 и 410 значат, что страницы больше нет. От 500 до 504 указывают на сбой сервера и могут быть временными. «Доменное имя не найдено» часто означает, что закрылся весь сайт. «Недействительный SSL-сертификат» значит, что браузеры показывают предупреждение перед страницей.
Битые картинки
Причины те же, но посетитель видит пустую рамку или значок сломанной картинки.
Внутренние редиректы
Ссылки на ваши собственные страницы, которые работают только через редирект. Ничего не сломано, но каждый клик стоит лишнего круга, а однажды кто-нибудь может убрать редирект.
Проверить вручную
Цель ответила 401, 403, 429 или 999, то есть отказывает роботам или требует входа. Так делают LinkedIn, Facebook и многие сайты за защитой от ботов. Откройте ссылку сами, чтобы разобраться.

В каждой строке до пяти страниц, где встречается адрес, а самые частые сбои идут первыми. Битая ссылка в подвале видна на каждой странице, а исправляется в одном месте.

Как исправить найденное

  • Ваша страница переехала. Исправьте ссылку, затем добавьте постоянный редирект для тех, кто приходит извне. Apache: Redirect 301 /old-page/ /new-page/. nginx: location = /old-page/ { return 301 /new-page/; }.
  • Другой сайт перенес свою страницу. Поищите на нем новый адрес. Если содержимого больше нет, дайте ссылку на копию в Wayback Machine (web.archive.org) или уберите ссылку.
  • Пропавшая картинка. Загрузите ее снова под тем же именем или отредактируйте страницу.
  • Внутренний редирект. Замените адрес в ссылке на конечный, показанный в отчете.

Мы видим только ссылки, которые есть в HTML, отданном сервером. Меню, построенные JavaScript, фоновые картинки CSS, варианты srcset, видео и скрипты не проверяются, как и страницы за входом. Якоря тоже не проверяются, так что ссылка на /page#prices проходит, если существует /page. А сайт, который отвечает 200 на несуществующие страницы, прячет свои битые ссылки от любого робота. Этот случай выявляет тест мягкой 404.

Частые вопросы

Вредят ли битые ссылки SEO?

Несколько мертвых ссылок позиции сайта не понизят. Они обходятся вам иначе. Битая внутренняя ссылка мешает роботам добраться до страницы за ней, вес, который передавала ссылка, теряется, а посетители, наткнувшись на ошибку, обычно уходят.

Почему ссылка помечена как битая, хотя в браузере открывается?

Цель обращается с нашим роботом не так, как с вами. Она может блокировать автоматические запросы, отвечать медленнее шестисекундного лимита, отдавать сертификат, для которого в вашем браузере уже есть исключение, или требовать cookie, который у вас есть. Для сравнения откройте ссылку в приватном окне.

Соблюдает ли робот robots.txt и как его заблокировать?

Да. Он представляется как MissWrenchBot и следует группе, написанной для этого имени, или группе *, если такой нет. Чтобы закрыть ему доступ, добавьте User-agent: MissWrenchBot, а за ним Disallow: /. Подробнее на странице о роботе.

На моем сайте больше 100 страниц. Что делать?

Обход читает страницы в порядке их обнаружения, начиная с указанного адреса. Запустите его несколько раз с разных точек входа, например с главной блога, а затем с каталога товаров, чтобы охватить разные части сайта.

Сколько хранятся результаты?

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

Чем 404 отличается от 410?

404 Not Found говорит, что по адресу сейчас ничего нет. 410 Gone говорит, что страницу удалили намеренно и она не вернется. Для ссылки на вашем сайте исправление одно и то же.