Ошибка 404 сама по себе не поломка — это штатный ответ сервера о том, что страницы нет. Проблемы начинаются, когда 404 отдаётся там, где страница должна быть, или наоборот: несуществующий адрес возвращает код 200, и поисковики начинают индексировать пустышки.
Разберём, как в 1С-Битрикс устроена обработка несуществующих страниц, как настроить свою страницу 404, почему она обязана отдавать правильный код ответа и что делать с массовыми 404 после переезда сайта.
Как Битрикс обрабатывает 404
Когда запрошенный адрес не находится, отрабатывает файл /404.php
в корне сайта. Он подключается как обычная страница — со своим шаблоном, меню и подвалом.
Минимальный рабочий вариант:
<?php
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/header.php');
$APPLICATION->SetTitle('Страница не найдена');
?>
<h1>Страница не найдена</h1>
<p>Возможно, адрес введён с ошибкой или страница была удалена.</p>
<p><a href="/">Вернуться на главную</a></p>
<?php require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/footer.php'); ?>
Главная ошибка: код ответа 200
Само по себе наличие красивой страницы 404 ничего не значит. Важно, какой HTTP-код сервер отдаёт вместе с ней.
Если страница выглядит как «не найдено», но отдаёт код 200, поисковик считает её обычной страницей и добавляет в индекс. Через полгода в выдаче оказываются сотни одинаковых «Страница не найдена» — это называют мягкой ошибкой 404.
Чтобы код был правильным, его нужно задать явно:
<?php
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/header.php');
// сообщаем ядру и серверу, что страница не найдена
CHTTP::SetStatus('404 Not Found');
@define('ERROR_404', 'Y');
$APPLICATION->SetTitle('Страница не найдена');
?>
Константа ERROR_404 нужна ядру, а CHTTP::SetStatus отправляет
сам заголовок. Проверить результат можно инструментами разработчика в браузере
на вкладке «Сеть» — в строке запроса должно стоять 404, а не 200.
Нужна помощь с Битрикс?
Настройки в административной части
Поведение при отсутствии страницы настраивается в разделе Настройки → Настройки продукта → Настройки модулей → Управление структурой.
Два параметра, которые там важны:
| Параметр | Что делает |
|---|---|
| Устанавливать статус 404 | Отдавать корректный код ответа при отсутствии страницы |
| Показывать спец. страницу | Использовать /404.php вместо системного сообщения |
404 внутри компонентов
Отдельный случай: раздел существует, а конкретного элемента в нём нет. Например, товар удалили, а ссылка на него осталась в поиске.
У компонентов вроде news.detail и catalog.element есть
параметр SET_STATUS_404. Он должен быть включён — иначе при удалённом
элементе компонент отдаст пустую страницу с кодом 200:
<?$APPLICATION->IncludeComponent(
'bitrix:news.detail',
'main',
[
'IBLOCK_ID' => 5,
'SET_STATUS_404' => 'Y',
'SHOW_404' => 'Y',
'MESSAGE_404' => 'Материал не найден',
]
)?>
Это один из самых частых пропусков при разработке каталога: страница ошибки настроена, но карточки удалённых товаров продолжают отдавать 200 и висеть в индексе.
Массовые 404 после переезда
После смены структуры сайта или переноса на новый движок старые адреса перестают существовать. Здесь важно не путать два инструмента:
| Ситуация | Что делать |
|---|---|
| Страница переехала на новый адрес | 301 редирект на новый URL |
| Товар снят с продажи, есть аналог | 301 на аналог или на раздел |
| Страница удалена навсегда, замены нет | 404, и это правильно |
| Раздел удалён целиком | 301 на родительский раздел |
Массово редиректить все 404 на главную — плохая идея: поисковик расценит это как мягкую ошибку, а пользователь окажется не там, куда шёл. Как настраивать переадресацию, разобрано в статье Как настроить редиректы в Битрикс.
Где искать битые ссылки
Найти реальные 404 на работающем сайте можно несколькими способами:
- Яндекс.Вебмастер и Google Search Console. Показывают адреса, которые поисковик пытался открыть и получил 404.
- Логи веб-сервера. Фильтр по коду ответа даёт полную картину, включая переходы с внешних сайтов.
- Обход сайта краулером. Находит битые ссылки внутри самого сайта — их правят, а не редиректят.
Разделять эти источники важно: внутренняя битая ссылка — это ошибка вёрстки или контента, её надо исправить. Внешняя ссылка на удалённую страницу — кандидат на 301 редирект.
Что должно быть на странице 404
Хорошая страница ошибки возвращает посетителя в поток, а не оставляет в тупике:
- понятное объяснение без технических терминов;
- ссылка на главную;
- поиск по сайту;
- ссылки на основные разделы или популярные материалы;
- для интернет-магазина — ссылка на каталог.
Чего быть не должно: автоматического редиректа через несколько секунд. Пользователь не успевает понять, что произошло, а поисковик получает неоднозначный сигнал.
Проверка
- Откройте заведомо несуществующий адрес — должна показаться ваша страница.
- Во вкладке «Сеть» убедитесь, что код ответа именно 404, а не 200.
- Проверьте несуществующий элемент каталога — не только произвольный URL.
- Убедитесь, что на странице 404 работают меню и поиск.
- Проверьте, что страница не отдаёт 404 при включённом композитном кеше.
- Посмотрите, закрыта ли страница от индексации.
Частые ошибки
- Страница есть, код 200. Самая распространённая и самая вредная для SEO ситуация.
-
Не включён
SET_STATUS_404в компонентах. Удалённые товары продолжают отвечать 200. - Редирект всех 404 на главную. Ухудшает и поведенческие факторы, и оценку сайта поисковиком.
- Страница 404 в дизайне «сервер сломался». Посетитель решает, что сайт не работает, и уходит.
- Никто не смотрит отчёты по 404. Битые внутренние ссылки живут годами.
Итог
Работающая обработка 404 в Битрикс — это три вещи одновременно: файл
/404.php в дизайне сайта, явная отдача кода ответа через
CHTTP::SetStatus с константой ERROR_404 и включённый
параметр SET_STATUS_404 в компонентах детального просмотра.
Проверять нужно не внешний вид страницы, а код ответа во вкладке «Сеть». Страница с надписью «не найдено» и кодом 200 — это не настроенная 404, а источник мусора в поисковом индексе.
