Дубли страниц — одна из самых частых SEO-проблем, которая приводит к:
-
Размыванию веса страниц (PageRank делится между дублями)
-
Снижению скорости индексации (поисковые роботы тратят ресурсы на обход одинаковых URL)
-
Ошибкам в аналитике (трафик распределяется по разным адресам)
В этой статье разберём основные причины дублей и готовые решения через .htaccess, включая специфику для Битрикс.
1. Как работают редиректы в .htaccess
Файл .htaccess позволяет управлять перенаправлениями через модуль mod_rewrite.
Основные принципы:
-
Правила обрабатываются сверху вниз.
-
RewriteCond— условия,RewriteRule— само правило. -
Флаг
[R=301]— постоянный редирект (лучший для SEO). -
Флаг
[L](Last) — остановка обработки дальнейших правил.
Перед внедрением:
✔ Протестируйте редиректы (например, через curl -I или Redirect Inspector).
✔ Сделайте бэкап .htaccess — ошибки могут "положить" сайт.
2. Основные редиректы для устранения дублей
1. Редирект с HTTP на HTTPS
Лучше настраивать через хостинг, но если нужно в .htaccess:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 2. Редирект с www на без www (или наоборот)
Без www → с www:
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L] С www → без www:
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L] 3. Добавление слеша / в конец URL
(если его нет и это не файл)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://site.ru/$1/ [L,R=301] 4. Удаление index.php и index.html
(редирект на "чистый" URL)
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_URI} ^(.*)/index\.(php|html)$
RewriteRule ^(.*)$ %1/ [R=301,L] 3. Дополнительные редиректы (для SEO)
Удаление UTM-меток и лишних параметров
(если они создают дубли)
RewriteCond %{QUERY_STRING} ^(.*)(utm_source|utm_medium|utm_campaign)=[^&]+(.*)$
RewriteRule ^(.*)$ /$1?%1%3 [R=301,L] Приведение URL к нижнему регистру (для Битрикс)
(если CMS чувствительна к регистру)
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule ^(.*)$ ${lc:$1} [R=301,L] Редирект с мобильной версии на основную (если не нужна отдельная)
RewriteCond %{HTTP_USER_AGENT} (Android|iPhone|iPad) [NC]
RewriteCond %{HTTP_HOST} !^m\.site\.ru$
RewriteRule ^(.*)$ https://m.site.ru/$1 [R=301,L] 4. Полный пример .htaccess для Битрикс
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
# HTTP → HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# www → без www
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
# Добавление /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://site.ru/$1/ [L,R=301]
# Удаление index.php / index.html
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_URI} ^(.*)/index\.(php|html)$
RewriteRule ^(.*)$ %1/ [R=301,L]
# Битрикс-специфичные правила
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule> 5. Проверка и тестирование
Как проверить редиректы?
-
Через браузер (DevTools → вкладка Network → смотрим статус 301).
-
Через curl:
curl -I http://site.ru/old-url
-
Через онлайн-инструменты (например, Redirect Checker).
Что делать, если редиректы не работают?
-
Проверить, включён ли
mod_rewriteна сервере. -
Убедиться, что нет конфликтующих правил.
-
Проверить кеш браузера (используйте инкогнито-режим).
Вывод
Итоговый чек-лист:
- Настроен редирект HTTP → HTTPS
- Убраны дубли www / без www
- Добавлены слеши / где нужно
- Удалены index.php и index. Проверены UTM-метки и регистр URL
Готово! Теперь ваш сайт защищён от дублей, а поисковые системы будут правильно индексировать страницы.