Что такое 301 редирект
Редирект — перенаправление посетителей веб-ресурса с устаревших страниц на действующие, например, с http-версий на https. Вы можете выполнять настройки как на сервере, так и прямо на сайте. Лучше выбирайте первый вариант, т.к серверные директивы обрабатываются быстрее php-кода.
Редирект, когда ты зашел на устаревшую страницу
Существует два наиболее известных редиректа, и один из них — Permanent Redirect 301. У него несколько «имен», в том числе «301 редирект» и «постоянный редирект». При переадресации браузер отправляет на сервер определенный запрос и получает специальный ответ. После редиректа пользователи не могут попасть на страницу по прежнему адресу, т. к. он становится неактуальным. Вес старой страницы переходит на новую версию.
Зачем нужен редирект
Ошибки в работе с редиректом дорого обходятся владельцу веб-ресурса — при переносе контента или изменении домена сайт «падет» в выдаче. В остальных случаях поисковые системы понимают, что перенаправление выполняется корректно. При этом выше вероятность сохранения позиций при смене урла.
Хотел сделать правильно, но получилось...
Чтобы получить сертификат для каждого доменного имени, зайдите на свой хостинг, откройте раздел «Домены» и установите SSL. Протокол сайта поменяется с HTTP на HTTPS. Теперь настройте редирект, иначе одинаковые УРЛы, т. е. с http и https, будут идентифицироваться поисковыми системами как дубли, а это может вредить индексации.
Как настроить редирект через файл .htaccess
Чтобы корректно настроить перенаправление с http на https, откройте .htaccess в корневой папке сайта. Если файла нет, то создайте его. Перед htaccess обязательно должна быть точка, иначе все усилия окажутся напрасными. Пропишите в файле код:
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L].
Это может не сработать. Попробуйте по-другому:
RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L].
Если попытки оказались неудачными и вы столкнулись с циклической переадресацией, то воспользуйтесь таким вариантом:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
либо
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301].
Обратите внимание: указывать доменное имя не нужно.
Настраиваешь редирект
Если все сделано правильно, то и пользователи, и поисковики будут попадать на https-версии страниц. Для проверки введите в адресной строке названиедомена.ru. Если вас мгновенно перебрасывает на https://названиедомена.ru, то все в порядке.
Иногда после перехода на протокол HTTPS могут «сломаться» шрифты и картинки, путь к которым разработчик прописал вместе с доменом и протоколом. Если вы столкнулись с этой проблемой, то проверьте коды страниц. В них содержатся надписи с установкой шрифта, которые выглядят следующим образом:
<script src="http://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js"></script>
Вместо http пропишите https. У вас получится:
<script src="https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js"></script>
Либо можно прописывать путь вообще без протокола (<script src="//ajax.googleapis.com/....></script>), тогда браузер будет подгружать ресурс по тому протоколу, по которому идет обращение к сайту.
Как склеить зеркала сайта
Сайты http://sitename и http://www.sitename воспринимаются поисковыми системами как разные, а ссылки ведут на один и тот же веб-ресурс. В результате тот или иной «близнец» определяется поисковиками как дубль, что негативно влияет на продвижение. Чтобы избежать такой ситуации, склейте зеркала сайта.
Вот их двое, а надо-то одну
Если поисковики в первую очередь проиндексировали сайт с www, то главным зеркалом станет УРЛ вида www.site.ru. В таком случае пропишите в .htaccess:
RewriteCond %{HTTP_HOST} !^www.name.site.ru$
RewriteRule ^(.*)$ http://www.name.site.ru/$1 [L,R=301].
Возможна и обратная ситуация, когда поисковые системы сначала индексируют версию без www. Тогда надо добавить:
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule .* http://%1/$0 [L,R=301].
Как настроить постраничный редирект
Если вам нужен редирект для всех страниц, кроме одной, то пропишите в .htaccess:
RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} !^/page.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L].
Чтобы настроить редирект на https для одной страницы, добавьте в файл:
RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} =/page.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L].
Как изменить домен
Чтобы перейти на новый домен и при этом не потерять SEO-позиции, пропишите в .htaccess такую комбинацию:
RewriteCond %{HTTP_HOST} ^www.old_name.ru$ [NC]
RewriteRule ^(.*)$ http://new_name.ru/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^old_name.ru$ [NC]
RewriteRule ^(.*)$ http://new_name.ru/$1 [L,R=301].
Забираем с собой SEO-позиции!
Как сделать редирект для УРЛов с параметрами и без них
Сначала рассмотрим, как настроить переадресацию без параметров. Чтобы перенести содержимое страницы и сохранить SEO-позиции, добавьте в .htaccess такую комбинацию:
RewriteRule ^(.*)old_page.html$ http://vash-sait.ru/new_page.html [R=301,L].
Перейдем к настройке с параметрами. Например, вам нужен редирект для УРЛа >http://name.site/articles.php?section=1, в котором section=1 — это параметр. Чтобы настроить переадресацию, пропишите следующее:
RewriteCond %{QUERY_STRING} section=1
RewriteRule ^index.php http://name.site/articles.php? [R=301,L].
Как настроить переадресацию с index.php на главную
Иногда главная оказывается недоступной сразу по нескольким адресам. В таком случае воспользуйтесь комбинацией:
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^/]$
RewriteRule ^(.*)/$ /$1 [R=301,L].
Существует и другой вариант:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L].
Как настроить редирект со страниц без слеша на адреса со слешем
Чтобы сделать такой редирект для всего сайта, добавьте в .htaccess следующее:
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^/])$ /$1/ [R=301,L].
Как сделать редирект для Nginx
Если в качестве веб-сервера используется nginx, то директивы из файла .htaccess не будут обрабатываться. Поэтому для настройки редиректов следует добавить соответствующие правила в файл с конфигурацией интересующего вас веб-сайта.
Переадресация с www на без www:
server {#...
if($host~ * www.(.*)) {
set $host_without_www $1;
rewrite ^ (.*) $ http: //$host_without_www$1 permanent;
}#...
}
Еще один способ — добавить отдельную секцию server для www-поддомена:
server {
listen 443;
server_name www.site.ru;
return 301 https://site.ru$request_uri;
ssl_certificate /путь/к/сертификату.cer;
ssl_certificate_key /путь/к/ключу.key;
}
Переадресация с без www на c www:
server {#...
if($host~ * ^ [ ^ .] + .[ ^ .] + $) {
rewrite ^ (.*) $ $scheme: //www.$host$1 permanent;
}#...
}
Перезапустите nginx.
PHP редирект со старой страницы на новую
if($_SERVER['REQUEST_URI'] == '/old-url/'){
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://abcname.net/new-url/");
exit();
}
здесь $_SERVER['REQUEST_URI'] - адрес (URL) текущей страницы без названия домена.
Постраничные редиректы
Приведем еще примеры настройки постраничной переадресации 301.
Редирект со страницы page1.html на страницу page2.html: rewrite /старый__URL/ /новый_URL/ permanent; в секции сервер от нужного сайта/домена.
301 Redirect для разных панелей управления хостингом
Рассмотрим настройки для разных панелей управления.
Cpanel
Зайдите в «Домены» и выберите «Перенаправления».
Перед вами появится окно. В нем нужно сделать следующее:
- В строке «Тип» выбрать «Постоянный 301».
- Из списка «https://www» выберите домен, условно — primer.ru.
- В строке «Перенаправляет на» пропишите адрес http://primer.ru/.
- Откройте блок «Перенаправление www» и выберите «Перенаправлять только с www».
- Кликните «Добавить», чтобы сохранить изменения.
ISPmanager
Чтобы вносить изменения, используйте nginx.config либо .htaccess. Панель оснащена механизмом переадресации. Чтобы сделать редирект на https, зайдите в раздел «WWW-домены» и снимите галочку напротив соответствующего пункта.
Beget
Редирект на https подключается переключением галочки в настройках:
Редирект и популярные движки
Рассмотрим особенности переадресации для известных CMS.
WordPress
У этой популярной CMS множество плагинов для настройки постоянного редиректа — Redirection, Quick Page, Safe Redirect Manager и др. Разберемся, как выполнить переадресацию через Redirection. Чтобы его настроить, зайдите в консоль сайта и выберите «Инструменты» либо откройте раздел плагинов. Заполните два поля — Source URL и Target URL. В первом укажите старый адрес, а во втором пропишите новый — с www или без него.
Также вы можете внести правки в .htaccess, который находится в разделе управления хостингом. Для подключения воспользуйтесь FTP-клиентом.
«Битрикс»
В Битрикс есть встроенная функция для создания редиректа (переадресации) на PHP - это функция LocalRedirect. Также вы можете воспользоваться готовым модулем, котороый позволит управлять редиректами через админ-панель.
Редирект настроен!
Как автоматически создать код
Если у вас не получается самостоятельно прописать код, обратитесь к специалистам техподдержки либо воспользуйтесь онлайн-генераторами.
Чтобы поисковые системы понимали, что два разных адреса относятся к одному веб-ресурсу, нужен постоянный редирект. 301 Redirect — это полезный инструмент, благодаря которому вы сможете оптимизировать сайт и исправить многие ошибки. Следуйте нашей инструкции, и у вас все получится.