Избавимся от основных причин возникновения дублей на сайте.
Битрикс – как убрать дубли на сайте при помощи htaccess
Какие наиболее частые дубли возникают на сайтах?
- Редирект с http на https
- Редирект с www на без www
- Редирект без “/” на /
- Редирект c index.php на раздел
- Редирект с index.html на раздел
Давайте рассмотрим каждый из них.
Редирект с http на https
Сейчас уже сложно встретить сайт без защищенного протокола, однако они есть. Если этот редирект не настроен через ваш хостинг, то напишите в поддержку, т.к. чаще всего он выставляется именно так. Вариант через htaccess лучше использовать в крайнем случае.
Редирект с 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]
Редирект c index.php на раздел
Вариантов написать такой редирект несколько, на одном из проектов сработал такой:
RewriteCond %{REQUEST_METHOD} =GET RewriteCond %{REQUEST_URI} ^(.*)/index.php$ RewriteRule ^(.*)$ %1/ [R=301,L]
Редирект с index.html на раздел
RewriteCond %{REQUEST_METHOD} =GET RewriteCond %{REQUEST_URI} ^(.*)/index.html$ RewriteRule ^(.*)$ %1/ [R=301,L]
Воспользуемся примером выше и напишем точно такой же, только для “.html”.
Полный фрагмент файла выглядит так:
<IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] # from www RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC] RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L] # to slash / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..{1,10}$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ https://site.ru/$1/ [L,R=301] # index.php RewriteCond %{REQUEST_METHOD} =GET RewriteCond %{REQUEST_URI} ^(.*)/index.php$ RewriteRule ^(.*)$ %1/ [R=301,L] # index.html RewriteCond %{REQUEST_METHOD} =GET RewriteCond %{REQUEST_URI} ^(.*)/index.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>
Для всех других ошибочных страниц у вас должна корректно работать ошибка 404 и специальный статус Not Found.