Как зарабатывать в интернете более 100 000 рублей?

Выберите рубрику блога

301 редирект

Рубрика: Продвижение сайтов

Блог Ярослава Перелыгина

yaroslaff.su

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

301 редирект обычно прописывается в следующих случаях:

  1. при склеивании зеркал сайта с www и без www;
  2. при переезде сайта на новый домен;
  3. при переносе сайта на новую CMS;
  4. при изменении URL-адресов страниц;
  5. при устранении дублей страниц сайта.

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

301 редирект замечателен тем, что он передает pr-страниц и тИЦ сайта, а соответственно и ссылочный вес новому URL. Но зато он не передает наложенные на старый домен санкции со стороны поисковых систем, что вдвойне приятно.

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

Как настроить 301 редирект

Для начала я приведу список операторов регулярных выражений, которые пригодятся вам при настраивании 301 редиректов.

  • ^ — ограничение слева;
  • $ — ограничение справа;
  • * — 0 и более символов;
  • + — 1 и более символов;
  • . — любой символ;
  • \ — экранирование;
  • () — переменная;
  • [] — диапазон значений.

Существуют различные способы того, как сделать 301 редирект. Лично я, как и многие другие вебмастера, настраиваю его через файл .htaccess. Данный файл есть практически у каждой популярной CMS, и находится он в корне вашего сайта. Скачать .htaccess можно через FTP при помощи клиента FileZila:

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

Файл .htaccess следует открыть текстовым редактором, к примеру, Notepad++. Поверх всех кодов редиректов вам следует прописать следующую строку:

RewriteEngine On

В противном случае редиректы работать не будут.

Многие ошибочно полагают, что можно обойтись и без 301 редиректа. Я могу вам сказать, что он необходим при оптимизации практически каждого сайта. К примеру, абсолютно каждый сайт изначально доступен по двум адресам — с www и без www. Беда в том, что это приводит к размыванию ссылочной массы. Объясню почему. Другим сайтам абсолютно все равно, какой из двух вариантов написания вашего домена является основным. Если они будут ставить на вас ссылки, то в адресе могут прописывать как вариант с www, так и без www. Ссылочная масса в итоге будет размыта, а поисковики в любом случае будут индексировать только один вариант. Когда-то так они вообще воспринимали их как совершенно разные сайты.

Чтобы ваш сайт активно рос в позициях и не терял ссылочную массу, требуется в файле .htaccess прописать 301 редирект.

С www на без www:

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

С без www на www:

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

Если приведенные выше коды редиректа не сработают, то воспользуйтесь следующей записью для редиректа с www на без www:

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

Помните, что вместо site.ru нужно прописывать домен вашего сайта. После проделанных действий сохраните файл .htaccess и закачайте его на сервер, заменив им старый файл.

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

Бывает такое, что страница сайта доступна сразу по двум URL-адресам вида: http://site.ru/category/page.html и http://site.ru/page.html. В данном случае идет речь о дублях. К примеру, мы хотим, чтобы страница была доступна только по адресу второго вида. В таком случае для избавления от дубля необходимо прописать следующий редирект:

RewriteRule ^(.*)category/page.html$ http://site.ru/page.html [R=301,L]

Теперь представьте ситуацию, что вы изменили адрес страницы сайта. Для чего? Да, могут быть самые разные причины. Я, к примеру, совсем недавно это делал с целью укорачивания длины URL. Для этого вам понадобится следующий редирект:

RewriteRule ^(.*)old-page.html$ http://site.ru/new-page.html [R=301,L]

Если приведенный выше код редиректа не сработает, попробуйте следующий:

RewriteRule ^old-page.html$ http://site.ru/new-page.html [R=301,L]

Или такой:

RewriteRule ^old-page.html$ /new-page.html [R=301,L]

Если требуется сделать редирект со старого URL-адреса на кириллице на новый URL-адрес (хоть на кириллице, хоть на латинице), то запись будет иметь вид:

RewriteRule ^старый-урл.html /new-page.html [R=301,L]

Как вы понимаете, выше мы рассматривали редиректы с одного URL на другой в пределах одного сайта. Для этого мы использовали mod_rewrite и директиву RewriteRule. Но можно обойтись и более простым вариантом записи редиректа при помощи директивы Redirect:

Redirect 301 /old-page.html http://site.ru/new-page.html

Оба варианта записи редиректа корректны и передают ссылочный вес и другие показатели. Они отличаются лишь тем, что используют директивы разных модулей, и поэтому имеют различный синтаксис. При использовании директивы Redirect сначала прописывается старый адрес страницы без http://site.ru, а затем новый адрес полностью.

301 редирект может вам понадобиться при переезде сайта со старого домена на новый:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.old-domen\.ru$ [NC]
RewriteRule ^(.*)$ http://new-domen.ru/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^old-domen\.ru$ [NC]
RewriteRule ^(.*)$ http://new-domen.ru/$1 [L,R=301]

Аналогичный редирект с использованием директивы Redirect:

Redirect 301 / http://new-domen.ru

Можно прописать 301 редирект URL с параметром на любую другую страницу сайта, к примеру, главную:

RewriteCond %{QUERY_STRING} ^cPath=373_703
RewriteRule ^index\.php$ http://site.ru/? [L,R=301]

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

Редирект с site.ru/index.php на site.ru (избавляемся от дубля главной страницы):

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.ru/ [L,R=301]

В результате наличия у главной страницы сайта дубля вида site.ru/index.php аналогичные дубли могут появляться и у внутренних страниц сайта, к примеру, site.ru/index.php/page.html является дублем страницы site.ru/page.html. В данном случае все дубли такого вида разом можно устранить при помощи редиректа:

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

Если у главной страницы вашего сайта есть дубль вида site.ru/main.html, то следует прописать следующий редирект:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /main\.html\ HTTP/
RewriteRule ^main\.html$ http://vash-sait.ru/ [R=301,L]

или же такой вариант:

Redirect 301 /main.html http://site.ru/

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

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1.html [R=301,L]
RewriteRule ^(.*)/$ /$1.html [R=301,L]

Если же наоборот вы хотите, чтобы все внутренние страницы сайта имели адрес без .html на конце, то есть адрес вида site.ru/page, то следует прописать редирект:

RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)\.html$ /$1 [R,L]

Если стоит задача редиректа с URL-адресов с .htm на конце на адреса с .html на конце, то в .htaccess следует добавить следующую запись:

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

Возможно, вам потребуется сделать редиректы с URL-адресов без суффиксов на адреса со слэшем на конце. Тогда в файле .htaccess следует прописать следующее:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) http://www.site.ru/$1/ [R=301,L]

Если задача полностью противоположная, и требуются редиректы с URL-адресов со слэшем на конце на адреса без суффикса, то добавьте следующий код:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

Чтобы прописать редирект с URL-адреса с параметром вида http://site.ru/?page_id=111, добавьте в .htaccess следующее:

RewriteCond %{QUERY_STRING} page_id=111
RewriteRule ^ http://site.ru/new-page/ [R=301,L]

Также совсем недавно столкнулся с сайтом, для которого был получен сертификат о его безопасности, и было необходимо прописать редирект с http на https:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

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

Как проверить 301 редирект

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

Чтобы окончательно убедиться в том, что 301 редирект настроен верно, рекомендую также проверить ответ сервера при помощи специальных сервисов, к примеру, 2ip.ru, а еще лучше воспользуйтесь программой Netpeak Spider, при помощи которой можно узнать еще и много другой информации о сайте. Ответ сервера должен быть «301 » или же «301 MovedPermanently -> 200 OK».

Надеюсь, теперь Вы поняли, как правильно настраивать 301 редирект. Выше я привел достаточное количество различных примеров. Если не сработает один тип записи редиректа, скорее всего сработает другой. Пробуйте. От чего зависит, какая именно запись редиректа сработает, точно сказать не могу, так как не являюсь программистом. Возможно, от CMS или настроек сервера. Также иногда влияет расположение кода редиректа в файле .htaccess. Если редирект не срабатывает, попробуйте перенести его код чуть выше по файлу. На этом у меня все. Успехов в оптимизации сайтов!

Поделись с друзьями:

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

  • userpic

    Sorokin Vladimir 26.08.2014 | 21:16

    Здравствуйте! Статья выше всяких похвал – все очень доходчиво! Но хочу уточнить пару моментов. Мне нужно перевести небольшой сайтик, на сорок с лишним страниц, с файлового на движок. Естественно все урлы страниц меняются. Написать 40 строчек в.htaccess не сложно – сделаю. А, теперь главное. Редирект остается «пожизненно», или через какое-то (какое?) время его надо убирать? И если «пожизненно» то тогда может не исправлять все ссылки внутри сайта (меню, перелинковка и тд все возьмет на себя 301-й) или все-таки переписать? Спасибо!

    Ответить
    • userpic

      yaroslaff 27.08.2014 | 09:37

      Редирект оставляйте навсегда, убирать его необязательно. А вот адреса ссылок на новом сайте нужно исправить.

      Ответить
  • userpic

    Влад 23.12.2014 | 18:44

    Здравствуйте! Как сделать редирект одной страницы вида http://www.mysite.ru/name на страницу http://www.mysite.ru/new.html ?
    т е на старом сайте страница была без суфикса, а на новом она с другим именем и уже с расширением html
    Заранее благодарен

    Ответить
    • userpic

      yaroslaff 24.12.2014 | 10:02

      Работает тоже самое правило:
      Redirect 301 /name http://www.mysite.ru/new.html

      Ответить
  • userpic

    Татьяна 19.10.2015 | 18:25

    Здравствуйте!

    Подскажите, пожалуйста, что мы не так сделали. Пытаемся с дублями бороться. Поставили вот что:

    RewriteCond %{REQUEST_URI} ^(.*)\&offset=

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

    RewriteCond %{REQUEST_URI} ^(.*)\?action=

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

    RewriteCond %{REQUEST_URI} ^(.*)\&catid=

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

    RewriteCond %{REQUEST_URI} ^(.*)\?forum_ext=

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

    Смотрим как Googlebot и видим:

    The document has moved here.

    Т.е. редирект туда же, а должен быть на страницу без ?offset=

    Как правильно прописать редирект в нашем случае?

    Ответить
  • userpic

    Александр 30.01.2016 | 19:17

    RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
    RewriteRule .* %1.html [R=301,L]
    RewriteRule ^(.*)/$ /$1.html [R=301,L]

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

    Ответить
  • userpic

    Дмитрий 23.07.2016 | 14:15

    А если нужно все адреса сайта которые видны в адресной строке браузера сделать с www на без www то пишется вот так:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.вашсайт\.ru$ [NC]
    RewriteRule ^(.*)$ «http\:\/\/вашсайт\.ru\/$1» [R=301,L]
    У меня лично так.

    Ответить
    • userpic

      Ярослав Перелыгин 26.12.2016 | 21:38

      RewriteCond %{HTTPS_HOST} ^мой_сайт.ru$ [NC]
      RewriteRule (.*) https://www.мой_сайт.ru/$1 [R=301,L]

      либо так:

      RewriteCond %{HTTP_HOST} ^мой_сайт.ru$ [NC]
      RewriteRule (.*) https://www.мой_сайт.ru/$1 [R=301,L]

      Попробуйте оба варианта. Один из них точно верный.

      Ответить

Оставить комментарий:

  • ;-)
  • :|
  • :x
  • :?
  • :-|
  • :-x
  • :-o
  • :-kk
  • :-P
  • :-)
  • :-(
  • :))
  • 8O
  • 8-)
  • $-)