301 редирект – грамотная переадресация htaccess и php header

301 редирект

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

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

Лично я очень тесно познакомился с 301 редиректом когда работал над разработкой крупного туристического портала, на сайте насчитывалось около 30000 страниц, естественно сохранить адреса всех страниц было бы в принципе не возможно, однако после долгого сотрудничества с сео специалистом который продвигал данный сайт были выделены основные url которые нужно было сохранить причем без редиректа и список адресов, который нужно было редиректить на новые, а их оказалось не мало (порядка 1500).

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

Так как 301 редирект достаточно полезен, да и часто используется каждая поисковая система, на своем сайте в разделе помощи описывает как им лучше воспользоваться. Лично я считаю что триста первый редирект наилучшее решение для сохранения позиций в поисковых системах и самое главное сохранение трафика пришедшим по старым ссылкам. Ответ сервера с кодом 301 интерпретируется поисковой говорит о том что документ перенесен и на старый адрес уже не вернется («moved permanently»).

.htaccess редиректы

Для создания подобных редиректов на хостинге должна быть возможность использования файла .htaccess и mod_rewrite как правило это есть на всех хостингах, даже на бесплатных.

Пример простого редиректа

Redirect 301 / http://www.newdomen.com/new.html

где:
Redirect 301 — это инструкция, говорящая что страница перемещена
/ — означает, что все с верхнего уровня сайта, включая все подкаталоги, будет переадресовано

http://www.newdomen.com/new.html — новая страница или сайт.

Для того что б переадресовать одну страницу, сохранив PR старой страницы, стоит использовать следующий код:

Redirect 301 /old/old.htm http://www.newdomen.com/new.htm

где:
/old/old.htm — путь и имя старой страницы

Аналогичный синтаксис для переадресации сайта:

RedirectPermanent / http://www.you.com/

Пример переадресации каталога:

RedirectPermanent /old-directory http://www.domain.com/new-directory/

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

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

Теперь рассмотрим более сложные примеры редиректа, но в тоже время более гибкие, для этого будем использовать mod_rewrite:

Чаще всего встает задача склеить домен с www и без него:

Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^domen\.com [NC] RewriteRule ^(.*)$ http://www.domen.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]

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

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

Если нужно заменить все .htm файлы на .html файлы то на помощь придет вот такой код:

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

PHP редирект


Очень важно что до вызова header, ничего не должно выводиться (например, echo или print), в противном случае на экран будет выведена ошибка.

А вот и более полный вариант php редиректа с сохранением передаваемой страницы и параметров вызова:

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

301 редирект, позволяет сохранить посетителей (трафик) и по возможности передать PR как домена так и страниц, однако не стоит забывать что процесс склейки страниц и передачи PR занимает длительное время.

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