Битые ссылки и страницы 404: как найти и что с ними делать
Чем ловить битые ссылки, какие 404 надо редиректить, а какие оставить, и почему массовый 301 на главную вредит сайту.
Содержание
- Откуда на сайте берутся битые ссылки
- Чем ловить: от Вебмастера до лога сервера
- Не все 404 одинаковы: три типа страниц
- Когда 301, когда 410, а когда оставить честный 404
- Почему редирект всего подряд на главную это медвежья услуга
- Как сделать 404, которая не теряет посетителя
- С чего начать прямо сейчас
- Частые вопросы
Битые ссылки ищут в трёх местах: отчёт Яндекс Вебмастера, обход сайта краулером и лог сервера. Дальше каждый адрес разбирают по типу: страница переехала, значит 301; удалена навсегда, значит 410; адрес выдуман или устарел бесповоротно, значит честный 404.
Клиент присылает скриншот: сниппет в поиске ведёт на страницу с текстом «Ошибка 404. Страница не найдена». Или хуже: партнёр поставил ссылку на вас три года назад в статье про поставщиков, страница товара давно удалена, а трафик с этой ссылки так и утекает в никуда. Битые ссылки редко кладут сайт разом, они методично едят конверсию и позиции, пока никто не смотрит в эту сторону. Разберу, откуда они берутся, чем их ловить без дорогого сервиса и что делать с находками: когда редирект, когда честная заглушка, а когда 410 и забыть про страницу навсегда.

За несколько лет обслуживания сайтов малого бизнеса я прогонял аудит на битые ссылки на десятках проектов, и почти всегда находится минимум одна категория проблем, о которой владелец не подозревал. Обычно это не катастрофа, а медленная утечка: пять процентов трафика с внешних ссылок, десяток страниц, выпавших из индекса, и странное ощущение у поисковика, что сайт немного неаккуратный.
Откуда на сайте берутся битые ссылки
Причин на практике всего четыре, и все они предсказуемы.
Первая, правки контента. Редактор переписывает статью, меняет slug с /uslugi/remont-saitov на /uslugi/remont-sayta, забывает поставить редирект. Все внутренние ссылки на старый адрес и все внешние закладки читателей превращаются в 404 моментально.
Вторая, удалённые товары и услуги. Магазин снял с продажи модель, которой больше нет на складе, страница товара удаляется физически. Формально правильно, но у страницы могли быть накопленные ссылки, отзывы в индексе, трафик из органики на конкретный артикул.
Третья, переезды: домена, CMS, структуры каталога. Смена структуры «/catalog/category/product» на «/product-slug» без карты соответствия старых и новых адресов гарантированно рождает сотни 404 разом.
Четвёртая, чужие битые ссылки на вас. Кто-то скопировал URL с опечаткой, кто-то ссылался на страницу, которая с тех пор переехала, кто-то использует старый пресс-релиз пятилетней давности. Это не ваша вина, но трафик и вес ссылки всё равно теряются, если не поймать и не перенаправить.
Чем ловить: от Вебмастера до лога сервера
Способов найти битые ссылки на своём сайте четыре, и каждый закрывает свою часть картины.
Яндекс Вебмастер и Google Search Console. Бесплатно, без установки, показывает то, что реально видел робот. В Вебмастере это раздел «Индексирование, Страницы в поиске, Исключённые», ищите статус «Страница не найдена». В Search Console аналогично: «Индексирование страниц, Не проиндексировано, Ошибка 404». Минус один: тут видны только те URL, которые робот уже когда-то обходил, свежие битые ссылки внутри сайта таким способом не поймать быстро.
Краулер. Screaming Frog SEO Spider бесплатен до 500 URL за сессию, для визитки и небольшого сайта услуг этого достаточно с запасом. Netpeak Spider и Xenu Link Sleuth дают похожий результат, разница в интерфейсе и цене лицензии. Краулер обходит сайт как поисковый робот, фиксирует каждый код ответа: 200, 301, 404, 500. Результат экспортируется в таблицу за десять минут.
Лог сервера. Самый недооценённый способ, потому что показывает не то, что теоретически может сломаться, а то, что реально ловят живые посетители и боты прямо сейчас. На типовом хостинге логи лежат в logs/ внутри аккаунта или доступны через панель. Ищем построчно код 404:
grep " 404 " access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -30
Команда выводит топ-30 адресов, на которые чаще всего приходят обращения с ответом 404. Обычно в топе оказывается три-четыре типа проблем: боты сканируют несуществующие /wp-admin/, реальные посетители попадают на убитую страницу из старого поста в соцсетях, поисковый бот донашивает старые адреса из индекса недельной давности.
Плагины. Broken Link Checker для WordPress проверяет ссылки автоматически, но у него есть цена: он постоянно опрашивает внешние адреса по крону и на слабом shared-хостинге ощутимо грузит сервер, я видел, как из-за него страница генерации подскакивала на треть секунды. Ставить его на постоянную работу не советую, лучше запускать разово и потом отключать, либо сразу использовать внешний краулер.
Не все 404 одинаковы: три типа страниц
Прежде чем что-то чинить, разложите находки на три группы, потому что решение для каждой своё.
Страница удалена навсегда и правильной замены нет. Товар снят с производства без аналога, акция закончилась и повторения не будет, раздел сайта закрыт как направление бизнеса. Здесь честный 404 или, лучше, код 410 Gone правильнее любого редиректа.
Страница переехала или у неё появился прямой аналог. Тот же товар под новым артикулом, статья переписана под другим адресом, услуга объединена с соседней. Здесь нужен 301 на конкретную замену, а не общий редирект куда попало.
Страница никогда не существовала на этом сайте. Опечатка в чужой ссылке, устаревший URL из давно не работающего партнёрского каталога, скан бота по несуществующим путям вроде /wp-login.php.bak. Здесь ничего чинить не нужно, кроме случаев, когда по такому адресу реально идёт живой трафик с понятного источника, тогда есть смысл поставить 301 на близкую по смыслу страницу.
Когда 301, когда 410, а когда оставить честный 404
Три статус-кода решают разные задачи, и подмена одного другим создаёт для поисковика лишний шум.
| Код | Когда использовать | Что видит поисковик |
|---|---|---|
| 301 | Есть прямая замена контента: та же услуга, тот же товар, тот же смысл под новым адресом | Передаёт вес и трафик на новый URL, старый выпадает из индекса за несколько недель |
| 410 | Контента больше не будет никогда, замены нет и не планируется | Сигнал «не проверяй эту страницу заново», быстрее чистит индекс, чем обычный 404 |
| 404 | Страница не существует, но это может быть временно или намеренно (несуществующий адрес, опечатка бота) | Стандартная обработка, страница исключается из индекса, но регулярно перепроверяется |
Частая ошибка: ставить 301 на страницы без реальной смысловой связи, лишь бы код ответа не был 404. Например редирект статьи про ремонт кофемашин на страницу главного меню «Услуги». Формально ссылка живая, но пользователь и робот видят подмену: искал одно, попал на совсем другое. Google и Яндекс такое распознают и снижают доверие к редиректам на сайте в целом.
Почему редирект всего подряд на главную это медвежья услуга
Соблазн понятен: нашли двадцать битых ссылок, лень разбираться с каждой, поставили правило «всё, что 404, редиректим на главную». Так делают многие подрядчики, потому что это быстро и клиент визуально видит, что «ссылки работают».
Проблема в том, что поисковики называют это soft 404, мягкая ошибка. С точки зрения Google и Яндекса, страница, которая должна была быть про конкретный товар, а на деле открывает совсем другой контент, это признак низкого качества редиректов на сайте. Массовая практика бьёт по доверию ко всем 301 на сайте разом, включая те, что поставлены правильно.
Второй эффект чисто пользовательский. Человек искал конкретную статью, кликнул по ссылке из закладки или соцсети, попал на главную страницу без объяснений. Он не понимает, что произошло, и с вероятностью почти сто процентов закрывает вкладку. Конверсии с такого перехода не будет вообще, хотя код ответа формально «успешный».
Чек-лист, что проверить перед тем как ставить редирект пачкой:
- [ ] У страницы правда есть смысловая замена, а не просто «хоть что-то живое»
- [ ] Редирект ведёт на страницу того же типа: товар на товар, статья на статью, услуга на услугу
- [ ] Цепочек редиректов нет: A ведёт на B, B ведёт на C, надо A сразу на C
- [ ] Список редиректов не превращается в мусорку из полусотни правил без структуры
- [ ] На критичные адреса (из топ-30 по логам) редирект проверен вручную в браузере
Как сделать 404, которая не теряет посетителя
Для страниц, которым 301 не положен, вложите немного усилий в саму страницу ошибки, и часть трафика удастся спасти прямо там.
Минимальный набор для страницы 404: заголовок без канцелярита («Такой страницы больше нет» достаточно), поиск по сайту, три-пять ссылок на популярные разделы (каталог услуг, блог, контакты), телефон или форма связи. У меня страница 404 ведёт на форму на главной и на список услуг, это простое решение без дизайнерских изысков, но оно закрывает основной сценарий: человек не нашёл то, что искал, но нашёл, куда написать.
Если сайт на WordPress, правится файл 404.php темы. Пример минимальной логики без лишнего:
<?php get_header(); ?>
<div class="error-404">
<h1>Такой страницы больше нет</h1>
<p>Возможно, она переехала или была удалена. Загляните в раздел услуг или напишите нам напрямую.</p>
<a href="/uslugi/" class="btn">Все услуги</a>
<a href="/#contact" class="btn btn-outline">Написать нам</a>
</div>
<?php get_footer(); ?>
Важно проверить, что сервер действительно отдаёт код 404, а не 200 с текстом об ошибке. Проверка одной командой:
curl -I https://example.ru/nesuschestvuyuschaya-stranica
Если в ответе HTTP/1.1 200 OK, а не 404 Not Found, поисковик индексирует такую заглушку как обычную страницу, и в выдаче начинают копиться десятки одинаковых «мусорных» сниппетов. Такое часто встречается на самописных CMS и на некоторых конфигурациях Tilda, стоит проверять отдельно.
С чего начать прямо сейчас
Если вы ни разу не гоняли такой аудит, порядок действий такой: сначала выгрузка из Вебмастера и Search Console за отчётный период, потом краулер по всему сайту, потом сверка топ-30 адресов из лога сервера. Три источника вместе дают полную картину: что видит поисковик, что находится структурно, что реально ловят живые посетители.
Дальше раскладываете находки по трём корзинам из этой статьи и разбираете по одной, а не пачкой. На сайте из полусотни страниц это час-полтора работы. Если у вас каталог на тысячи товаров и битых ссылок счёт идёт на сотни, разумнее один раз заказать полный технический аудит, чем гадать вручную, какие 404 бьют по позициям, а какие безвредны.
Заодно эта работа хорошо сочетается с проверкой дублей страниц, которые часто прячутся рядом с той же историей правок контента: если интересно, у меня есть отдельная статья про то, как искать дубли на сайте. А если карта сайта давно не обновлялась и в неё до сих пор попадают удалённые страницы, посмотрите материал про настройку sitemap.xml: часто оба симптома лечатся в одном заходе.
После того как редиректы расставлены, не забудьте про внутренние ссылки на самом сайте: если старые адреса ещё встречаются в меню, футере или теле статей, поисковик продолжит видеть их как активные и путаться в приоритетах индексации. Как выстроить перелинковку так, чтобы этого не происходило, я разбирал в статье про внутреннюю перелинковку. Итоговые изменения удобно отслеживать через отчёты в Яндекс Вебмастере, там видно, как быстро исчезают старые 404 из индекса после правок.
Частые вопросы
Как найти битые ссылки на сайте
В Вебмастере посмотреть страницы с кодом 404, прогнать сайт краулером и заглянуть в лог сервера. Лог показывает то, чего не видят первые два: переходы по внешним ссылкам на давно удалённые адреса.
Когда ставить 301, а когда 410
301 если у страницы есть очевидная замена по смыслу. 410 если контента больше не будет и адрес не должен возвращаться в индекс. Честный 404 для адресов, которых никогда и не существовало.
Почему нельзя редиректить все 404 на главную
Посетитель попадает не туда, куда шёл, и уходит. Поисковики такие переадресации считают мягкой ошибкой и всё равно выбрасывают адрес из индекса, только медленнее.
Что должно быть на странице 404
Понятное объяснение без технического жаргона, поиск по сайту, ссылки на главные разделы и на популярные материалы. Задача страницы вернуть человека в навигацию, а не извиниться.