Перейти к содержимому
SEO/Опубликовано 7 сентября 2026 г./5 мин

Битые ссылки: как найти все и почему их находят не все

Наш скрипт говорит «ноль», Яндекс.Вебмастер показывает 42, а правда — третья. Обошли 228 своих страниц строгой проверкой и разобрали, чем отличаются ответы и какие ссылки не видит ни один инструмент.

Битые ссылки: как найти все и почему их находят не все
С
Команда NEXFORCE
SEO-эксперт NEXFORCE

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

Три ответа на один вопрос

Замер 7 сентября 2026 года, один и тот же сайт в один и тот же день.

Кто проверялОтвет
Наш штатный скрипт по собранным страницам0 битых
Яндекс.Вебмастер, раздел внутренних ссылок42 битых
Строгий обход живого сайта0 битых из 614 адресов, но три ссылки не туда

Разница не в качестве инструментов: каждый смотрит в своё место.

Почему скрипт видит не всё

Скрипт читает собранные страницы и берёт адреса из атрибута href в двойных кавычках. Записанное иначе для него не существует.

Строгий обход живого сайта нашёл на тех же страницах:

  • 614 уникальных внутренних адресов против 396 у скрипта;
  • 284 адреса в JSON-LD — разметке для поисковых систем;
  • 82 адреса в инлайновых стилях;
  • 789 якорей, 238 адресов почты и 230 телефонов, которые проверять кодом ответа бессмысленно.

Разница между 396 и 614 — не найденные ошибки, а невидимая зона. Однажды она уже сработала: 16 августа Вебмастер нашёл 42 битые ссылки на data:-адрес, записанный в инлайновом стиле. Скрипт их не видел: он не смотрел туда, где они лежали.

Почему Вебмастер показывает исправленное

Сегодня Вебмастер по-прежнему показывает 42 битые ссылки. Мы проверили каждую: из 22 уникальных адресов 21 отвечает кодом 200, а последний вёл на удалённую страницу, ссылки на которую в живых страницах и в карте сайта уже нет.

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

Отсюда практический вывод: список битых ссылок в панели — это история, а не текущее состояние. Прежде чем чинить по нему, проверьте адреса сами; и наоборот — исправив, не ждите, что список очистится сам к утру.

Ссылка, которую не найдёт ни одна проверка

Строгий обход дал ноль битых внутренних адресов из 614. Но он же показал три внешние ссылки на example.com — служебный домен для примеров из документации. Они стояли в нашей же статье про canonical: автор написал пример с адресом, а разметка превратила его в настоящую ссылку.

example.com отвечает кодом 200. Значит, ни проверка кодов ответа, ни Вебмастер, ни наш скрипт никогда бы на неё не пожаловались. Формально ссылка рабочая, фактически — уводит читателя на заглушку IANA.

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

Пять классов битых ссылок и кто их находит

Разложим по классам — и сразу видно, почему один инструмент не закрывает задачу.

КлассПримерКто находит
Внутренняя ссылка на удалённую страницу/systems/ после удаления разделаскрипт по href, панель вебмастера
Адрес не в href, а в стиле или разметкеurl(data:image/svg+xml…) в инлайновом стилетолько обход, который смотрит шире href
Ссылка на чужой домен, который умерстарый сервис в подвалетолько проверка внешних адресов, а её обычно нет
Ссылка отвечает 200, но ведёт не тудапример с example.com в тексте статьиникто, кроме человека
Ссылка на несуществующий якорь#tarify на странице без такого блокапочти никто: якоря проверяют единицы инструментов

Три нижние строки — это зона, где автоматика молчит. Наш собственный случай из четвёртой строки жил на опубликованной странице, пока мы не прочитали её глазами при подготовке этого замера.

Что делать с каждым исходом

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

Строка про шапку и подвал не теоретическая: одна вложенная ссылка у нас перерисовывала 174 страницы, и цена ошибки в общем блоке всегда умножается на число страниц.

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

  1. Соберите адреса шире, чем href. Инлайновые стили, src, JSON-LD — там тоже бывают адреса, и робот их видит.
  2. Проверяйте на живом сайте, а не в исходниках. Сборка может добавить или потерять ссылку, а видит поисковик именно отданную страницу.
  3. Сверяйтесь с панелью, но не верьте ей на слово. Что показывает диагностика Вебмастера — разбирали отдельно; там же про даты, из-за которых записи выглядят свежее, чем есть.
  4. Отделяйте «не отвечает» от «ведёт не туда». Первое находит машина, второе — только человек.

Коротко

Три проверки одного сайта в один день дали ноль, 42 и «ноль, но три ссылки не туда». Скрипт не видел ничего вне href, Вебмастер показывал состояние на день последнего обхода, а настоящая ошибка отвечала кодом 200 и потому была невидима для обоих. Числу битых ссылок нельзя верить, не зная, что именно считали.

Вопросы и ответы

FAQ по теме

Почему инструменты показывают разное число битых ссылок?+
Потому что они смотрят в разные места и в разное время. Наш скрипт читает собранные страницы и берёт только адреса в атрибуте href — он ответил «ноль». Яндекс.Вебмастер показывает 42, но это состояние на день последнего обхода страницы-источника, а не на сегодня.
Что значит «битая ссылка», если адрес отвечает 200?+
Что ссылка ведёт не туда, куда нужно. На нашей же странице про canonical три ссылки вели на example.com — служебный домен для примеров. Он отвечает 200, поэтому ни одна проверка на коды ответа его не назовёт, а место таким ссылкам всё равно не на живой странице.
Почему Вебмастер показывает исправленные ссылки?+
Он показывает то, что видел робот при последнем обходе страницы-источника. У наших записей даты обнаружения — с 21 июня по 16 августа, а последний доступ к источникам — не позже 16 августа. С тех пор страницы исправлены, но робот их не перечитывал.
Какие ссылки не находит обычная проверка?+
Те, что лежат не в href: адреса внутри инлайновых стилей, в JSON-LD, в атрибуте src. На наших страницах это 284 адреса в разметке для поисковиков и 82 в стилях — их наш штатный скрипт не смотрит вовсе.