Что такое 301 редирект, как его настроить и когда нужно применять

23.01.2019

Что такое 3xx редирект

Редирект — это способ перенаправить пользователя и поискового робота (Яндекс, Google и др.) с одной страницы на другую.

Пример: допустим, у вас есть интернет магазин, и на нем была популярная категория «Красные Юбки» доступная по адресу https://ВашСайт.ру/krasnie-ubki/. Данную категорию Вы продвигали, размещали на нее ссылки и всячески рекламировали. Но так вышло, что Вы сменили движок сайта, или поменяли домен, или изменили сами URL. Вследствие чего, кардинально поменялась структура сайта и Ваши URL. Теперь по старому адресу категория стала недоступна. Как быть?

Вот здесь на помощь идет 301-й редирект. Он позволяет в специальном файле .htaccess настроить переадресацию со старого URL https://ВашСайт.ру/krasnie-ubki/ на новый https://ВашСайт.ру/krasnie-ubki-new/. И теперь пользователи, поисковые роботы, и даже размещенные ссылки будут автоматически вести на правильный, доступный URL.

Самое главное для SEO это то, что помимо простой переадресации для пользователей и роботов, через 301-й редирект переносится и «Вес» прошлой страницы на новую страницу. Проще говоря, значимость внешних и внутренних (перелинковка) ссылок, также будет в полном объеме передаваться на новый URL, и продвигать страницу заново Вам не придется.

Какие бывают типы 3xx редиректов

301 Moved Permanently

301 редирект – это постоянная переадресация, которая передает ~90-99% веса ссылки. Такое перенаправление говорит, что страница была перенесена на новый адрес, а предыдущий URL-адрес должен считаться недействительным (устаревшим). Чаще всего используется для проставления редиректа с одной страницы на другую без потери веса ссылки.

302 Found (HTTP 1.1) / Moved Temporarily (HTTP 1.0)

302 редирект — это временное перенаправление. Во время этой переадресации вес практически не передается и для SEO данный метод практически не используется.

Когда нужно применять редирект

  1. Когда нужно сделать переадресацию со старой (удаленной, исчезнувшей) страницы на новую, с сохранением веса.
  2. Когда Вы переехали на новый домен или CMS. Например, был сайт.ру, купили новый домен и хотите перенести сайт на сайт-2.ру с сохранением всех весов страниц.
  3. При склеивании зеркал вида www.сайт.ру и сайт.ру.
  4. Когда установили SSL сертификат (протокол HTTPS), также обязательно нужно настроить редирект со всех страниц вида http://сайт.ру на https://сайт.ру.
  5. Когда появились 404-е ошибки. Например, из интернет-магазина удалили каталог непопулярной продукции. Через 301-й редирект можете сделать переадресацию пользователей и роботов на главную страницу или в другой каталог.

Кто должен уметь делать 301-й ридерект

В идеале, такую задачу можно поставить веб-программисту или толковому вебмастеру, предварительно написав грамотное ТЗ.

Имейте ввиду, что при неправильной настройке редиректов, возможно нарушить индексацию сайта и потерять позиции. Несколько раз подумайте и перепроверьте свою работу.

Но если в команде таких людей нет, SEO-специалист средней руки обязан уметь делать такие редиректы.

Как сделать редирект

При использовании апача (apache) на сервере, переадресацию можно просто выполнить с помощью файла .htaccess, однако, при этом, не забыть включить модули mod_alias (для поддержки директив Redirect, RedirectPermanent и RedirectMatch) и/или mod_rewrite (для использования реврайта) в php.ini.

Редирект с помощью директивы Redirect или RedirectPermanent модуля mod_alias

Redirect 301 /old-page.html http://new-domain.ru/new-page.html
или
Redirect permanent /old-page.html http://new-domain.ru/new-page.html

Недостатком данного способа является то, что все адреса, которые необходимо перенаправить, нужно перечислять один за одним, каждый отдельно. Также можно использовать RedirectPermanent для аналогичных целей.

RedirectPermanent /old-url.html http://new-site.ru/new-url.html

Редирект с помощью директивы RedirectMatch

Этот редирект подобен предыдущему, за исключением того, что можно задавать регулярное выражение для старых URL адресов. Допустим, при смене движка с PHP на ASP, можно старые адреса перенаправить следующим образом:

RedirectMatch /(.*).php$ /$1.aspx

Редирект с помощью директивы RewriteRule модуля mod_rewrite

Для использования директивы RewriteRule необходимо удостовериться, что в httpd.conf подключен модуль mod_rewrite, а также влючена опция FollowSymLinks. Использование реврайт модуля дает много возможностей для перенаправления страниц на новые адреса.

Перенаправление домена с www на не-www

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

или альтернативный, более понятный синтаксис

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

Редирект запросов с не-www на домен с www префиксом

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

или же альтернативный вариант

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.(.*) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

301 редирект со страниц со слешем на без слеша (весь сайт)

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]

301 редирект со страниц без слеша на слеш (часто в CMS системах устанавливается автоматически)

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]

Один (а не два последовательных!) 301 редирект на без www и с слешем на конце адреса страницы

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$

Один (а не два последовательных!) 301 редирект на c www и со слешем на конце адреса страницы

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

Один (а не два последовательных!) 301 редирект на c www и без слеша на конце адреса страницы

RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^([^www].*)$

Один (а не два последовательных!) 301 редирект на без www и без слеша на конце адреса страницы

RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]

301 редирект для index.php, index.html или index.htm (например в Joomla), массовая склейка

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ http://site.ru/$1 [R=301,L]

Редирект с протокола http на https

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Если возникает циклический редирект, то воспользуйтесь этим вариантом:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Редирект с протокола https на http

Обратный редирект, если перестали использовать SSL сертификат.

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Редирект с помощью скрипта (отправки заголовков)

Редирект запросов можно осуществлять также с помощью скриптов, отправляя клиенту необходимые заголовки.

HTTP/1.1 301 Moved Permanently
Location: http://www.newdomain.ru/newdir/newpage.htm

PHP редирект

<?php
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: http://www.newdomain.ru/newdir/newpage.htm”);
exit();
?>

ASP редирект

<%@ Language=VBScript %>
<%
Response.Status=“301 Moved Permanently”
Response.AddHeader “Location”, “http://www.new-url.com”
response.end
%>

ASP.NET редирект

<script runat=“server”>
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = “301 Moved Permanently”;
Response.AddHeader(“Location”,“http://www.new-url.com”);
}
</script>

ColdFusion редирект

<.cfheader statuscode=“301” statustext=“Moved permanently”>
<.cfheader name=“Location” value=“http://www.new-url.com”>

JSP (Java) редирект

<%
response.setStatus(301);
response.setHeader( “Location”, “http://www.new-url.com/” );
response.setHeader( “Connection”, “close” );
%>

CGI PERL

$q = new CGI;
print $q->redirect(“http://www.new-url.com/”);

Ruby on Rails

def old_action
headers[“Status”] = “301 Moved Permanently”
redirect_to “http://www.new-url.com/”
end

Осуществление редиректа в nginx

if ($host = ‘www.domain.com’ ) {
rewrite ^(.*)$ http://domain.com$1 permanent;
}

Как сделать редирект через плагины

Пример редактирования файла .htaccess через плагин Yoast SEO на WordPress

Что такое 301 редирект, как его настроить и когда нужно применять

Как открыть файл .htaccess через yoast seo

Пример 301-го редиректа страниц

Что такое 301 редирект, как его настроить и когда нужно применять

Пример 301-го редиректа для перенаправления со одной страницы на другую

Пример редиректа между доменами (раньше мой блог был размещен на домене blog.whitelab.pro, потом я переехал на собственный домен yaroshok.ru).

Что такое 301 редирект, как его настроить и когда нужно применять

Пример редиректа между доменов blog.whitelab.pro на http://yaroshok.ru

Курс

Курс по продвижению сайтов

Курс

Курс по заработку на своем сайте

Комментарии (2)
  1. Здравствуйте, Дмитрий. Подскажите, пожалуйста, какой вариант редиректа нужно использовать для того, чтобы страницы с слешем на конце редиректили на страницы без слеша на конце? Заранее спасибо

    • Добавил эти варианты в статью, посмотрите.
      Пробуйте разные варианты, только не забудьте сделать бекап работающего файла .htaccess перед экспериментами.

Оставьте свой комментарий

Мои обучающие видео

На моем Youtube-канале я расказываю о тонкостях продвижения сайтов, делясь своим опытом

MaskVideoSmall

Кейс #2 - продолжение. Вывод запросов в ТОП-1 по России

MaskVideoSmall

Кейс #4 - Небольшой сайт по всей России с 0 до 250 чел/сут.

MaskVideoSmall

Как составлять мета-теги Title, Description, H1

MaskVideoSmall

Когда начинает идти трафик на сайт и можно начать зарабатывать?

    Задайте свой вопрос


      Записаться на курс


      Выбранный тариф: Все включено

        Записаться на курс


        Выбранный тариф: Все включено

          Отправить видео-отзыв