среда, 4 июля 2007 г.

Редиректы. Cлияние/сложение PR/тИЦ при перемещении страниц.

В этом посте я расскажу как правильно ставить редиректы, чтобы при этом не "утекал" вес PR и тИЦ (вИЦ).
Надеюсь хоть что-то Вы для себя почерпнёте!

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

В каких случаях Вам могут быть полезны переадресации, о которых пойдёт речь в данной статье?
1. Слияние весов нескольких доменов в один;
2. Перенос сайта на новый домен (перенос веса с одного домена на другой);
3. "Суммирование" ссылок для сайта с "www." префиксом и без него*;
4. Изменение внутренней ссылочной структуры сайта;
* "Суммирование" здесь понятие относительное, не прямое. Т.е. если Вы пытаетесь суммировать 2 сайта с ПР2 и ПР3, то ПР5 Вы не получите, потому как PageRank шкала не линейная. Вы станете лишь чуть ближе к заведомой цели. Чудеса математики!

Что такое редирект 301 (permanent redirect)?
Данная переадресация означает, что страница была перемещена навсегда. Всё это подробным образом описано в технической спецификации протокола HTTP (пункт 10.3.2). Мы на этом останавливаться отдельно не будем, т.к. разбор технических возможностей протокола HTTP не входит в тему данной статьи.

Варианты редиректов:
1. Редирект с использованием модуля Апача Mod_Rewrite;
2. Редирект с помощью Апача;

Переадресации с помощью языков программирования:
3. PHP;
4. Perl;
5. ASP;

В качестве примеров запросы мы будем переводить на сайт http://www.site.ru/. (не знаю даже существует ли такой). При использовании Вы должны сменить этот урл на любой другой. Не обязательно это должен быть корень сайта. Это может быть страница, скрипт и т.д. и т.п.
Например:
http://www.site.ru/ - переадресация в корень какого-либо сайта
http://www.site.ru/folder/folder/ - переадресация в папку
http://www.site.ru/myscript.php - переадресация на РНР скрипт
http://www.site.ru/cgi-bin/myscript.pl - переадресация на Рerl скрипт

Теперь рассмотрим подробнее вышеобозначенные технологии переадресации.

Mod_Rewrite


Mod_Rewrite штука сама по себе очень интересная и не менее полезная. Она позволяет быстро и качественно изменить ссылочную структуру сайта от таких адресов:
http://site.ru/script.php?id=4&cat_id=30
на примерно такие:
http://site.ru/script_4_30.html
Которые выглядят гораздо красивее и читабельнее. К тому же они ещё и лучше индексируются поисковиками.

Для осуществления данного варианта переадресации прописываем/дописываем в .htaccess следующие команды:
Options +FollowSymLinks
RewriteEngine on
RewriteCond {HTTP_HOST} ^site.ru
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=permanent,L]

В данном примере мы "сращиваем" ссылки доменов www.site.ru и site.ru.

Apache


Дописываем в .htaccess команду для переадресации на сайт "http://www.site.ru":
Redirect 301 / http://www.site.ru/

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

PHP


В РНР файл вставляем (либо адаптируем к коду) команды:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.site.ru/");
?>


Либо одной строчкой:

<?php
header("HTTP/1.1 301 Moved Permanently\nLocation: http://www.site.ru/");
?>


После этих строк неплохо было бы поставить выход из скрипта командой exit() для того, чтобы в случае чего не продолжилось выполнение данного скрипта. Делается это по аналогии с прошлым вариантом:

<?php
header("HTTP/1.1 301 Moved Permanently\nLocation: http://www.site.ru/");
exit();
?>


Perl / CGI


Прямо в самом начале скрипта, либо перед выводом заголовка пишем:
print "HTTP/1.1 301 Moved Permanently\nLocation: http://www.site.ru/\n\n";
Обратите внимание на то, что в конце должны стоять два символа перевода "каретки" строки: "\n\n". Это необходимо для корректного закрытия заголовка документа.
Во время этой команды заголовок должен находиться "открытым". Если он будет закрыт, то эти две команды HTTP протокола попадут не в заголовок, а в тело самого документа и естественно не сработают.

В конечном итоге Ваш скрипт может выглядеть как-то так:
#!/usr/bin/perl
print "HTTP/1.1 301 Moved Permanently\nLocation: http://www.site.ru/\n\n";


* На всякий случай отмечу, что для выполнения Perl и CGI скриптов необходимо помимо поддержки таких скриптов хостингом ещё и установка прав выполнения.
Для установки прав в UNIX и UNIX-like системах (FreeBSD, Linux, ...) есть команда: chmod.
Приведу несколько примеров её использования.
Установка определённых прав доступа (включая право выполнения):
# chmod 755 script.pl
Добавление прав доступа не зависимо от того какие в данный момент права у файла:
# chmod +x script.pl

ASP


Сам я ASP (Active Server Pages) не часто использую веб-разработках. Но на всякий случай приведу пример работы редиректа и на этом языке:
<%
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://www.site.ru/"
Response.end
%>

Комментариев нет: