SEO → 301 редирект

HTTP/1.1 301 Moved Permanently — ответ сервера, обозначающий что адрес страницы был изменен навсегда (permanently). 301 редирект применяется в случае:

  • сменился адрес сайта;
  • когда страница (группа страниц, раздел) сайта сменила свой адрес (URL);
  • когда необходимо «склеить» копии сайтов/страниц (зеркала);

Применяя 301 редирект мы обычно преследуем за цель:

  • при переходе по старому адресу, попадать на новый;
  • избавиться от дублирования страниц (в том числе со слешем вконце);
  • склеить http://www.site.com и http://site.com (и httpS://sites.com);
  • склеить http://IP-адрес или служебный домен http://site.hosting.com;

Не следует применять 301 редирект в случае:

  • для кратковременных переадресаций (используйте 302 Moverd Temporarily);
  • если с доменом случился бан или фильтр, 301 редирект перенесет проблемы со старого на новый. И в итоге ничего не изменится;
  • множественных редиректов (не в один шаг, а в два и более);
  • стремитесь минимизировать количество редиректов внутри сайта;

При смене адреса сайта очень важно чтобы при обращении к старому адресу пользователь попадал на ту же самую страницу (а не на главную), но на новом домене. Если есть сайты «сателиты» (копии сайта в другой зоне и т.п.) — очень важно чтобы присходил 301 редирект на основной сайт. Ни в коем случае нельзя допустить, чтобы по всем адресам была доступна копия одного и того же сайта.

Загляните также в инструменты вебмастера Яндекс или Google: Индексирование сайта -> Исключенные страницы, Конфигурация -> Парметры URL.

Примеры 301 редиракта через .htaccess:

Редирект для домена с www.site.com на site.com.

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

Простой редирект страницы на новый адрес, самый простой случай.

Redirect 301 /about.php http://site.com/about2.php

Пример 301 редиректа, при смене адреса страницы (убираем из пути «blog/«).

RewriteRule ^blog/category/(.*)$ category/$1 [R=301,L]
RewriteRule ^blog/post/(.*)$ post/$1 [R=301,L]

Убираем GET-параметры при редиректе: /view_post?id=85 —> /post/85.

RewriteCond %{QUERY_STRING} ^id=(.*)
RewriteRule ^view_post\.php$ /post/%1? [L,R=301]

Убираем http://site.com/category/index.php в адресе страницы.

RewriteRule ^(.*)index\.php$ $1 [R=301,L]

Избавляемся от параметров или меток в адресе.

Пример 1. Обрезка лишних параметров http://site.com/page.php&param=*.

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

Пример 2. Обрезка http://site.com?utm_source=*.

RewriteCond %{QUERY_STRING} ^utm_source= [NC]
RewriteRule (.*) $1? [R=301,L]

Пример 3. Избавление от языка ?lang=ru.

RewriteCond %{QUERY_STRING} ^lang=ru$
RewriteRule ^(.*)\.php\?(.*)$ $1\.php [R=301,NC,L]

И в завершение, синтаксис 301 редиректа на php (на случай если возникнут трудности с .htaccess):

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://site.com");
die("Просходит переадресация...");

Не забудьте добавить в начало файла .htaccess строки:

RewriteEngine On
RewriteBase /

Которые включают правила переадресации и определяют полный путь от корня сайта.