301 редирект — зачем он нужен и как сделать 301 редирект

Суббота, 29 Янв 11 в 14:35

Про 301 редирект уже, наверное, сказано и пересказано множество раз в блогах, форумах и т.п. Но, как оказывается, не до всех эта информация вовремя доходит (тут я как бы намекаю на себя:). За более чем 3 года в сети я слышал про 301 редирект множество раз, иногда даже собирался его «попробовать», но давайте посмотрим фактам в лицо — так этого и не сделал. А зря! Все началось достаточно прозаически — у меня есть один сайт, который постоянно «колбасит» в плане индексации поисковиками. Вроде и ссылки там есть, и контент нормальный, а он все ни в какую не хочет стабильно работать. У меня уже почти закончились варианты подобного поведения, но тут я вспомнил про основы основ SEO и вообще продвижения — 301 редирект.

Беглый опрос в твиттере показал, что реально я чуть ли не один «забиваю» на этот важный момент. Большинство единогласно ответило, что в обязательном порядке устанавливает 301 редирект сразу при создании сайта. Более того, тут мне недавно попросили по разработке сайта добавить этот же самый 301 редирект для них, поскольку просьба пришла от продвигающей и конторы. Учитывая все эти моменты и «намеки судьбы» я понял 301 редиректу быть!

Зачем вообще нужен 301 редирект? — спросите вы — есть несколько ситуаций в которых его можно применить:

  1. Для склейки домена с www и без www. При этом показатели и ссылочный вес будет совмещаться, а то иногда бывает, что для домена с и без www они могут отличаться.
  2. При смене домена со старого на новый 301 редирект позволит опять же сохранить показатели и ссылочное (насчет тИЦ не знаю, но PR точно).
  3. При переносе страницы на сайте чтобы поисковики и посетители попадали на новую страницу вместо старой неработающей.
  4. Если есть пиаристые домены со ссылками, которые по каким-то причинам вами не используются, возможно, просто некогда, то теоретически можно использовать 301 редирект на другие свои сайты. Хотя это метод такой — дополнительная возможность что ли, основные все же первые три.

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

Как сделать 301 редирект

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

Простой редирект

Производится в файле .htaccess или httpd.conf для Apache. Самый простой вариант простого 301 редиректа для переадресации на новый домен выглядит следующим образом:

Redirect 301 / http://www.site.com/index.htm

В этом случае все страницы старого сайта будут перенаправлены на новый. Если вы хотите сделать 301 редирект для одной страницы, то можно использовать что-то вроде:

Redirect 301 /site1/page1.htm http://www.site2.com/page2.htm

Вот еще парочка примеров простого 301 редиректа:

RedirectPermanent / http://www.site2.com/
RedirectPermanent /old-catalog http://www.site2.com/new-catalog/

Можно поставить 2 условия — для редиректа сразу (нужно помнить что порядок следования важен):

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

Здесь при попадании пользователя или робота в директорию test он перенаправится на www.test.com, все остальные попадут на enter.test.com. Для этого 301 редиректа на хостинге должны быть включены модули mod_alias (для поддержки Redirect, RedirectPermanent и RedirectMatch).

301 редирект с помощью mod_rewrite в .htaccess

С модулем mod_rewrite вы сталкивались достаточно часто даже не подозревая этого. В частности речь идет про постоянные ссылки (permalinks) как полезный инструмент в seo оптимизации wordpress. Если в админке настроите эти самые ссылки и после этого зайдете в файл .htaccess, то обнаружите там целый ряд правил для переадресации через директиву RewriteRule. Кроме того нужно проверить чтобы была подключена опция FollowSymLinks.

Перенаправление домена с www на без-www

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

Чуть более понятный синтаксис

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

Редирект запросов без-www на домен с www префиксом

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

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

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

Вообще использование www в названии сайта само по себе устарело, но иногда до сих пор встречается. Если вы создаете новый сайт, то конечно сразу указываете везде без www, но если получили «готовый продукт», то нужно смотреть как домен отображается в выдаче Google и Яндекс — такой редитект и оставляете дабы ничего кардинально не менять.

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

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]

301 редирект через PHP

Вся суть 301 редиректа через PHP, ASP, JavaScript в передаче клиенту заголовков:

HTTP/1.1 301 Moved Permanently
Location: http://www.newdomain.ru/newdir/newpage.htm

Для этого, например, в PHP используем:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.newdomain.ru/newdir/newpage.htm");
exit();
?>

