301 Permanent Redirect

24.11.2010

301 Permanent Redirect используется в нескольких случаях: при смене домена, при переносе страницы сайта, для склейки имени сайта с www и без него. Это важно для передачи Page Rank (PR) и сохранения поискового трафика.

301 редирект это наилучший метод сохранения ваших позиций в поисковых системах, когда вы переносите страницу или сайт. Код "301" интерпретируется как постоянное перемещение ("moved permanently").

  • Простой редирект (в файле .htaccess или httpd.conf для Apache):

    Redirect 301 / http://www.you.com/new.htm
    где:

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

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

    Redirect 301 /old/old.htm http://www.you.com/new.htm
    где:
    /old/old.htm - путь и имя старой страницы

    Аналогичный синтаксис для переадресации сайта:
    RedirectPermanent / http://www.you.com/

    Пример переадресации каталога:
    RedirectPermanent /old-directory http://www.domain.com/new-directory/

    Например, зашедших в test переадресуем на www.test.com, остальных на enter.test.com (порядок следования записей важен):

    Redirect permanent /test http://www.test.com/
    Redirect permanent / http://enter.test.com/

    Примечание: для моих целей (изменение домена) хватило первого варианта простого 301 редиректа.

  • Использование mod_rewrite (прописывается в файле .htaccess):

    Ставшая классической задача слияния имена сайта с www и без него, решается так:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^yoursite\.com
    RewriteRule ^(.*)$ http://www.yoursite.com/$1 [R=permanent,L] .

    или альтернативный синтаксис:

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

    Обозначение [R=301,L] означает: перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).

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

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

    Например, если необходимо чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в .htaccess:

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

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

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

  • Редирект на 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 редиректа с сохранением передаваемой страницы и параметров вызова:

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

Последнее в нашем блоге