Настройка 301-редиректа через файл .htaccess с примерами. Инструкция по переадресации на новый домен, с http на https с сохранением позиций и трафика из поисковых систем.
301-редирект — это постоянное перенаправление со страницы сайта по другому URL-адресу, что необходимо для переадресации пользователей и поисковых роботов. При редиректе, перенаправленному адресу передаются все характеристики старого, включая ссылочный вес. В то же время URL-адресу, с которого необходимо перенаправить трафик, присваивается код ответа сервера 301, вследствие чего идет переезд с искомого адреса на указанный. Установить редирект можно как для отдельных страниц, так и полностью на весь веб-сайт.
Ниже мы дадим подробную инструкцию по настройке 301-редиректа с готовым кодом, который вы можете использовать в дальнейшем.
Какие виды редиректов бывают?
Помимо уже озвученного 301-го, существует еще несколько видов перенаправления, используемых в зависимости от технических особенностей того или иного случая.
Временный редирект
Редирект с кодом ответа сервера 302, при котором новому адресу не присваивается ссылочный вес и прочие внутренние метрики старого, поисковики продолжают индексировать обе страницы. Используется для перенаправления в случае, когда удаление старой страницы не планируется.
Краткосрочный редирект
Код ответа 307 Moved Temporary применяется при необходимости проведения срочных технических работ со страницей. В большинстве случаев не используется.
Переадресация на уровне сайта
Meta Refresh — не рекомендуемый метод редиректа, имеющий негативный эффект на поведенческие факторы в SEO. При переходе на страницу происходит 5-секундная задержка с сообщением о загрузке страницы, вследствие чего большинство пользователей покидают сайт.
Указание канонического адреса
Атрибут не является редиректом. Это способ указания поисковому роботу приоритетного для индексации URL-адреса. При использовании атрибута неканоническая страница остается открытой для индексирования и может быть открыта пользователями при просмотре сайта.
Когда нужен 301 редирект?
Ответа сервера 301 предназначен для постоянного редиректа и применяется в следующих ситуациях:
- переезд ресурса на новый домен с сохранением структуры URL-адресов и частичной доли трафика;
- перемещение страниц по новому адресу — например, в случаях замены URL на ЧПУ (человекопонятные) или при переводе страницы среди разделов;
- склейка зеркал — при доступности веб-сайта с нескольких зеркал настраивается редирект на основное зеркало.
Также 301-редирект необходим переводе веб-сайта с http на https, когда требуется установка SSL-сертификата.
Настройка 301 редиректа через .htaccess
Файл .htaccess располагается в корне веб-сайта и используется для регулировки правил работы Apache, изменения параметров доступа к URL-адресам. Если в каталоге сервера файла нет, его можно создать.
Доступ к .htaccess можно получить через FTP-клиент. При этом файл является скрытым, для его обнаружения на сервере необходимо отметить в панели управления отображение скрытых папок и файлов.
На примере программы WinSCP:
Важные моменты при установке 301 редиректа:
- заключайте прописанные правила в блок ...., это предотвратит возможные ошибки;
- включите механизм mod_rewrite с помощью директивы RewriteEngine on;
- добавляйте в правила RewriteRule флаги [R=301,L], так как настройки хостинга предполагают автоматическое определение 3хх редиректа как временного (302) и т.д.;
- перед внесением любых правок всегда делайте копию htaccess на рабочем столе компьютера — это позволит восстановить работоспособность сайта в случае ошибок при настройке.
Ниже перечислим с примерами популярные ситуации, при которых важно настроить 301 редирект. При наличии подобной проблемы, скопируйте код, вставьте свои переменные и внесите изменения в файл .htaccess.
Редирект домена с адресом www. на основное зеркало сайта
Очень распространенная ошибка — возможность доступа к веб-сайту по двум адресам. Адрес с www (например — www.domain.ru) и без www (domain.ru) считаются полными дубликатами в индексе, поскольку роботы поисковых систем воспринимают адреса как отдельные сайты.
Для исправления ошибки необходимо настроить редирект 301 на основное зеркало в содержимом файла htaccess.
Если главное зеркало без WWW:
RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Если сайт с подключенным https-протоколом:
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
Если главное зеркало с WWW:
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.domain.ru/$1 [R=301,L]
Важно! Замените site.ru на адрес вашего ресурса.
Редирект при переходе с http на https
Наличие протокола шифрования обязательно для любого коммерческого сайта на сегодняшний день, поскольку:
- наличие уведомления о безопасности соединения увеличивает доверие у пользователей;
- является требованием поисковых систем, несоблюдение которого может сказаться негативно на ранжировании.
После настройки протокола также необходимо перенаправить все существующие страницы на другой URL через 301-редирект. Если этого не сделать, при последующей индексации роботы зафиксируют дубликаты.
Сделать это можно прописав в htaccess:
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
Где domain.ru - адрес вашего сайта.
При необходимости обратного переезда с https на http:
RewriteCond %{HTTPS} "on"
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
301 редирект для параметрического URL-адреса
GET-параметры часто используются при формировании адресов страниц e-commerce. К примеру, URL-адрес с параметром — http://site.ru/catalog.php?reff=menu_main
RewriteCond %{QUERY_STRING} reff=menu_main
RewriteRule ^index.php http://site.ru/catalog.php? [R=301,L]
Настройка редиректа со страницы веб-сайта на другую
Рассмотрим варианты простого редиректа между внутренними разделами:
RewriteRule ^(.*)catalog-stariy.html$ http://domain.ru/catalog-noviy.html [R=301,L]
Или:
Redirect 301 /catalog-stariy.html http://domain.ru/catalog-noviy.html
Склейка дублей /index.html и /index.php с корнем сайта
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://sayt.ru/ [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://sayt.ru/ [R=301,L]
Важно! Где sayt.ru - адрес вашего сайта.
Редирект страниц со слешем и без
Ниже указан редирект для всех страниц сайта.
Со слешем на без слеша:
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]
Без слеша на слеш:
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
Редирект на новый домен
При необходимости перенаправить сайт на другое доменное имя и оставить позиции в выдаче, можно указав следующие настройки:
RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} ^site\.ru
RewriteRule ^(.*)$ http://domain.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.site\.ru
RewriteRule ^(.*)$ http://domain-new.ru/$1 [R=301,L]
Важно! Где, domain.ru — адрес старого сайта
domain-new.ru — адрес нового сайта
Редирект кириллического домена (в зоне .рф)
При переезде ресурса с домена .рф на латинский домен, применяется следующая конструкция:
RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ [NC]
RewriteRule ^(.*)$ http://www.domain.ru/$1 [R=301,L]
Важно! Где, domain.ru — адрес латинского домена.
Редирект с поддомена на основной домен
Если прекратилась необходимость в содержании поддомена, например, закрылся региональный филиал, можно переадресовать его на основной:
RewriteCond %{HTTP_HOST} ^spb.domain.ru$ [NC]
RewriteRule ^(.*)$ http://domain.ru%{REQUEST_URI} [R=301,NC,L,QSA]
Редирект 301 на главную страницу с ошибки 404
Периодически на сайте могут возникать битые URL-адреса, отдающие ответ сервера с кодом 404, при попадании на которые пользователи могут покинуть сайт. Есть возможность за счет редиректа автоматически переадресовать трафик на иную страницу сайта, в данном случае на главную.
ErrorDocument 404 http://www.domain.ru/301.html
Другие полезные команды в htaccess
Путь для 404 ошибки
Чтобы при попадании на битый URL-адрес пользователи видели сверстанную и оформленную в стилистике сайта страницу “404 not found”, необходимо указать к ней путь в .htaccess.
ErrorDocument 404 /404.php
Где, /404.php — фактическое местоположение страницы “not found” в файловом каталоге.
Редирект через PHP
Для перенаправления прописываются в index.php следующие параметры:
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.domain.ru/category/");
exit();
?>
Установка 403 кода ответа сервера для трафика с нежелательных источников
В случае значительного количества трафика со спам-площадок, вы можете настроить запрет на посещение ресурса с данных площадок на стороне сервера.
RewriteCond %{HTTP_REFERER} domain1.ru [NC,OR]
RewriteCond %{HTTP_REFERER} domain2.ru [NC]
RewriteRule .* - [F]
Регулярные выражения в файле .htaccess
Регулярные выражения необходимы для описания правил и условий их включения.
. |
замена символа; |
[abc] |
список знаков, которые совпадают с a, b и с; |
[^abc] |
знаки за пределами данного диапазона (не считая a, b, с); |
* |
количество повторений предыдущего значения ≥0; |
[abc]* |
поиск символов из указанного набора, перечисляемых по порядку подряд; |
[^abc]* |
позволяет получить обратный результат; |
.* |
замещение символа; |
«.*» |
поиск подстрок, указанных между кавычек; |
^ |
начало выражения или целой строки; |
$ |
окончание строки; |
\w |
цифра, нижнее подчеркивание или буква; |
\d |
замена цифры; |
\D |
замена знаков (с цифрами не работает); |
[0-9] |
замена цифры в числах; |
[a-z] |
для всех маленьких букв; |
[A-Z] |
для всех больших букв; |
[a-zA-Z] |
все буквы, независимо от регистра; |
[a-Z] |
все буквы, независимо от регистра. |
Пример готового файла htaccess
Options -Indexes
ErrorDocument 404 /404.php
<IfModule mod_php5.c>
php_flag allow_call_time_pass_reference 1
php_flag session.use_trans_sid off
#php_value display_errors 1
#php_value mbstring.internal_encoding UTF-8
</IfModule>
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
#RewriteCond %{REQUEST_URI} ^(.*)\index\.(?:html||php)$
#RewriteRule .* %1 [R=301,L]
RewriteCond %{REQUEST_URI} ^(.*)\.html$
RewriteRule .* %1/ [R=301,L]
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,QSA,L]
RewriteCond %{HTTP_HOST} ^www\.domain\.ru$ [NC]
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
Redirect 301 /shop/ https://domain.ru/catalog/
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>
<IfModule mod_dir.c>
DirectoryIndex index.php index.html
</IfModule>
<ifModule mod_expires.c>
#включение заголовка Expires, указывающего время устаревания файла
ExpiresActive On
ExpiresDefault "access plus 3600 seconds"
# по умолчанию время устаревания составляет час, но для некоторых типов файлов мы его переопределим
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 604800 seconds"
ExpiresByType image/svg+xml "access plus 2592000 seconds"
ExpiresByType application/x-font-ttf "access plus 2592000 seconds"
ExpiresByType application/x-font-truetype "access plus 2592000 seconds"
ExpiresByType application/x-font-opentype "access plus 2592000 seconds"
ExpiresByType application/font-woff "access plus 2592000 seconds"
ExpiresByType application/font-woff2 "access plus 2592000 seconds"
ExpiresByType application/vnd.ms-fontobject "access plus 2592000 seconds"
ExpiresByType application/font-sfnt "access plus 2592000 seconds"
ExpiresByType application/javascript "access plus 604800 seconds"
ExpiresByType application/x-javascript "access plus 604800 seconds"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
<ifModule mod_headers.c>
# Самая главная часть: выдача заголовка, разрешающего кеш определенных типов файлов
<filesMatch "\.(ico|jpe?g|png|gif|swf|svg|webp|ttf|otf|woff|woff2|eot|sfnt)$">
Header set Cache-Control "max-age=25920000"
</filesMatch>
<filesMatch "\.(css)$">
Header set Cache-Control "max-age=25920000"
</filesMatch>
<filesMatch "\.(js)$">
Header set Cache-Control "max-age=25920000"
</filesMatch>
</ifModule>
Наиболее частые ошибки
Расскажем, на какие моменты нужно обратить особое внимание при настройке 301 редиректа — нюансы следующие:
- Формирование цепочки редиректов.
Последовательное перенаправление поискового робота по адресам. Страница с кодом ответа 301 перенаправляет на аналогичную страницу.
- Редирект на битый url. Возникает при допущении опечатки во вводе URL-адреса, используемого для переадресации целевой страницы.
- Постоянное использование временной переадресации. Грубой ошибкой является использование кода 302 для при переезде на другое доменное имя и установке https протокола. Применять 302 редирект следует только в тех случаях, если планируете не удалять страницу, а вернуть ее для получения трафика позднее.
- 301 редирект вместо указания канонической страницы. Если возникают дубли страниц пагинации или отдельной мобильной версии относительно страниц десктопной — используйте.
Как проверить корректность 301 редиректа?
Для массовой проверки используйте сервисы комплексного SEO-аудита NetPeak Spider или Screaming Frog SEO Spider.
Проанализировать коды ответов сервера всех URL-адресов вы можете в графе “Status Code”.
Чтобы проверить вручную, рекомендуем портал https://www.bertal.ru/
Введите адрес страницы в поле “URL” и сможете отследить какие ответы отдает сервер при обращении к ней.
Итог
Корректная настройка параметров 301-редиректа на сайте является важным элементом технической оптимизации ресурса и продвижения сайта в поисковых системах. С его помощью вы сможете исключить из структуры сайта дубли, перевести сайт на новый домен, перенаправить трафик с ненужных разделов.
Совершайте манипуляции с файлом .htaccess внимательно, во избежание появления ошибок в целостности ресурса и логичности структуры.