404 и редиректы в 1С-Битрикс
В 1С-Битрикс страницу 404 создают файлом /404.php в корне сайта. Чтобы он отдавал настоящий статус 404, а не 200, в файле нужны define("ERROR_404","Y") и CHTTP::SetStatus("404 Not Found"), а в .htaccess — ErrorDocument 404 /404.php.
Обновлено 11 октября 2026 г.
Как устроена страница 404 в Битрикс
Битрикс обрабатывает запросы к несуществующим файлам через /bitrix/urlrewrite.php: он сверяется с правилами из файла urlrewrite.php в корне сайта (правила комплексных компонентов) и, если ничего не подошло, отдаёт страницу ошибки. За эту страницу отвечает файл /404.php в корне. Для мультисайта у каждого сайта свой корень и свой 404.php.
<?php
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
CHTTP::SetStatus("404 Not Found");
@define("ERROR_404", "Y");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Страница не найдена");
?>
<p>Такой страницы нет. Проверьте адрес или перейдите в <a href="/catalog/">каталог</a>.</p>
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>Порядок важен: статус и константу ERROR_404 задают до подключения header.php. Тогда шаблон сайта может по константе понять, что это страница ошибки, например, скрыть боковое меню.
ErrorDocument в .htaccess
На Apache, чтобы 404 от самого веб-сервера (например, для несуществующих картинок и файлов) тоже вёл на вашу страницу, добавьте в .htaccess в корне:
ErrorDocument 404 /404.phpУказывайте локальный путь, а не полный URL. Иначе Apache ответит редиректом, и 404 превратится в 302 → 200. Для nginx аналог — error_page 404 /404.php;, см. руководство по nginx.
404 для элементов и разделов компонентов
Если адрес подходит под правило компонента (например, /catalog/nesushchestvuyushchiy-tovar/), но элемента или раздела нет, страницу 404 должен отдать сам компонент. В параметрах комплексных компонентов инфоблоков (catalog, news) включите:
- «Устанавливать статус 404, если не найдены элемент или раздел» — параметр
SET_STATUS_404; - «Показывать страницу 404» — параметр
SHOW_404, а вFILE_404укажите путь к/404.php.
В своих компонентах и шаблонах внутри result_modifier.php / component.php для этой же цели используют метод \Bitrix\Iblock\Component\Tools::process404(), если элемент не найден. Без этого пустая страница каталога отвечает 200 — классический soft 404, о котором подробнее в статье про soft 404.
301-редиректы в Битрикс
Самый надёжный вариант — правила на уровне веб-сервера: они срабатывают до запуска PHP и не нагружают Битрикс.
Redirect 301 /old-page/ /new-page/
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]Правила нужно поставить выше строки RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]. Иначе запрос уйдёт в Битрикс раньше, чем сработает редирект. Если сайт стоит на nginx (например, в виртуальной машине BitrixVM), правила добавляют в конфигурацию сайта: см. редиректы в nginx.
Редирект средствами PHP — когда список правил надо хранить в коде. В /bitrix/php_interface/init.php:
$redirects = [
"/old-page/" => "/new-page/",
"/catalog/old-section/" => "/catalog/new-section/",
];
$path = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
if (isset($redirects[$path])) {
LocalRedirect($redirects[$path], false, "301 Moved permanently");
}LocalRedirect() по умолчанию отдаёт 302, поэтому код 301 Moved permanently в третьем аргументе обязателен. Для большого списка URL сгенерируйте правила в генераторе редиректов.
Частые ошибки
404.phpбезCHTTP::SetStatus— пользователь видит «не найдено», а робот получает 200.- Страница 404 подключена через
ErrorDocumentс полным URL (http://…), и сервер отвечает редиректом. - Редирект на главную для всех удалённых товаров. Если товар снят навсегда, лучше 404 или 410; если есть аналог — 301 на него.
- Правила редиректа стоят после
urlrewrite.phpв.htaccessи не срабатывают. - Забытые тестовые редиректы 302 вместо 301 после переезда на https или новый домен.
Как найти 404 на сайте на Битрикс
- Отчёты Яндекс Вебмастера и Google Search Console по недоступным страницам.
- Логи веб-сервера:
awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn | head -50. - Проверка страницы на битые ссылки: проверка битых ссылок.
Подключение Monitor404 к Битрикс
Вставьте тег с трекером в /404.php перед подключением footer.php:
<script src="https://collect.monitor404.ru/collect/ВАШ_ТОКЕН/script.js" async></script>Либо добавьте его в footer.php шаблона сайта с условием на константу ERROR_404, а для режима «на всех страницах» — адрес скрипта с ?mode=auto. Monitor404 отфильтрует ботов и сканеров и покажет, какие битые адреса действительно ищут люди.
<?php if (defined("ERROR_404") && ERROR_404 === "Y"): ?>
<script src="https://collect.monitor404.ru/collect/ВАШ_ТОКЕН/script.js" async></script>
<?php endif; ?>Частые вопросы
Как сделать страницу 404 в Битрикс?
Создайте файл /404.php в корне сайта, задайте в нём CHTTP::SetStatus("404 Not Found") и define("ERROR_404","Y"), затем подключите header.php и footer.php. В .htaccess добавьте ErrorDocument 404 /404.php.
Почему страница 404 в Битрикс отдаёт код 200?
Обычно в 404.php не вызван CHTTP::SetStatus("404 Not Found"), либо компонент каталога не настроен на статус 404 (параметр SET_STATUS_404). Проверьте код ответа в проверке HTTP-статуса.
Как сделать 301 редирект в Битрикс?
Проще всего правилом Redirect 301 /старый/ /новый/ в .htaccess выше блока urlrewrite.php или return 301 в nginx. В PHP — LocalRedirect($url, false, "301 Moved permanently").
Что такое urlrewrite.php в Битрикс?
Файл в корне сайта с правилами, по которым адреса вида /catalog/section/element/ передаются нужным комплексным компонентам. Запросы, которые не подошли ни под одно правило, заканчиваются страницей 404.