Как настроить 301 редирект правильно на примерах .htaccess и PHP
Заказать услугу: ""
Содержание с переходом
- Зачем нужен 301 редирект в SEO
- 301 редирект через .htaccess
- На другую страницу
- На другой раздел или каталог
- На другой домен
- Домен с WWW на без WWW
- Домен без WWW на с WWW
- Удалить слеш в конце
- Добавить слеш в конце
- С расширения PHP на HTML
- Дубли главной страницы
- Все адреса с index.php на без
- C HTTP на HTTPS
- С HTTPS на HTTP
- Редирект средствами CMS
Зачем нужен 301 редирект в SEO
301 Permanent – это часть протокола HTTP, код ответа 301 сообщает, что ресурс навсегда перемещен на новый URL. Так человек переходя по старой ссылке перебрасывается на новый адрес, а поисковая система индексируя старый URL заменяет ее на новый URL с сохранением позиций этой страницы в поисковой выдаче.
В каких случаях применяется:
- при изменении URL адреса, например для создания ЧПУ
- при полной смене домена, например на короткий запоминающийся домен
- при смене CMS, например старая ограничена в функциональных возможностях
- при устранении дублей страниц, например URL заканчивается на слеш ("/") и без него
- для склейки имени сайта с WWW и без WWW
- для сохранения позиций в поисковых системах
Какова бы не была причина, основной аспект заключается в том, что раньше на страницу можно было попасть по старому адресу, теперь адрес этой страницы изменился и человека, а так же поисковую систему надо автоматически направить по новому адресу URL.
301 редирект можно реализовать несколькими способами, рассмотрим детально примеры редиректа.
301 редирект через .htaccess
Не всегда может работать, так как диктуется возможностями сервера или хостинга. Если на нем используется Apache - тогда проще всего реализовать с помощью файла .htaccess в корне папки сайта. Для работы так же нужно наличие включенных модулей mod_alias и/или mod_rewrite в php.ini.
Иногда изменяя логику работы редиректа через файл .htaccess можно внести изменения, а они либо не работают, а должны работать, либо работает еще старая логика – в этом случае, попробуйте проверить редирект в другом браузере, возможно ответ закешировался на некоторое время.
Винниченко Константин, замечание из практики
На другую страницу
Простой пример 301 редиректа с перенаправлением одной страницы, для перенаправления нескольких страниц достаточно добавить несколько таких строчек
Redirect 301 /old-page.html http://site.ru/new-page.html
На другой раздел или каталог
Если изменили название каталога или раздела в URL
RewriteRule old-catalog /(.*) / old-catalog /$1 [R=301,L]
Если каталог или раздел находится в середине URL тогда этот пример
RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2 [R=301,L]
На другой домен
Если весь сайт переехал на другое доменное имя с сохранением URL
Options +FollowSymLinks RewriteEngine On RewriteRule ^(.*)$ http://new-site.ru/$1 [R=301,L]
Домен с WWW на без WWW
Хотите сократить адрес сайта с http://www.site.ru на http://site.ru
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Домен без WWW на с WWW
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
Удалить слеш в конце
Очень частая ошибка и для поисковых систем это считаются разные страницы
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1 [R=301,L]
Добавить слеш в конце
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*[^/])$ $1/ [L,R=301]
С расширения PHP на HTML
В случаях смены CMS или сделать привычный людям URL
RedirectMatch 301 /(.*)\.php$ /$1.html
Дубли главной страницы
Для любого адреса домашней страницы, например, http://site.ru/default.htm или http://site.ru/index.html, будет перенаправлен на главную страницу http://site.ru
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/ [NC] RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ http://site.ru/$1 [L,R=301]
Все адреса с index.php на без
RewriteEngine On RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^(.*)index\.php$ http://site.ru/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^.*$ $0.php [L,QSA] RewriteCond %{THE_REQUEST} ([^\s]*)index\.php(\?[^\s]*)? RewriteRule (.*) %1 [R=301,L]
C HTTP на HTTPS
Установили SSL-сертификат, хотите сделать чтобы сайт был доступен только по HTTPS протоколу
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}Альтернативный вариант, срабатывает чаще
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*) https://site.ru/$1 [R=301,L]
С HTTPS на HTTP
RewriteEngine On RewriteCond %{HTTPS} on RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
Редирект средствами CMS
Редирект 301 Битрикс
<? LocalRedirect( "/", // перенаправляем на главную страницу сайта false, // пропустить проверку модуля безопасности на фишинг "301 Moved permanently" // со статусом 301 ); ?>