Monitor404

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.

/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 в корне:

.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 и не нагружают Битрикс.

.htaccess (перед блоком правил Битрикс)
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:

/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:

html
<script src="https://collect.monitor404.ru/collect/ВАШ_ТОКЕН/script.js" async></script>

Либо добавьте его в footer.php шаблона сайта с условием на константу ERROR_404, а для режима «на всех страницах» — адрес скрипта с ?mode=auto. Monitor404 отфильтрует ботов и сканеров и покажет, какие битые адреса действительно ищут люди.

footer.php шаблона
<?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.

Читайте также