Данный код лучше всего вставлять в начало PHP скрипта чтобы до него ничего не выводилось (echo или print).  За пояснение спасибо автору этой статьи где также найдете информацию про установку редиректа на ASP, ColdFusion и т.п., просто с php самый популярный вариант.

Примечания по 301 редиректу

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

  • Во-первых, последовательность правил редиректа учитывается. Так что если какое-то правило не выполняется, проверьте нет ли других редиректов и не мешают ли они.
  • Во-вторых, помнить синтаксис и все особенности 301 редиректа достаточно сложно, поэтому иногда здорово помогает логика и перебор некоторых вариантов:) Хотя, конечно, лучше читать официальную документацию.
  • В-третьих, после внедрения 301 редиректа обязательно проверьте правила на работоспособность, зайдите не только на главную, но и пройдитесь по разделам, страницам сайта дабы потом не было проблем с этим.

Данную статью отлично дополняет 301 редирект – самое полное руководство от SeoProfy.

Если у вас есть что добавить по 301 редиректу — пишите:)

P.S. Постовой. В наше время каждый день появляется множество интересных интернет проектов. Хотите знать все про стартапы тогда читайте новый увлекательный блог StartupWay.
После аудита и оптимизации веб-проекта следует комплексная раскрутка сайтов в поисковых системах Google и Яндекс.

Понравился пост? Подпишись на обновления блога по RSS для блоггеров и вебмастеровRSS, RSS для блоггеров и вебмастеровEmail или twitter для блоггеров и вебмастеровtwitter!
Добавить комментарий

Комментариев - 142 для данного поста

  1. Tod Пишет:

    Камал, у вас в блоге есть редирект. Самый простой способ добавить в УРЛ www и посмотрел переправляет ли на ссылку без www.

  2. Fortress-design Пишет:

    Добрый день, Александр.

    делаю постраничный межхостовый редирект. Вот здесь я привел кусочек кода и скриншот. http://www.fortress-design.com/problemy-s-301-redirektom/

    Посмотрите, плиз, почему работает только с главной?

  3. Tod Пишет:

    Fortress-design, может попробовать старый УРЛ прописывать полностью с http?

  4. Гарыныч Пишет:

    Правило смены окончания .htm на .html — наверное ближе всего к моей проблеме.
    Так как, я решил отключить на своем сайте автоматическое добавление окончания .html, тем самым все ссылки стали автоматически без окончания. Но проиндексированные ссылки (с окончанием .html) хорошо поднялись в поисковиках, и не хотелось бы терять их вес. Хочу, что-бы вместо ссылок заканчивающихся на .html (сайт/категория.html), загружались ссылки не заканчивающиеся на окончание .html (сайт/категория).
    Как это реализовать?

  5. Tod Пишет:

    Гарыныч, нашел тут парочку примеров.
    Первый:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\.html$ /$1 [L,R=301]

    Второй:

    #example.com/page will display the contents of example.com/page.html
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.+)$ $1.html [L,QSA]
     
    #301 from example.com/page.html to example.com/page
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
    RewriteRule ^(.*)\.html$ /$1 [R=301,L]

    Нужно тестировать и еще погуглить. Искал по запросу «redirect 301 remove .html».

  6. Lexx1212 Пишет:

    Очень нужна подсказка — переделали сайт под новый шаблон, но встал вопрос ссылок — так как сайт имеет хорошие позиции по запросам. Решение Редиректа в принципе спасает, но один минус — карта сайта (раньше была достаточно сложной (несколько путей по категориям до товара), а теперь все по другому. Вот и вопрос — можно ли сделать редирект с нескольких страниц, ведущих на одну?
    например
    site.ru/123123
    site.ru/456456

    перенаправить на
    site.ru/new

  7. Tod Пишет:

    Lexx1212, редирект с нескольких страниц на одну сделать можно.

  8. Lexx1212 Пишет:

    Спасибо за оперативный ответ!
    Как я понял, это без санкций?)

  9. Tod Пишет:

    Lexx1212, да, все должно быть ок.

  10. Александр Пишет:

    А как сделать 301 редирект если сайт только на HTML и CSS ?

  11. Tod Пишет:

    Александр, использовать простой редирект старых страниц на новые через htaccess.

  12. Александр Пишет:

    Спасибо.

  13. Николай Пишет:

    Привет Tod. Скажите пожалуйста, есть сайт на вордпрессе, а я хочу сделать точную копию — зеркало с последующей простановкой 301 редиректа, но сам сайт будет на простом html. Это будет считаться зеркалом? Просто читал про степень сходства в 80% вот и не знаю имеет ли значение что первый сайт на платформе вордпресс а будущая копия обычный html.

  14. Tod Пишет:

    Николай, если честно, не знаю. Постарайтесь как можно более точно сохранить структуру сайта. А что мешает оставить сайт на ВП? Не худшее решение для сайта.

  15. Николай Пишет:

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

  16. Tod Пишет:

    Николай, если «заново прописывать все пути» при переезде это единственная проблема, то я бы на вашем месте с не смирился. Честно, это, как мне кажется, намного проще (хоть и дольше) чем переводить сайты на ХТМЛ и за ними потом присматривать.

  17. Лера Пишет:

    я вообще чайник в этом, поэтому у меня простой вопрос) мой сайт находится и с www и без www, http://, и просто без всего) мне в принципе достаточно) но хотелось бы чтоб и если на русском языке забиваешь, выходил) это тоже редирект?

  18. Tod Пишет:

    Лера, не уверен, что это касается 301 редиректа) Для того чтобы с сайтом все было нормально достаточно просто выбрать один из форматов «с www» или «без www» и перенаправлять на него. Ничего больше делать ненужно.

  19. Lexx1212 Пишет:

    Лера, Вы имеете ввиду, завести домен на русском языке? Тогда да — приобретаете домен с расширением .рф и привязываете через 301.

  20. Лера Пишет:

    Спасибо за ответы)))) У меня сайт на storland.ru, и там настройка редиректа, вписать старый url, вписать новый) подскажите пожалуйста, это необходимо или можно обойтись) просто темный лес на самом деле…

  21. Валентин Пишет:

    Подскажите если я хочу сделать редирект полностью на сайт мне надо все удалить с корневой папки и оставить только один файл .htaccess ? К примеру сайт valentin.com прикрепляю к valentin.abc-4.com то в фай .htaccess просто прописую Redirect 301 / valentin.abc-4.com ????

  22. Tod Пишет:

    Валентин, удалять, в принципе, не обязательно, прописываете просто редирект в htaccess, который вы и указали в комментарии.

  23. SJA Пишет:

    Добрый день!
    Подскажите, пожалуйста, насколько это реализуемо и ненаказуемо со стороны поисковиков:
    Есть сайт, который работает в вариантах XXXX.ru и XXXX.com. Хотелось бы ботов от google отправлять всегда на .com, а yandex — на .ru.
    спасибо!

  24. Tod Пишет:

    SJA, тут вам скорее не 301 редирект нужен, а Robots.txt. Вот в этой статье в конце приведен пример подобного файла, можете попробовать указать параметр Host для яндекса один, а для гугла другой. Но вообще не понимаю зачем это нужно, я бы так не делал.

  25. Александр Пишет:

    Привет, Тод.

    Вопрос такой. Есть сайт с ужасной структурой, урлы с пятью и более уровнями типа http://site.ru/directory1/directory12/directory122/directory1224/page.html

    Хочу сменить все урлы, чтобы страницы были максимум третьего уровня, типа http://site.ru/directory1/page1224.html

    Продумал структуру, перенёс ручками все директории по новым адресам, а все страницы по новым директориям, написал htaccess в 500 строк с редиректами…

    При попытке захода на старую страницу, перекидывает чёрте куда, вот наглядный пример.

    Redirect 301 http://site.ru/cataloque/restorany http://site.ru/restorany

    перенаправляет нормально, а вот

    Redirect 301 http://site.ru/cataloque/restorany/pivnoi-bar/sport-bar-maximus.html http://site.ru/restorany/maximus.html

    перекидывает на очень странный урл

    http://site.ru/restorany/restorany/pivnoi-bar/sport-bar-maximus.html

    Наверное, я что-то сделал не так?

    Помогите, пожалуйста.

  26. Tod Пишет:

    Александр, без тестирования сложно подсказать. Вероятно глюк с html адресом страницы. Я бы погуглил что-то вроде 301 redirect html page not working — возможно есть какая-то хитрость, о которой я не упомянул.

  27. Александр Пишет:

    Я разобрался.

    У меня в самом начале стоял редирект из старой директории второго уровня /directory/directory1 в новую директорию первого уровня /catalog (названия директорий условные, естественно), то есть, уровень вложенности страниц я понижал тем самым у всего сайта.

    И поэтому все последующие правила выполнялись уже с заменой catalog на directory/directory1, получалась неразбериха.

    То есть, хитрость в том, что htaccess выполняется построчно, и каждая предыдущая строка может повлиять на следующие, если в них есть совпадения в урл. Поэтому, файл нужно составлять от самых глубоких страниц к менее глубоким. Тогда совпадений не будет.

    P.S. Кстати, Тодд, извиняюсь за прошлый каммент, там получились ссылки на несуществующий сайт. Моя оплошность. Удалите их, пожалуйста, а то мне стыдно)))

  28. Tod Пишет:

    Александр, спасибо за разъяснение по поводу построчного выполнения htaccess, как-то даже не знал об этом.

  29. Esil Пишет:

    Привет! Короче ситуация такая, нет доступа к хостингу и к домену, т.е. сайт не работает вообще. Домен оформлял через посредника, а он его оформил на себя. Теперь у меня другой хостинг и домен 3 уровня, возможен ли редирект? Я так понимаю нужно чтоб старый домен работал некоторое время и перенаправлял?

  30. Tod Пишет:

    Esil, если нет доступа к хостингу и домену, то редирект сделать не получится. Правила в htaccess (или другими способами) прописываются на сайте, с которого делаете редирект.

  31. Esil Пишет:

    Спасибо за оперативный ответ! Это очень важно, а то большинство отвечают только через сутки и более.

  32. Сергей Пишет:

    Нужно сделать 301 первый редирект, так что бы вес сайта донара перешел на новый сайт, переадресации не было.
    Попробовал такой вариант

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

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

  33. Tod Пишет:

    Сергей, сначала нужно перенести сайт на новый (при этом новый закрываете от индексации). А когда вся работа будет закончена — устанавливайте редирект.

  34. Сергей Пишет:

    То есть пока не закончу все работы по новому сайту его закрыть от индексации,
    после чего установить выше написанный редирект.
    Подскажите еще тогда как в данной конструкции установить редирект с конкретной страницы старого сайта на страницу нового сайта.
    Например с этой http://туризм-фотографии.рф/puteshestvia/puteshestviya-sergej.html на эту http://travelvideophoto.com/ru/puteshestviya/puteshestviya-sergej.
    Как будет выглядеть вся конструкция в данном случае.

  35. Tod Пишет:

    Сергей, дабы не запутывать поисковики я бы закрыл новый сайт от индексации, тем более если там нет наполнения. Какие-то левые материалы попадут в индекс. По поводу конструкций, я создавал постраничный 301 редирект для одного сайта (для тех, страниц, которые действительно запрашиваются пользователями. Ошибки просматривал с помощью плагина Redirection. Для некоторый разделов, например, новостей создал общий редирект со всех новостей на соответствующий раздел в новом сайте. Задать правило для каждой страницы, увы, у меня не получилось. Поэтому вручную прописывал что-то вроде:
    Redirect 301 /delivery.html http://newsite.com/order.html

  36. Сергей Пишет:

    Да я тоже пока закрыл сайт от индексации, пока не перенесу весь материал.
    После этого сделаю 301 редирект включая переадресацию на отдельные страницы такой

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

    Redirect 301 http://туризм-фотографии.рф/puteshestvia/puteshestviya-sergej.html http://travelvideophoto.com/ru/puteshestviya/puteshestviya-sergej

    Подскажите пожалуйста всё верно, весь синтаксис соблюдён. Так как я в этом ничего не понимаю, просто в конструкции подставляю свой сайт.

  37. Tod Пишет:

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

  38. Сергей Пишет:

    Спасибо большое за помощь и быстрый отклик.

  39. Марат Пишет:

    Сделал редирект со старого домена на новый, про старый уже забыл и вот задумался удалить старый сайт. Стоит ли это делать? Если все уже привыкли к новому, а ссылки со старого не актуальны уже тем более сайт полностью перенесен на новый хост.
    И как это сделать? В гугле показывает 50 000 ссылок со старого сайта, откуда столько не понятно.

  40. Tod Пишет:

    Марат, можно удалять. Суть 301 редиректа как раз в том, чтобы передать вес новому сайту, поэтому через некоторое время от старого проекта можно избавиться.

  41. Сергей Пишет:

    Сейчас открываю 301 редирект для сайта

    RewriteCond %{REQUEST_URI} (.*)
    RewriteRule ^(.*)$ http://travelvideophoto.com// [L,R=301]

    Но сайт мультиязычный и основная страница на английском.
    Возможно тогда стоит сделать редирект на русскую страницу?

    RewriteCond %{REQUEST_URI} (.*)
    RewriteRule ^(.*)$ http://travelvideophoto.com/ru// [L,R=301]

    Написал правильно? Если нет поправьте.

  42. Tod Пишет:

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

Оставить комментарий (правила комментирования)