Как настроить 301 редирект в htaccess и в скриптах - более 18 примеров использования - 2.2 out of 5 based on 5 votes

301 редирект (Permament Redirect) или 301 ошибка возвращается при обращении пользователя или поискового робота по определенному URL и  указывает на то, что сайт или страница, к которому обращался пользователь, был перенесен на новый адрес и больше не располагается по данному адресу. При этом, поисковой бот или пользователь будут перенаправлены на новый URL-адрес.

Как настроить 301 редирект в htaccess и в скриптах - более 18 примеров использования

В случае настройки 301 редиректа старый и новый адрес склеиваются между собой, такие показатели как ТИЦ и PageRank, страницы и сайта, а также ссылочный вес будут переданы новому URL.

В каких случаях может пригодится 301 редирект (PermamentRedirect)

Можно перечислить огромное множество ситуаций, когда веб-мастеру пригодится использовать перенаправление 301. Среди наиболее распространенных случаев можно выделить следующие:

1. При переносе сайта на другую CMS;

2. При смене доменного имени сайта, при помощи 301 редиректа можно сохранить все имеющиеся показатели старого домена и перенести их на новый. При этом как поисковые системы так и пользователи будут автоматически перенаправляться к новому домену.

3. Если склеиваются домены без www с www. При этом также все показатели этих этих копий сайтов будут совмещаться.

4. В случае переноса страницы внутри сайта на новый URL

В Яндекс и Google редирект 301, как правило, передает:

  • Ссылочный вес
  • ТИЦ сайта и PR страниц

Однако есть вещи, которые редиректом не передаются на новый URL-адрес, к ним относятся:

  • Санкции, которые были наложены на домен сайта
  • Возраст(если был изменен домен). Тем не менее, если редирект был настроен в пределах одного доменного имени, с одной страницы на другую, то данный показатель передается.

Когда редирект будет установлен, пользователи будут перенаправляться со старого URL-адреса на новый. При последующем посещении об этом узнают поисковые роботы. Они получают сигнал, в котором указывается новый адрес страницы, теперь является основным. На него «перетекают» все основные показатели.

Темы касающиеся редиректа, являются очень актуальными и часто подымаются на тематических форумах иногда там создаются целые разделы, посвященные им.

Далее мы рассмотрим как настроить 301 редирект и приведем ряд готовых, рабочих решений, которые могут пригодится в том или ином случае.

Настройка 301 редиректа в файле .htaccess при помощи директив

Возможность настройки 301 перенаправления именно через файл htaccess будет зависеть от того какой веб сервер используется на вашем виртуальном хостинге или виртуальном сервере. В большинстве случаев это веб сервер Apache и вот именно он и позволяет производить настройку редиректа через htaccess.

Единственным условием является наличие включенных модулей mod_alias и/или mod_rewrite в файле php.ini. Они включены на большинстве хостингов поэтому можете смело приступать к настройкам.

Файл .htaccess находится в корневой папке вашего сайта. На сегодняшний день он имеется практически у всех современных CMS. Если в вашем случае его нет, то просто создайте текстовый документ и измените его расширение и название на .htaccess (точка впереди обязательна). После этого вы можете прописывать в него приведенные ниже примеры для создания того или иного редиректа. Подробнее о .htaccess читайте в материале - "Файл htaccess - настройка и примеры использования".

301 редирект через .htaccess

При использовании, примеров кода "vash-sait.ru" замените на доменное имя вашего сайта.

Редирект при помощи mod_rewrite и директивы RewriteRule

Чтобы использовать директиву RewriteRule на хостинге должен быть подключен модуль mod_rewrite и включена опция FollowSymLinks включена, а в файле httpd.conf. Многие не подозревают, но с данным модулем приходится сталкиваться чаще, чем можно себе представить, например при использовании ЧПУ ссылок в CMS Joomla или WordPress. 

Для настройки перенаправлений в файле htaccess, вам могут пригодится следующие операторы регулярных выражений:

  • . — любой символ
  • $ — ограничение справа
  • ^ — ограничение слева
  • — 0 и более символов
  • + — 1 и более символов
  • [] — диапазон значений
  • \ — экранирование
  • () — переменная

1. Перенаправление домена с www на без-www

Очень часто 301 редирект используется, для склеивания адресов сайта с www и без них. Раньше поисковые системы воспринимали это как совершенно разные сайты, сейчас они научились определять зеркала сайта, но лучше указать им на правильное зеркало, чтобы не было путаницы ни у вас ни у них.

Несмотря на то, что www все еще встречается в адресах некоторых сайтов, если веб-ресурс создается с самого начала, то лучше не использовать www в адресе сайта и произвести соответствующее перенаправление.

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

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

Но мне нравится другой, более понятный синтаксис:

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

2. Редирект домена без www на домен с www.

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

Или, по типу первого, альтернативный вариант 

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

3. Перенаправление страницы с ЧПУ  URL -ом на другую страницу с ЧПУ URL -ом

Сегодня многие CMS позволяют использовать ЧПУ ссылки и часто в виду определенных обстоятельств приходится менять один адрес страницы на другой. Ниже приведен вариант редиректа страницы http://vash-sait.ru/optimizatsiya-stranitsy.html на страницу http://vash-sait.ru/seo-optimizatsiya-stranitsy.html.

RewriteEngine On
RewriteRule ^(.*)optimizatsiya-stranitsy.html$ http://vash-sait.ru/seo-optimizatsiya-stranitsy.html [R=301,L]

4. Перенаправление старого домена на новый. 

В некоторых случаях требуется сменить один домен сайта на другой. В таком случае нужно установить 301 перенаправление со старого домена на новый. Прописать представленный ниже код нужно в файле .htaccess старого сайта.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.staryy-sait\.ru$ [NC]
RewriteRule ^(.*)$ http://novyy-sait.ru/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^staryy-sait\.ru$ [NC]
RewriteRule ^(.*)$ http://novyy-sait.ru/$1 [L,R=301]

В приведенном примере старый домен с www и без www будет перенаправлен на новый домен без  www. 

5. Редирект домена алиаса на основной домен 

Иногда для сайта используется не один, а несколько доменов т. е. используются так называемые алиасы или синонимы домена. Для этого домены могут регистрироваться в нескольких зонах vash-sait.ru, vash-sait.com и прилинковываться к одной директории сайта на хостинге. В этом случае будут 2 или более точных копии сайта с одним и тем же фалом .htaccess.

И так как это очень плохо с позиции SEO оптимизации, то необходимо выбрать какой то основной домен и сделать на его редирект. Например если основной домен vash-sait.ru, то сделать, на него редирект с vash-sait.com и www.vash-sait.com можно следующим образом:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^vash-sait.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www.vash-sait.com$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://vash-sait.ru/$1 [R=301,L]

6. Редирект страниц с расширением .htm на страницы с раcширением .html

В некоторых случаях это может служить предотвращением появления в индексе дублей страниц с расширением .htm.

RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.htm$ $1.html [R=301,L]

7. Редирект страницы vash-sait.ru/index.php на vash-sait.ru

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

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://vash-sait.ru/ [R=301,L]

Если нужно склеить дубли вида  vash-sait.ru/home.html на vash-sait.ru 

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /home\.html\ HTTP/
RewriteRule ^home\.html$ http://vash-sait.ru/ [R=301,L]

8. Редирект URL -ла с параметром на любую другую страницу сайта.

Если URL -лы страниц вашего сайта содержат параметры, то при необходимости можно произвести редирект страницы с определенным параметром на любую другую страницу. Например страницы  http://vash-sait.ru/index.php?section=1  на с страницу http://vash-sait.ru/index.php?section=2 Параметр в URL идет, как правило, после "?" в данном случае это section=1, сам код будет таким:

RewriteEngine On
RewriteCond %{QUERY_STRING} section=1
RewriteRule ^index.php http://vash-sait.ru/index.php?section=2 [R=301,L]

Кроме этого URL с параметром можно перенаправить на главную страницу сайта следующим образом: 

RewriteEngine On
RewriteCond %{QUERY_STRING} section=1
RewriteRule ^index.php http://vash-sait.ru/? [R=301,L]

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

Директива Redirect осуществляет простой редирект посетителя и поискового робота на новый URL.

Синтаксис данной директивы следующий: Redirect [status] URL-path URL.

