301 редирект (301 Moved Permanently) — это перенаправление пользователя с одной страницы (url) на другую.
Зачем нужен 301 редирект
- передача ссылочного веса
- правильное избавление от старых страниц
- сохранение позиций (полное или частичное) при смене урлов
- избавление от дублей внутри сайта (если такое есть)
- переезд сайта на новый домен или протокол HTTPS
- склейка доменов
Как сделать 301 редирект с помощью файла .htaccess?
Примеры будем рассматривать на сайте вида site.ru
Склейка домена с www с вариантом без
Для поисковых систем site.ru и www.site.ru — это два разных домена. Если у вас не настроена переадресация с одной версии домена на другую, в выдаче поисковых систем могут появиться дубли страниц. При базовой технической оптимизации в файле robots.txt прописывается обязательное правило с указанием главного зеркала сайта, но также для подстраховки необходимо настроить и редиректы. Это не будет лишним точно.
Настраиваем редирект с http://www.site.ru на site.ru. Здесь главное зеркало сайта это http://site.ru
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
301 редирект при переезде на HTTPS
Поисковые системы в последние годы обозначили тренд на безопасность и рекомендуют всем вебмастерам переводить сайты на защищенный протокол https
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Если нужно сделать наоборот:
RewriteCond %{HTTPS} «on»
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
Стандартная переадресация с одной статической страницы на другую
Часто бывает, что на сайте какие-либо страницы устаревают, становятся неактуальными или просто вебмастеру необходимо привести урл страницы к ЧПУ виду.
Например, нужно настроить 301 редирект со страницы http://www.site.ru/page1/ на страницу http://www.site.ru/prodvizhenie-saytov/
RewriteCond %{REQUEST_URI} ^/page1/$
RewriteRule ^.*$ http://www.site.ru/prodvizhenie-saytov/? [R=301,L]
301-редирект с домена на домен
Иногда бывают ситуации, когда необходимо настроить редиректы с одного домена на другой. Например, у вас был молодой, не трастовый домен, а со временем появился откуда-то прокачанный, трастовый (купили может). Или владельцу сайта надоело старое название домена и резко захотелось его поменять на другое.
Для полной передачи веса с одного домена на другой одних редиректов будет не достаточно, но об этом не в этой статье.
RewriteCond %{HTTP_HOST} ^old-site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.newsite.ru/$1 [R=301,L]
Если ваш домен находится в зоне РФ
RewriteCond %{HTTP_HOST} ^xn-…\.xn--p1ai$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
Переадресация на папки со слешем в конце /
Иногда на сайтах встречаются дубли страниц вида http://www.site.ru/prodvizhenie-saytov/ и http://www.site.ru/prodvizhenie-saytov
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]
Перенаправление с индексной страницы php (index.php) на саму папку (корень)
Иногда у сайтов может появляться «технический мусор» из-за особенностей админки или каких-либо других причин. Например, главная страница сайта бывает часто доступна по адресу вида http://www.site.ru/index.php и может присутствовать в индексе поисковых систем, мешая ранжированию главной страницы в поисковой выдаче.
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
Для всех индексных страниц на сайте:
RewriteRule ^(.*)index\.php$ http://www.site.ru/$1 [R=301,L]
301 редирект с поддомена на основной домен
RewriteCond %{HTTP_HOST} ^test.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} [R=301,NC,L,QSA]
Статья находится здесь