Наверх

301 редирект – корректная переадресация доменов и страниц различными способами

Редирект 301 (301 Permanent Redirect) используется в нескольких случаях: при смене домена, при переносе страницы сайта, для склейки имени сайта с www и без него. Это важно для передачи Page Rank (PR) и сохранения поискового трафика. 301 редирект это наилучший метод сохранения позиций в поисковых системах. Код "301" интерпретируется как постоянное перемещение ("moved permanently"), при этом получается склейка старого и нового адреса сайта. Параметры ТИЦ и ПР также будут переданы новому адресу URL.


301 редирект www на без-www

Применяется, когда нужно перенаправить с URL вида http://www.site.ru на http://site.ru. Необходимо вносить изменения в файл .htaccess в корневой директории сайта. Обозначение [R=301,L] означает: перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).

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

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

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]

Eсли необходимо чтобы вместо rewrite.htm загружался файл rewrite.html

RewriteEngine   on
RewriteBase     /
RewriteRule     ^rewrite\.htm$  rewrite.html [R=permanent]

Для замены всех .htm файлов .html файлами

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

Редирект всех файлов в папке на один файл

Если вам больше не нужен определенный раздел сайта (например new1) и нужно перенаправить все запросы к папке (/new1) на один файл-заглушку /new.php. Для этого в .htaccess добавляем следующий код:

RewriteRule ^new1(.*)$ /new.php [L,R=301]

В случае если требуется перенаправить все файлы кроме одного, например все файлы из папки /new1 должны редиректится на файл /new.php, кроме файла /new1/photos.html, который должен перенаправляться на /new_photos.html, пишем следующий код:

RewriteRule ^new1/photos.html /new_photos.html [L,R=301]
RewriteRule ^new1(.*)$ /new.php [L,R=301]

Редирект динамического URL на новый файл

Если есть необходимость сделать редирект динамического URL на новый статический файл

RewriteRule ^article.jsp?id=(.*)$ /news.htm [L,R=301]

То есть теперь, запрос к файлу вида http://www.site.ru/article.jsp?id=3232 и/или http://www.site.ru/article.jsp?id=8745 будет отправлен на файл http://www.site.ru/news.htm

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

Для использования необходимо включить модули mod_alias (для поддержки директив Redirect, RedirectPermanent и RedirectMatch) и/или mod_rewrite (для использования rewrite) в php.ini. Все адреса, которые необходимо перенаправить, нужно перечислять один за одним, каждый отдельно.

Простой редирект:

Redirect 301 / http://www.you.com/new.htm

Redirect 301 - это инструкция, говорящая что страница перемещена, / - означает, что все с верхнего уровня сайта, включая все подкаталоги, будет переадресовано, http://www.you.com/new.htm - новая страница или сайт (не забывайте поставить последний "/", если переадресация идет на сайт или каталог).

Чтобы переадресовать только страницу:

Redirect 301 /old-page.html http://site.ru/new-page.html

или

Redirect permanent /old-page.html http://site.ru/new-page.html

Для переадресации каталога:

Redirect permanent /old-directory http://www.newdomain.com/new-directory/

Редирект на PHP

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

Лучше указать HTTP/1.1, так как более старые не поддерживают виртуальный хостинг. Не забудьте, что до вызова header, ничего не должно выводиться (например, echo или print). Поэтому этот код лучше ставить в начало php-скрипта. Более полный вариант php редиректа с сохранением передаваемой страницы и параметров вызова:

<?
$ref=$_SERVER['QUERY_STRING'];
if ($ref!='') $ref='?'.$ref;
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://newdomain.com/'.$ref);
exit();
?>

Редирект на ASP

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

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

<script type="text/javascript">// <![CDATA[
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location","http://www.new-url.com");
}
// ]]></script>

Редирект с помощью meta refresh

Здесь 0 - задержка переадресации в секундах, newdomain.com -страница, куда переадресуем. Некоторые старые браузеры не поддерживают meta refresh со значением 0, для совместимости можно установить ненулевой значение, хотя, на мой взгляд это уже не актуально. Такой редирект не сможет склеить ваши сайты (с www и без) и передать PR, так как игнорируется поисковыми системами. Он возвращает код 200 OK, что соответствует обычной странице. Эта техника популярна у спамеров, поэтому ее стоит применять только для страниц, которые не будут индексироваться.

<meta http-equiv="refresh" content="0; url=http://newdomain.com" />

Редирект с помощью JavaScript

Варианты переадресации на JavaScript чаще реализуются с использованием функции setTimeout('функция', задержка). Например, автоматически сделать Click на кнопке "Submit" формы "searchform" через 0.1 сек после загрузки кода:

setTimeout('document.forms["searchform"].Submit.click()', 100);

На кнопку "Submit" можно повесить любое действие, например, открыть новый url в этом окне.

Чтобы просто переадресовать на другую страницу можно вставить после один из вариантов кода на JavaScript:

location="http://www.newdomain.com"; 
document.location.href="http://www.newdomain.com"; 
window.location.reload("http://www.newdomain.com"); 
document.location.replace("http://www.newdomain.com");

В последнем случае уже нельзя будет вернуться на страницу выполнившую переадресацию, так как ее адрес стирается из history, что нередко и нужною. Если нужна задержка по времени, можно оформить location="http://www.newdomain.com"; в виде функции и вставить ее в setTimeout('функция()', задержка_в_мсек); Редирект на JavaScrupt не является 301 редиректом и не передаст PR страницы, не сможет обеспечить ее склейку.

Источники:
http://sb-money.ru/
http://kuratov.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *