Иногда возникает необходимость сменить домен, на котором
располагается ваш сайт. Ну, например, вы нашли другой, как вам кажется,
более удачный домен. Или вы по глупости указали для старого домена
липовые данные, а регистратор потребовал их подтверждения, и вот теперь
вам грозит потеря старого домена.
Всякое в жизни бывает.
Завести два домена на один сайт – не проблема. Такую возможность
предоставляет практически любой провайдер. Проблема в другом, в том что
два домена, по которым открывается ваш сайт, будут неравноправны. Все
ссылки в интернете будут по-прежнему вести на старый домен, поисковые
машины будут показывать старый домен на лучших позициях по сравнению с
новым, да и «показатели качества» сайта, такие как ТИЦ и PR будут
принадлежать старому домену, а у нового они будут нулевыми.
И что делать? Можно ли сделать так, чтобы все эти преференции
«перетекли» со старого домена на новый? Чтобы именно новый домен
показывался в поисковиках на нужных позициях и получил накопленные
старым доменом ТИЦ и PR?
Да, конечно, и это не просто возможно, это возможно сделать несколькими способами.
Существуют соответствующие спецификации описывающие, как это сделать. Но проблема в том, что то, что «склейка»
(а именно так на сетевом жаргоне называется этот процесс) – это такое
дело, где теория во многом противоречит практике. И если тупо следовать
спецификациям, то можно не только не получить нужного результата, но и
даже понести ущерб.
А потому – ниже даны рекомендации, как правильно осуществить склейку доменов не в теории а на практике.
Способ 1-й. Использование кода ответа сервера 301
На сетевом жаргоне это звучит как «301-й редирект».
В чем суть этого способа.
Дело в том, что веб-сервер, где располагается ваш сайт, помимо
содержимого веб-страниц отсылает браузеру специальный цифровой код в
котором описывает состояние запрошенной страницы. Например код 200 означает «все нормально, страница найден». А код 404 означает наоборот «не могу найти никакой страницы по этому адресу».
Так вот на случай смены адреса страницы (в том числе и на случай смены домена) существует специальный код 301 «страница перемещена»,
который означает следующее (больше этой страницы тут нет, она
расположена такому-то по новому адресу). Получив код ответа 301 браузер
автоматически меняет в адресной строке старый адрес на новый и открывает
страницу по новому адресу.
Настроить ваш сервер, чтобы он отдавал по адресам старого сайта код
301 не просто, а очень просто. Наиболее универсальное решение – это
использование модуля mod-rewrite (для хостинга на windows-серверах этот
способ не работает, но таких серверов почти и не встречается в природе).
Вам нужно будет найти в корне вашего сайта файл .htaccess (если
такого файла нет, то создать его) и добавить туда следующие строки:
Options +FollowSymLinks # эту строчку нужно добавить только если она не встречалась ранее.
RewriteEngine on # эту строчку нужно добавить только если она не встречалась ранее.
RewriteCond %{HTTP_HOST} ^www\.старый-сайт\.ru$ [NC]
RewriteRule ^(.*)$ http://новый-сайт.ru/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^старый-сайт\.ru$ [NC]
RewriteRule ^(.*)$ http://новый-сайт.ru/$1 [L,R=301]
Если старый и новый домен располагаются в разных местах или заведены в
разные каталоги, то можно использовать и более простой код, расположив
его только на старом домене (при этом по старому адресу может вообще
ничего не располагаться, кроме упомянутого файла .htaccess):
Options +FollowSymLinks # эту строчку нужно добавить только если она не встречалась ранее.
RewriteEngine on # эту строчку нужно добавить только если она не встречалась ранее.
RewriteRule (.*) http://новый сайт.ru/$1 [R=301,L]
Теперь при запросе любого адреса по старому домену, будет происходить
переадресация на новый домен. При этом, поисковые машины, получив от
страницы код 301 передадут все накопленные показатели старого адреса на
новый.
Все прекрасно!
Но есть один подвох. А именно – временной разрыв между исключением
старого домена из индекса поисковой машины и добавлением в него нового.
По сути 301 редирект содержит для поисковой машины две команды:
Так вот, команда (а) осуществляется моментально, а для осуществления
команды (б) могут потребоваться (в зависимости от загрузки поискового
робота) дни, недели и даже месяцы. А это значит, что в течение какого-то
времени ваш сайт просто перестанет показываться в поисковых машинах. И
самое скверное, что как показывает практика, может так случится, что
поисковый робот отработает команду (а) для всех страница сайта, а
команду (б) не для всех и часть сайта вообще выпадет из индекса.
Различные поисковые машины отрабатывают 301 редирект с разной
скоростью. Лучше всего это делает Google, там разрыв между «выпадением» и
«восстановлением» сайта редко составляет больше нескольких дней.
А вот что касается Яндекса, то здесь «выпадение» может длиться и полгода.
Что же делать? Есть ли какой-нибудь способ передать все преференции
со старого сайта на новый, но так, чтобы не было такого разрыва в
индексировании
Да, конечно, есть!
Способ 2-й. Использование кода ответа сервера 302
«302-й редирект» полностью аналогичен 301 редиректу, но
отличается от 301 редиректа только одним обстоятельством, он говорит о
том, что страница перемещена на новый адрес не насовсем, а временно.
И соответственно он говорит о том, что:
-
а) страница теперь располагается по новому адресу;
-
б) но при этом старый адрес не надо удалять из индекса поисковой машины, так как страница может вернуться на него.
Для реализации 302 редиректа можно использовать все те же самые коды,
что описаны в предыдущей части, надо только заменить число 301 на 302. И
все будет работать точно так же, как и в предыдущем случае, и так же
при вызове старого домена будет идти переадресация на новый домен. При
этом старый домен из индекса поисковой машины выпадать не должен, и
соответственно никакого разрыва в видимости сайта в поисковиках быть не
должно.
Но это – в теории.
А на практике – все, увы, не так.
В реальности поисковые машины до сих пор не знают, как правильно
обрабатывать 302 редирект. Если следовать ему буквально и понимать, как
«временную» смену адреса, то тогда нет никакой необходимости что либо
менять (ведь страница вернется на старый адрес) и самое правильное 302
редирект вообще игнорировать. Но с другой стороны, не секрет, что
большинство пользователей сейчас использует 302 редирект именно для
того, чтобы сменить сайт. А значит было бы разумным обрабатывать его
именно так, как ожидают пользователи, переносить индексацию сайта на
новые адреса, но старые при этом из индекса не выбрасывать. Но при этом
держать в поисковой базе несколько одинаковых копий страниц по разным
адресам – неразумно и затратно, и если смотреть на дело с точки зрения
оптимизации, 302-й надо обрабатывать так же, как 301 редирект.
Именно поэтому поисковые машины как правило используют «динамические»
алгоритмы обработки 302 редиректа, меняя их в зависимости от текущей
ситуации. Например в первые дни появления кода 302 в ответах вашего
сервера, они могут игнорировать его, а если он просуществует достаточно
долгое время, начать обрабатывать его, как 301. Никаких четких правил
тут нет, вернее они меняются постоянно, и если с каким-то вашим сайтом
вам удалось использовать 302 редирект без потерь, то не факт, что со
следующим вам повезет так же.
Так что лично я предпочитаю 302 редирект не использовать именно вследствие его непредсказуемости.
А можно ли как-то обойтись без вообще редиректа? Можно!
Способ 3-й. Использование директивы Host
Есть еще один способ поменять адрес сайта, использовать директиву Host в файле robots.txt.
Строго говоря – это самый разумный изо всех способов, когда дело
касается именно смены домена целиком. Реализовать этот способ очень
просто. Надо найти в корне вашего сайта файл robots.txt, найти в нем блок, состоящий из директив Allow и Dissalow и сразу после него (без пустых строк) вставить следующую строку.
Host: site.ru # где site.ru название вашего нового домена.
Если файла robots.txt в корне вашего сайта нет, создайте его и заполните следующим содержимым:
User-agent: Yandex
Disallow:
Host: site.ru # где site.ru название вашего нового домена.
Эта директива говорит поисковым машинам следующее: «Если найдено
несколько доменов с одинаковым содержимым, используйте в качестве
основного тот домен, который указан в директиве Host».
Директива Host ничего не предписывает исключать из индекса, она
просто говорить, на какой домен для данного сайта надо ориентироваться.
Поэтому – директива Host самый безопасный способ сменить домен у сайта.
Самый безопасный, но увы – ненадежный. Все дело в том, что директива
Host носит не обязательный, а рекомендательный характер. Поисковая
машина может принять ее во внимание, а может и не принять.
Яндекс например, как правило охотно следует ее указаниям, а вот Google, наоборот, далеко не всегда к ней прислушивается.
Способ 4-й. Куча-мала
Итак, как мы убедились, нет какого-то универсального способа при
угодить одновременно всем поисковым машинам при смене домена для сайта.
А значит – придется удовлетворять всякий поисковик по отдельности.
Практикой выработана следующая оптимальная последовательность действий.
-
1. Сначала для поисковых машин Яндекс и Рамблер (которые уважают
директиву Host) прописываем директиву Host в файле robots.txt и ждем
пока новый домен не станет основным. Наберитесь терпения, ждать можно
довольно долго, порой несколько месяцев. Проверить, случилось ли
радостное событие можно добавив новый домен в форму по адресу
http://webmaster.yandex.ru/addurl.xml. Если вы получите сообщение что
«Указанный вами сайт является неглавным зеркалом сайта...» , значит
надо подождать еще немного. Если же вы получите сообщение о том, что
данный домен уже проиндексирован, значит можно переходить к п. 2.
-
2. Для поисковых машин Google и Yahoo! (которые обрабатывают 301
редирект с приемлемой скоростью) прописываем 301 или 302 редирект, что
вам больше нравится (я лично всегда использую 301).
Все!
И несколько замечаний напоследок.
-
а) Не следует менять местами п 1. 2. Надо обязательно именно в
такой последовательности – сначала директива Host и лишь потом 301
редирект. Если сделать наоборот, то по 301 Яндекс может на время "потерять" страницы вашего сайта.
-
б) Не следует пытаться объединить п. 1 и 2, то есть «для
ускорения» одновременно назначить и Host и 301 редирект. Если вы
сделаете это, то директива Host при назначенном 301 редиректе работать
не будет. Ведь редирект будет распространяться в том числе и на сам
файл robots.txt – поисковая машина просто не станет его читать.
Заключительная хитрость
99,9% всех рекомендаций по назначению 301 редиректа, которые
встречаются в сети рассказывают о том, как сделать это при помощи модуля
mod_rewrite. Именно этот способ был описан мною выше.
Однако есть и другие способы сделать это, тем более что на ряде
хостингов нет ни mod_rewrite, ни возможности использовать файлы
.htaccess.
Если ваш сайт построен на CMS, например Joomla!, Drupal, WordPress, Bitrix и им подобным, то 301 редирект можно устроить и без помощи .htaccess с mod_rewrite.
Для этого:
А) найдите в корне вашего сайта файл index.php;
Б) найдите в начале этого файла строки со словом require или include;
В) непосредственно перед этими строками вставьте следующий код:
if ($_SERVER['HTTP_HOST'] != "новый домен")
{
header("HTTP/1.0 301 Moved Permanently");
header("Location: http://новый домен");
}
Где вместо «новый домен» вы должны указать имя вашего нового домена
без приставки http://, при этом домен может быть как с www так и без
www, в зависимости от ваших предпочтений.
Такой способ организации 301 редиректа, кроме прочего, позволяет использовать одновременно c 301 редиректом еще и директиву Host, но как показывает мой опыт, лучше все-таки не совмещать.
Источник: http://shipilov.com/index.php?option=com_content&task=view&id=100&ac=0&Itemid=10
|