1С Битрикс · 5 мин чтения

Дубль главной страницы Битрикс: как убрать index.php

Дубль главной страницы Битрикс встречается у клиентов почти на каждом третьем проекте на этой CMS. Сайт открывается и по адресу site.ru, и по site.ru/index.php, оба варианта отдают одинаковый html, а поисковики видят в этом два разных документа. Итог предсказуем: страницы конкурируют друг с другом в выдаче, часть ссылочного веса размывается, а иногда в индексе закрепляется именно версия с index.php вместо чистого домена. Дальше: рабочий алгоритм, которым я закрываю такие дубли на боевых проектах.

Откуда берётся дубль главной страницы index.php в Битрикс

По умолчанию Apache и Битрикс настроены так, что DirectoryIndex указывает на index.php. Запрос к site.ru и запрос к site.ru/index.php физически попадают в один и тот же файл в корне сайта, и оба отдают код 200 с идентичным контентом. Прямого запрета на доступ к index.php в дистрибутиве нет, поэтому проблема не чинится сама после установки CMS.

Второй частый источник, ссылки на /index.php внутри самого сайта: в шаблоне, в меню, в логотипе-ссылке на главную, иногда прямо в компонентах, которые кто-то донастраивал руками через визуальный редактор. Поисковый бот находит такую ссылку, обходит её и кладёт в индекс отдельным документом.

Третий источник, внешние обратные ссылки. Если на сайт когда-то ссылались с указанием site.ru/index.php, а такое случается после миграции с других CMS или просто по невнимательности, поисковик знает про этот адрес и периодически будет его проверять, даже если внутри сайта таких ссылок больше не осталось.

Как найти дубль главной страницы в индексе

Проверяю несколько источников, обычно этого достаточно, чтобы понять масштаб:

  • Яндекс.Вебмастер, раздел «Индексирование» -> «Страницы в поиске»: ищу там site.ru/index.php рядом с обычным site.ru.
  • Google Search Console, отчёт по индексированию страниц, там же можно вбить в поиске site:site.ru inurl:index.php и посмотреть, что реально в индексе.
  • Простой curl ‑I site.ru/index.php из терминала: если ответ 200, а не 301, дубль активен прямо сейчас.
  • Сравниваю title и meta description на site.ru и site.ru/index.php: если они совпадают один в один, это тот самый случай.

Если в выдаче уже мелькает версия с index.php, лучше не тянуть с исправлением: чем дольше обе версии живут параллельно, тем дольше поисковику потребуется на переклейку сигналов после исправления.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Убираю дубль через 301-редирект в .htaccess

Самый надёжный способ, серверный редирект на уровне .htaccess, до того как запрос вообще попадёт в ядро Битрикс. Работает быстрее редиректа из PHP-кода и не зависит от того, какой компонент обрабатывает главную страницу.

Правило нужно ставить до блока BitrixEnv, того самого, что начинается с комментария #BEGIN Bitrix RewriteRules# в .htaccess. Иначе движок Битрикс перехватит запрос раньше, и редирект просто не сработает:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\s/index\.php[\s?] [NC]
RewriteRule ^index\.php$ / [R=301,L]

После добавления правила любой запрос к /index.php с GET-параметрами или без них будет 301-редиректить на корень домена. Проверяю сразу через curl ‑I: ответ должен быть 301 Moved Permanently с Location на чистый домен, без index.php в адресе.

Правлю правила в urlrewrite.php и настройках сайта

Кроме .htaccess у Битрикс есть собственный слой ЧПУ: файл /bitrix/php_interface/urlrewrite.php, а в новых версиях часть правил хранится в базе и доступна через административную панель, раздел «Настройки продукта» -> «Пути и алиасы». Смотрю, нет ли там явного правила, которое подставляет главную по адресу /index.php. Если есть, переписываю так, чтобы обработчиком главной оставался только «/».

Отдельно проверяю модуль «Поисковая оптимизация», если он установлен: там задаётся канонический протокол и домен для всего сайта. Canonical на https://site.ru/ должен стоять и на главной, и на странице /index.php, чтобы поисковик получал непротиворечивый сигнал, даже если куда-то долетит прямой запрос к index.php в обход редиректа. Если разбираться с этим самостоятельно некогда, обычно я включаю такую проверку в разработку и доработку сайтов на Битрикс вместе с остальным техническим аудитом.

Что делать с уже проиндексированными страницами index.php

301-редирект убирает саму причину, но старые адреса из индекса сами по себе не исчезают мгновенно. После настройки редиректа:

  1. В Яндекс.Вебмастере отправляю site.ru/index.php на переобход через «Переобход страниц».
  2. В Google Search Console делаю запрос на индексирование для главной, а старый адрес Google обычно замечает сам при следующем плановом обходе.
  3. Проверяю карту сайта sitemap.xml: там не должно быть адресов с index.php, только чистый домен.
  4. Через 2-3 недели проверяю выдачу повторно, обычно за это время дубль пропадает из «Страниц в поиске».

Если через месяц старый адрес всё ещё в индексе, обычно это значит, что где-то на сайте осталась внутренняя ссылка на /index.php, и поисковик подтверждает существование страницы заново при каждом обходе.

Ошибки, которые мешают убрать дубль до конца

На практике встречаю одни и те же промахи:

  • Редирект прописан в коде компонента шаблона, а не в .htaccess. Работает медленнее, а иногда не срабатывает вовсе, если запрос обрабатывает другой обработчик раньше компонента.
  • Canonical стоит правильно, но сам index.php по-прежнему отдаёт 200 вместо 301. Поисковик получает два противоречащих сигнала и может проигнорировать canonical.
  • Забыли про остальные варианты дубля: с www и без www, по http и по https. Из-за этого дублей на самом деле не два, а четыре-восемь, и чинить нужно все связки сразу.
  • Правило редиректа добавили после закрывающего комментария Bitrix-блока в .htaccess, из-за чего оно физически не выполняется: штатные правила ЧПУ перехватывают запрос раньше.

Отдельно про поддержку: если дубль вернулся после обновления Битрикс или переноса на новый шаблон, обычно дело в том, что обновление переписало .htaccess поверх кастомных правил. Я закладываю такую проверку в ежемесячную техподдержку сайтов на Битрикс, там же слежу за индексацией и другими техническими моментами, которые всплывают уже после запуска.

Частые вопросы

Почему дубль главной появляется даже на новых сайтах на Битрикс?

Потому что DirectoryIndex по умолчанию указывает на index.php, и это поведение веб-сервера, а не ошибка конкретной сборки. Пока никто явно не добавил редирект, оба адреса работают параллельно с первого дня после запуска сайта.

Нужно ли удалять сам файл index.php с сервера?

Нет, и делать этого не стоит: это точка входа для всего движка Битрикс, без него сайт перестанет работать целиком. Убирать нужно доступность файла по прямому URL, а не сам файл.

Как долго дубль будет висеть в поиске после исправления?

По моей практике Яндекс убирает такие страницы из «Страниц в поиске» за 1-3 недели после переобхода, Google иногда чуть дольше, до месяца. Списывать это на ошибку в редиректе раньше этого срока рано.

Ломает ли 301-редирект на /index.php работу админки или личного кабинета?

Нет, если правило написано с якорем ^index\.php$ и стоит до блока Bitrix. Оно ловит только прямой запрос к главному index.php в корне и не трогает /bitrix/admin/, /personal/ и другие разделы, у которых свои файлы index.php в подпапках.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно