54.221.9.6

Как сделать и зачем нужен 301 redirect


01.12.2015

Прежде всего давайте рассмотрим, что такое redirect, откуда он берется и зачем нужен сайту. Redirect является одним из кодов состояния HTTP, то есть ответ сервера протокола HTTP на запрос. Коды состояний разделяют на такие группы:

  • 1xx: Информационные (Informational)
  • 2xx: Успешно (Success)
  • 3xx: Перенаправление (Redirection)
  • 4xx: Ошибка клиента (Error)
  • 5xx: Ошибка сервера (Server Error)

3xx: (Redirection), как вы могли уже догадаться, относят к третьей группе, так называемой перенаправление, которая показывает клиенту, сделавшему запрос, что страницы нет и для его выполнения необходимо перейти на другой URL адрес. В данной группе есть такие коды состояний:

  • 300 Multiple Choices: «множественный выбор»
  • — данный ответ сервера означает, что для указанного адреса URL есть множество вариантов интерпретации предоставляемого веб-ресурса по различными характеристикам, например, по языку. При выдаче данного ответа сервером предоставляется список выборов, что дает возможность остановится на одном из них и перенаправить на выбранный запрос.

     

  • 301 Moved Permanently: «перемещена навсегда»
  • – указанный URL был навсегда перемещен на другой новый адрес. А в поле Location выводится адрес куда была перемещена страница.

     

  • 302 Moved Temporarily: «перемещена временно»
  • – запрашиваемая страница временно переехала по другому адресу URL.

     

  • 303 See Other: «смотрите другое»
  • – запрос, что был запрошенный пользователем, доступен по другому адресу, поэтому нужно снова послать запрос.

     

  • 304 Not Modified: «страница не изменялась»
  • – данный ответ сервера последует, если запрос запрашивался методами Last-Modified и/или ETag, что позволяет определить изменился ли документ или не менялся, после чего будет отображен из кеша.

     

  • 305 Use Proxy «используйте прокси»
  • – ответ на запрос, где должен использоваться прокси-сервер, а в поле Location указывается адрес прокси-сервера. Данный запрос может быть использован только HTTP-сервером.

     

  • 306 Switch Proxy: «зарезервировано»
  • (использовался в более ранних спецификациях) – означал, что указанному URL должен использовать прокси-сервер, но на сегодняшний момент не используется и был зарезервирован.

     

  • 307 Temporary Redirect: «перенаправлен временно»
  • – запрос по указанному URL временно недоступен, то есть временно перенаправлен на другой адрес. Данный ответ сервера аналогичен 302.

Мы же рассмотрим более детально 301 Moved Temporarily. Для осознания, чем полезна переадресация (Moved Temporarily) рассмотрим маленький пример. У вас была страница на сайте, https://blog.raskrutka.com.ua/10, который имела некоторый ссылочный вес, то есть на нее вели несколько внешних ссылок. Но возникла необходимость ее переименовать на https://blog.raskrutka.com.ua/blog/10-sposobov-proverit-tekst-na-unikalnost/. Если в данной ситуации просто переименовать страницу, то на старую будет выводиться ответ, что страничка не была найдена (404 Not Found). Но если же будет использована переадресация, тогда поисковый робот будет знать, что страница переехала и вес ссылки будет перенесен на новую страницу, а пользователи будут перенаправлены автоматически на новую страницу. А это означает, что мы не потеряем, не только позицию в ранжировании, но и своих пользователей, что захотят пройти по-старому URL.

 

Почему же 301 перенаправление нужно использовать?

 

Во-первых, страница сохраняет свой ссылочный вес и тИЦ/PR (оценка страницы или домена в Яндекс и Google поисковых системах), а это значит, что раскручивать новую не нужно. Первоначальный ссылочный вес и значение тИЦ/PR очень важны при продвижении сайта.

 

Во-вторых, перенаправление полезно с борьбой дублирования страниц, что также плохо сказывается на ранжировании сайта, да и на внутреннюю оптимизацию сайта тоже. Поэтому если вы решили переименовать страницу или даже сайт (например, raskrutka.com.ua и raskrutka.ua) насовсем, тогда следует использовать 301 редирект, исключением может быть лишь тот случай, когда вам не нужно, чтобы ссылочный вес старой страницы был перенаправлен на новую, тогда одним из вариантов может быть использование 302 и 307 редиректа, то есть временное перенаправление.

 

Приведем несколько реальных примеров использования Redirect 301:

  • Если будет смена доменного имени.
  • При склейке доменов сайта с www в адресе и без – все поисковые системы, считают www.newsite.ua и newsite.ua различными сайтами, поэтому следует выполнить перенаправление с одного на второй. Схожий случай со страницами newsite.ua и newsite.ua/.
  • Рассмотренный выше пример, при изменении URL адреса страницы и важности старого ссылочного веса.
  • Для избежания дублей одной страницы, например, raskrutka.com.ua и raskrutka.com.ua/index.php.
  • При осуществлении ЧПУ – то есть смене адресов страниц, чтобы они отображались и были понятыми пользователями. Например, https://blog.raskrutka.com.ua/blog/33-soveta-dlya-luchshego-ranzhirovaniya-vashego-sajta/.

Это не значит, что существуют только такие случаи использования перенаправления, здесь представлены лишь некоторые. Далее давайте посмотрим, каким образом можно выполнить редирект и рассмотрим способы его использования. Есть несколько способов осуществления перенаправления:

  1. В файле .htaccess;
  2. С помощью языка разметки HTML или языка программирования (JavaScript, PHP).

 
html javascript
 

Самый распространенный и эффективный способ осуществления 301 редиректа — файл htaccess

 

htaccess является служебным файлом для дополнительной конфигурации для сервера Apache или подобных ему серверов. С помощью данного файла можно задать не только перенаправление, но и другие дополнительные параметры для сайта. Данный файл может размещаться в любом каталоге, а также действует на все находящиеся файлы и подкаталоги в папке.

 

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

 

Следует ответить, что для осуществления перенаправления можно использовать модули mod_alias, а также mod_rewrite. При простом перенаправлении следует использовать первый модуль, а если вы хотите выполнить сложные переадресации, тогда лучше использовать второй модуль.

 

К первому модулю относят такие директивы, связанные с Redirect:

 

1) Redirect [STATUS] URL_LOCAL URL_REDIRECT – данная команда позволяет автоматически перенаправить пользователя, запрашивающий URL_LOCAL, на адрес URL_REDIRECT. Адрес URL_REDIRECT должен быть указан полностью с доменным именем и протоколом передачи http.

 

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

  1. permanent (301 —документ быт навсегда перемещен)
  2. temp (302 — адрес временно перемещен) Если ничего не указано, то является значением по
  3. умолчанию.
  4. see other (303 — смотрите другую)
  5. gone (410 — убран)

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

 

Вот простой пример переадресации с одной страницы сайта на другую новую:
Redirect /test/download.html https://blog.raskrutka.com.ua/list/info.html

 

2) Команда RedirectMatch отличается от Redirect лишь тем, что в данной команде можно регулярные выражения использовать, которые в некоторых случаях более удобны, как вариант, для передачи параметров скрипта адреса URL.

 

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

  • () скобки используются, если нужно выделить группу символов, при этом после к данным группам можно обращается по их номеру;
  • Символ ^ – начало строки;
  • Символ $ – конец строки;
  • Символ . – любой символ;
  • Символ | – альтернатива, то есть выражение А|В обозначает А или В;
  • Символ ? применяется после одного символа или группы символов, которые могут отсутствовать или присутствовать;
  • Символ ! – означает отрицание;
  • Символ * ставится после группы или символы, что может присутствовать или отсутствовать любое количество раз подряд;
  • Символ + применяется аналогично * только лишь с той разницей, что предшествующий символ должен стоять как минимум один раз;
  • [] скобки применяются для перечисления символов, что допустимы;
  • Такие [^] скобки используются что бы перечислить недопустимые символы;
  • Символ \ применяется пере теми символами, что нужны в первоначальном виде;
  • После символа # все написанное считается комментариями.

А теперь пример:
RedirectMatch /test/(.*)\.html$ https://blog.raskrutka.com.ua/test/$1.php

 

Полностью вся запись означает, что все html адреса в папке test будет перенесены на php. А для большего понимания попытаюсь объяснить, что происходит в данном примере по отдельности:

  • (.*) – данная группа символов означает любое выражение,
  • \.html – что файл должен иметь именно расширение html.
  • $1 – означает ссылку на группу символов (.*).

 

3) Команда Redirect отличается от RedirectPermanent лишь тем, что по умолчанию HTTP код у первого будет 302, а у второго 301. Для лучшего продвижения сайта стоит лучше использовать второй способ, но можно и первый с указанием поля status.

 

4) RedirectTemp — команда аналогична Redirect с состоянием temp.

 

Также можно использовать более сложный модуль mod_rewrite. Рассмотрим некоторые команды, что используются для выполнения редирект 301:

  • Команда RewriteEngine on|off соответственно включает и выключает механизм преобразования. По умолчанию стоит значение off;
  • RewriteCond является командой, определяющая условия редирект;
  • RewriteRule определяет сам механизм переправления;
  • RewriteBase определяет базовый URL для последующих преобразований в каталоге.

После определения директив, рассмотрим несколько примеров использования данного модуля для выполнения перенаправления. Например, смены доменного имени oldsite.ua на raskrutka.com.ua:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*)oldsite\.ua$
RewriteRule ^(.*)$ https://blog.raskrutka.com.ua/$1 [R=301,L]

 

Или вот пример склейки доменов сайта с www и без:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

 

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

  • HTTP_HOST — доменное имя
  • [NC] — означает отключение проверку регистра символов при срабатывании данного правила,
  • R — флаг Redirect, что производит остановку процесса изменения URL и возвращает результат.
  • L — флаг Last, что что останавливает формирование адреса и после него строка считается окончательной.

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

 

Пример аналогичный предыдущему, но использует символ отрицания для обозначения сайта newsite.ua. Или, например, вы хотите скрыть дубли на главной странице, которые включают версию прямой ссылки, то есть index.php как один из вариантов. Рассмотрим пример, где такая страница будет перенаправлена на главную raskrutka.com.ua:
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://blog.raskrutka.com.ua/ [R=301,L]

 

THE_REQUEST – полная строка запроса http, которая была определенна браузером. Она не включает дополнительные какие-либо заголовки, которые были отправлены браузером. Здесь были рассмотрены лишь несколько примеров, и могут изменяться в зависимости от конкретных нужд. Так же настоятельно рекомендую сохранить файл htaccess, прежде чем его редактировать.

 

Выполнение редирект 301 с помощью HTML или JavaScript, PHP

 

Данные способы подходят, если они написаны не в CMS. В ином случае используйте выше описанный способ. Следует учесть, что писать редирект на HTML можно тем, кто сам написал свой сайт и ему нужно простое перенаправление. JavaScript или PHP следует использовать, если вы хорошо знаете свой сайт и язык программирования, с помощью которого написан ваш сайт.

 

Если необходимо несложное перенаправление одной страницы, то можно применить мета тег на HTML, при этом следует помнить, что значение content может меняться и означает время до переадресации страницы в секундах. Такой вариант следует использовать для сайтов на “чистом” html. Мета-тег будет выглядеть так:
meta http-equiv=“refresh” content=“0; url=https://blog.raskrutka.com.ua”

 

Если все же решили использовать PHP, то вам следует использовать функцию header, которая использует ответ протокола HTTP при обращении к какой-то странице и редирект будет выглядеть следующим образом:
?php
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: https://blog.raskrutka.com.ua/pagename.html»);
?

 

Редирект на JavaScript может использовать различные способы, хотя в браузере можно выключить использования JavaScript, данный способ можно рассматривать как один из возможных. Вот один из них:
script type=»text/javascript»>
window.location.replace(«http:/blog.raskrutka.com.ua/»);
/script

 

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

Алексеев Алексей Алексеев Алексей


"C нами Вы №1!"