Удалили двести карточек после распродажи, в браузере все выглядит нормально: "Товар не найден" в шаблоне каталога. Но curl -I показывает HTTP 200, и через месяц в Вебмастере сотни страниц с одинаковым title. Это "мягкая 404" - ловушка CMS "1С-Битрикс: Управление сайтом" после переезда или чистки каталога. Ниже настроите /404.php с кодом 404, снимете галочку "статус 200 на ошибку", разведете 301 и настоящие 404 и проверите результат через curl и Вебмастер.
HTTP-код важнее красивого текста: робот смотрит заголовок ответа, а не надпись "элемент не найден". Нужны /404.php с CHTTP::SetStatus("404 Not Found"), отключенная опция "статус 200 на 404" в главном модуле и галочки SET_STATUS_404 плюс SHOW_404 в каталоге. Редирект всех битых URL на /404 - ошибка: прямой 404 на исходном адресе или 301 только туда, где страница реально переехала.
Речь про "Управление сайтом" на вашем хостинге - не про портал Bitrix24. Если 404 всплыла после переезда, сверьте карту URL из гайда по переносу на Bitrix.
Разберите, почему "мягкая 404" бьет по SEO и заявкам
HTTP-статус - код ответа сервера. 404 значит "страницы нет", 200 - "индексируй". Когда CMS показывает текст ошибки с кодом 200, поисковик считает URL рабочим - это soft 404. На форуме dev.1c-bitrix.ru SEO-специалисты и интеграторы годами спорят про редирект на /404.html, но по HTTP-семантике верно только одно: отдавать 404 на исходном URL без смены адреса.
Итог для бизнеса: дубли title на сотнях адресов, просадка каталога, реклама на мертвые посадочные, рост "дублей" в Вебмастере вместо честных 404. Маркетолог видит "элемент не найден" и успокаивается; робот видит 200 OK и добавляет URL в индекс.
Делайте: проверяйте curl -I, а не только браузер. Не делайте: типичная ошибка — считать "раздел не найден" в шаблоне каталога настоящей 404; на практике компонент часто живет с кодом 200.
Создайте или обновите файл 404.php в корне сайта
Шаблон ошибки - PHP-файл /404.php в корне, не 404.html: при ЧПУ адрес в браузере должен оставаться битым. Минимальный каркас по dev.1c-bitrix.ru:
<?php
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
CHTTP::SetStatus('404 Not Found');
@define('ERROR_404', 'Y');
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/header.php');
$APPLICATION->SetTitle('Страница не найдена');
?>
<p>Такой страницы нет. Воспользуйтесь поиском или каталогом.</p>
<?php require($_SERVER['DOCUMENT_ROOT'].'/bitrix/footer.php'); ?>
- Создайте или откройте /404.php в корне DOCUMENT_ROOT.
- Добавьте SetStatus, ERROR_404, prolog/header/footer.
- Задайте title через SetTitle - не оставляйте пустой заголовок.
- На Apache проверьте.htaccess: ErrorDocument 404 /404.php.
- На Nginx (BitrixVM или VPS) настройте error_page 404 на /404.php с кодом 404, не редиректом на главную.
Строки CHTTP::SetStatus и ERROR_404 обязательны: без них шаблон рисуется с кодом 200. Header.php и footer.php дают единый дизайн - шапка, меню, поиск. Проверка: откройте несуществующий URL и убедитесь, что в строке браузера остался битый путь, а не редирект на /404.php с кодом 301.
На shared-хостинге с Apache часто хватает.htaccess. На VPS сверьте конфиг с документацией провайдера - при смене хостинга, например на Beget, меняется связка Apache/Nginx.
Делайте: храните 404.php в Git. Не делайте: не ставьте 301 с битых URL на /404.php.
Отключите "статус 200 на 404" в главном модуле
"Настройки - Настройки модулей - Главный модуль" - снимите "Посылать в заголовке статус 200 на 404 ошибку". Без этого даже корректный 404.php может уйти с кодом 200. После сохранения снова проверьте curl -I на несуществующий URL.
Делайте: зафиксируйте скрин настройки. Не делайте: не включайте опцию "для совместимости" без причины.
Настройте каталог и news: SET_STATUS_404 и SHOW_404
URL удаленного товара открывается, bitrix:catalog пишет "элемент не найден", код 200. В параметрах комплексного компонента включите "Устанавливать статус 404" (SET_STATUS_404) и "Показывать специальную страницу" (SHOW_404). То же для bitrix:news.
В кастомном PHP с D7 вызывайте:
\Bitrix\Iblock\Component\Tools::process404('', true, true, true);
Если после галочек остается текст компонента, добавьте OnEpilog в /local/php_interface/init.php: при ERROR_404 очистить буфер и подключить /404.php. Магазины особенно уязвимы - см. гайд по интернет-магазину.
Делайте: тестируйте URL удаленного товара. Не делайте: не оставляйте снятые товары с открытым ЧПУ без 404 или 301.
Соберите полезную 404: поиск, меню и путь для клиента
Кастомная 404 - навигация, не мем. Добавьте поиск, 4-6 ссылок на ключевые разделы, кнопку "На главную", короткий текст без жаргона. Сохраняйте шапку и футер - человек не должен чувствовать, что попал на другой сайт. По данным community-гайдов, страница с поиском и каталогом удерживает пользователя в 2-3 раза чаще, чем пустой экран с одной ссылкой.
Делайте: единый дизайн с сайтом. Не делайте: не гонитесь за noindex на /404.php - важен код на каждом битом URL.
Выберите между 301 и 404 после миграции
Редирект всех битых ссылок на /404 - неверно по HTTP: робот путает "переехало" и "не существует".
| Ситуация | Действие | Код |
|---|---|---|
| Страница переехала | 301 на новый URL один к одному | 301 |
| Товар удален без замены | 404 на исходном URL, показ /404.php | 404 |
| URL никогда не существовал | 404, без редиректа на главную | 404 |
| "Все 404 на главную" | Не использовать | soft 404 |
Итог: 301 только для URL с реальной заменой; остальное - честный 404. Карту редиректов собирают до DNS - см. перенос и SEO-настройку Bitrix.
Делайте: таблица old URL → 301 или 404. Не делайте: 301 на /404.php - эксперты Битрикс и webmasters.stackexchange.com сходятся: это технически неверно.
Проверьте результат: curl, Вебмастер и краулер
Схема: curl -I на битый URL; curl на удаленный товар; Вебмастер «Исключенные»; краулер; сверка с картой 301.
curl -I https://ваш-домен.ru/nesushchestvuyushchiy-url/- в ответе HTTP 404.- Повторите для URL снятого товара - здесь чаще остается 200.
- В DevTools (Network) сверьте Status Code для коллег без curl.
- В Яндекс.Вебмастере смотрите "Исключенные" - рост 404, а не дублей с кодом 200.
- Через 2-4 недели прогоните краулером топ-URL из старой карты.
- Зафиксируйте в чек-листе после запуска.
Делайте: сохраняйте вывод curl в тикет. Не делайте: не закрывайте задачу по скриншоту без проверки каталога.
Что получите после настройки
Любой несуществующий URL отдает HTTP 404 и единый /404.php в дизайне сайта. Роботы перестают копить "мягкие" дубли; перенесенные страницы тянут вес через 301; мусор без аналога выпадает из индекса. Базовую SEO-настройку CMS после правок 404 имеет смысл сверить с отдельным гайдом - sitemap, canonical и robots должны работать в связке с кодами ответа.
- Диагностика curl -I на статике и удаленном товаре.
- /404.php и снятие "статус 200 на 404".
- SET_STATUS_404 и SHOW_404 в каталоге.
- Разведение 301 и 404 по таблице.
- Чек-лист B05 и мониторинг Вебмастера две недели.
Сложный каталог - обсудите на mvmolkov.ru. Примеры магазинов - в портфолио.
Автор: Максим Мольков, Senior-разработчик 1С-Битрикс, 8+ лет.
Источники: dev.1c-bitrix.ru.
Частые вопросы
Где изменить текст страницы 404 в Bitrix?
В /404.php между header.php и footer.php. Title - через SetTitle. Текст не лежит в разделе "Контент" админки - это PHP-файл шаблона.
Нужен ли редирект всех битых ссылок на главную?
Нет. Массовый 301 на главную - soft 404. Для несуществующих адресов - HTTP 404 на том же пути; 301 только если страница переехала один к одному.
Как проверить 404 после переноса?
curl -I на несуществующий путь, удаленный товар и старый URL без 301. Сверьте с картой редиректов. В Вебмастере - "Исключенные", без дублей с кодом 200. Повторите краулером через 2-4 недели.
Влияет ли 404 на SEO?
Честные 404 не штрафуют домен. Вредит "мягкая 404" с кодом 200 - дубли title и размывание каталога. 301 сохраняет вес там, где есть замена страницы.
Почему каталог пишет "элемент не найден", а не /404.php?
Не включены SET_STATUS_404 и SHOW_404 в bitrix:catalog. Включите обе галочки. На старых шаблонах добавьте OnEpilog в init.php.
Можно ли 404.html вместо 404.php?
Не рекомендуется: официальный курс указывает 404.php. HTML не подключает ядро CMS и ломает единый шаблон с ЧПУ.
Это для Bitrix24 или CMS на хостинге?
Для "1С-Битрикс: Управление сайтом" на вашем домене. Облачный CRM-портал не использует /404.php в корне — другой продукт, другие настройки.