Условные обозначения:

  • URL – новый адрес веб-документа или страницы
  • URL-path – старый адрес запрашиваемого документа
  • Status – код возврата, однако является необязательным полем и может отсутствовать. Допустимыми значениями являются: 301 – постоянный перенос, 302 – временный перенос, 410 или gone – удален, 303 или seeother – смотрите другой.

Прописывается директива все в том же файле .htaccess.

1. Редирект с одной страницы на другую

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

Redirect 301 /category/staraya-stranitsa.html http://vash-sait.ru/category/novaya-stranitsa.html

2. Редирект старого домена на новый

Для этого в файле .htaccess старого домена пропишите следующее:

Redirect 301 / http://vash-sait.ru

3. Переадресация каталога 

Redirect 301 /category http://vash-sait.ru/novaya-category/

Redirect permanent - это деректива оворящая, что страница перемещена.

Синтаксис:

Redirect permanent URL-path URL

URL-path: локальная часть URL документа с которого должен быть произведен редирект.

URL: URL куда должен быть выполнен редирект.

Записывается все по аналогии с директивой Redirect, но код возврата указывать уже не нужно. Для редиректа одной страницы на другую записывается так:

Redirect permanent /staraya-stranitsa.html http://vash-sait.ru/novaya-stranitsa.html

301 редирект через скрипт путем передачи заголовков

Вся работа 301 перенаправления через скрипты PHP, ASP, JavaScript заключается в передаче клиенту, т. е. браузеру или поисковому роботу определенных заголовков:

HTTP/1.1 301 Moved Permanently
Location: http://vash-sait.ru/category/novaya-stranitsa.html

Приведем примеры редиректа для разных скриптов 

1.  301 редирект на PHP.

Этот код лучше всего помещать в самое начало скрипта PHP файла. Вместо http://vash-sait.ru/novaya-stranitsa.html нужно указать адрес страницы куда должен быть перенаправлен пользователь или поисковый бот.

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://vash-sait.ru/novaya-stranitsa.html");
exit();
?>

2. Редирект на ASP 

<%@ Language=VBScript %>
<% 
Response.Status=“301 Moved Permanently”
Response.AddHeader “Location”, “http://vash-sait.ru/novaya-stranitsa.html”
response.end
%>

3. Редирект ASP.NET 

<script runat=“server”>
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = “301 Moved Permanently”;
Response.AddHeader(“Location”,“http://vash-sait.ru/novaya-stranitsa.html”);
}
</script>

4. Для Ruby on Rails 

def old_action
headers[“Status”] = “301 Moved Permanently”
redirect_to “http://vash-sait.ru/novaya-stranitsa.html”
end

5. Для JSP (Java) 

<%
response.setStatus(301);
response.setHeader( “Location”, “http://vash-sait.ru/novaya-stranitsa.html” );
response.setHeader( “Connection”, “close” );
%>

6. Для CGI PERL 

$q = new CGI;
print $q->redirect(“http://vash-sait.ru/novaya-stranitsa.html”);

7. ColdFusion редирект

<.cfheader statuscode=“301” statustext=“Moved permanently”>
<.cfheader name=“Location” value=“http://vash-sait.ru/novaya-stranitsa.html”>

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

1. Использовать описанные выше методы можно лишь в том случае, если ресурс расположен на Linux-сервере и использует Apache. При этом обязательно должны быть подключены модули mod_rewrite и mod_alias.

2. Вместо файла .htaccess есть еще один способ настройки 301 перенаправления - внесение изменений в файл hpptd.conf, это немного более эффективно так как использование файла .htaccess создает небольшую дополнительную нагрузку на сервер.

3. Если работа редиректа некорректна, необходимо убедиться, что в других файлах нигде не прописан другой редирект, так как их конфликт может стать причиной большого числа непредвиденных проблем.

4. Прежде чем настроить 301 -й редирект рекомендуется ознакомиться с официальной документацией, в которой прописаны синтаксис и основные правила. Но при желании, можно поэкспериментировать, перебрать несколько возможных вариантов и как говорится "методом тыка" добиться нужного результата.

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


Обсуждение материала

Войдите или зарегистрируйтесь,
чтобы добавить вопросы, идеи или ошибки, по данному материалу!

1 1 1 1 1 1 1 1 1 1 Рейтинг 2.30 (5 Голосов)