Привет, друзья. Сегодня хочу обсудить с вами очень популярную тему – это 301 Редирект (Permanent Redirect 301). Многие начинающие вебмастеры уже сталкивались с этим понятием, но не придавали значение такому аспекту как важен «редирект» для сео. На просторах интернета много разной информации, но я постарался собрать все самое полезное для вас в одной статье на моем блоге.
В этой статье я не буду углубляться в технические тонкости, а хочу поговорить о конкретных ситуациях, когда лучше применять редирект, как правильно прописать и настроить правила переадресации с помощью конкретных команд. И опишу инструменты и сервисы, которыми вы сможете проверить правильность редиректов.
Содержание статьи:
- Что такое 301 редирект(Permanent Redirect 301)
- Когда делать редирект 301
- Когда противопоказан 301 редирект
- 301 редирект через .htaccess
- Редирект 301 при помощи PHP
- nginx и редирект 301
- Как проверить http-заголовки сайта
Что такое 301 редирект?
301 редирект или 301 Permanent Redirect – это постоянное перенаправление конкретного URL-адреса на другой адрес. Пример: моя статья расположена тут 1)https://moysait.ru/2, но ввиду каких либо обстоятельств потребовалось изменить её адрес на 2)https://moysait.ru/11, т.е. при заходе на адрес 1 вас будет перенаправлять на адрес 2 это и будет называться редиректом.
С технической стороны это ответ сервера на запрос к нему, и ответ на это запрос будет код 301, который говорит поисковым ботам, что адрес, по которому размещен некий контент навсегда изменен на новый. Результат этого нового адреса будет тот который мы указали на примере выше.
301 редиректом можно решить большинство проблем с оптимизацией, и конверсией вашего сайта. Считаю, что научиться делать редиректы должен каждый оптимизатор.
Когда рекомендуется делать 301 редирект
[banner_468x60] {banner_468x60} [/banner_468x60]Первой причиной применения редиректа может служить смена адреса страницы или даже целого раздела вашего сайта – такая необходимость возникает, когда глобально меняется структура сайта, изменение какой-то части url или изменение правил формирования адресов (если проще, то это ЧПУ). Но об этом мало кто думает, когда производит изменения на своем сайте, и в конечном итоге у него появляется много дублей, что влечет за собой понижение позиций или еще хуже применению санкций со стороны поисковых роботов к сайту вебмастера. На исправление данных ошибок уйдет много нервов и времени так что лучше заранее все сделать грамотно составить план работ по смене структуры сайта и настройке всех редиректов на нужные адреса. После всех проведенных работ вам необходимо убедиться, что при переходе по старым адресам вашего сайта сервер отдает верный 301 редирект на новый адрес.
Еще одна распространенная причина использования 301 Permanent Redirect – это смена адреса сайта или склейка зеркал сайта. Если вы решили сменить адрес сайта в связи с изменением бренда компании или подобрали более красивое доменное имя для вашего сайта, то вам необходимо чтобы при запросе адреса старого домена посетитель попадал на ту же страницу(а не на главную страницу), но на новом домене. Если рассматривать пример промо-сайтов, то в основном они имеют всего одну или две страницы основного сайта. Бывают моменты, когда нужно зарегистрировать несколько доменных имен для того чтобы при написании вашего названия компании, если пользователь допустил ошибку, но все равно попал куда нужно. Но нужно не забывать о том, что на всех «вторичных» доменах должен стоять 301 редирект на основной адрес вашего сайта. Не допускайте грубую ошибку – когда ваш сайт доступен сразу по нескольким адресам.
И опять о зеркалах – может произойти так, что ваш ресурс будет индексироваться по адресам https://www.tvoysait.ru, https://tvoysait.ru и https://tvoysait.ru – это частые ошибки, которые не должны допускаться, и для их решения и нужен 301 редирект. Не стоит забывать выбрать главное зеркало сайта это www или без www и настроить переадресацию на основное зеркало. Несомненно, поисковые боты не совсем бестолковые и в этих ситуациях в большинстве случаев сами сделают правильное решение, но вы им можете помочь, указав верные настройки в панелях вебмастера и в robots.txt (применимо для Яндекса, директива HOST). Но опираться на удачу не стоит в SEO ошибки могут стоить дорого, так что пользуйтесь проверенными способами.
Еще одна причина делать перенаправление — это открытие вашего сайта по адресам https://tvoysait.ru и https://192.132.132.22 (ip-адрес сервера). Бывает что копия вашего сайта может быть доступна не только по вашему адресу, который вы вводите в адресную строку браузера, но и по IP – адресу вашего сервера. В основном такая ошибка возникает на vps/vds и выделенных серверах, на виртуальном хостинге такого не случается. Причиной этого недочета является неправильная настройка вашего сервера – выход из положения будет связан с отключением доступа при обращении к ip-адресу, но самым лучшим помощником здесь послужит 301-редирект на уровне сервера в основном это apache или nginx.
Ну и как без этого, 301 редирект очень хорошо применяют толковые SEO-специалисты для удаления всяких дублей страниц. Почему толковые SEO – специалисты? Да потому-то бестолковым похуй на сайты своих клиентов, и скорее всего даже не делая анализ сайта они тут же приступили к закупке ссылок – да это часто встречается. Я неоднократно встречал таких недоспециалистов, которые хотят только срубить денег с клиента и понимая, что клиент не соображает в SEO впинывают ему хуй в ухо и на этом их работа заканчивалась.
Когда не нужно делать редирект 301
Хочу вам кратко рассказать, когда редиректы могут принести не пользу, а вред для вашего проекта.
Помните, что если вы не уверены на 100% в том что вы делаете, то и делать этого не нужно. Лучше обратиться к специалистам иначе потом выйдет в двое дороже. Примите к сведению этот совет:)
Перманентный редирект не нужно применять для временных решений, это понятно из его обозначения – для временного перенаправления применяйте 302 Moved Temporarily (временно перемещен). Тогда у вас не произойдёт склейки адресов и адрес с редиректом можно будет в любой момент восстановить.
Если с вашим сайтом точнее доменом возникли проблемы, допустим, бан, попал под фильтр ПС и т.п., и вы захотели сменить адрес сайта (домен), то не надо делать 301-редирект со старого на новый домен – иначе в итоге вы перенесете все проблемы старого домена на новый. То есть в результате ничего не поменяется. Если вы намерены поменять домен, то стоит попробовать перенести все содержимое сайта на новый домен, а на старом полностью удалить и повесить информацию о том, что сайт находиться по новому адресу.
Вариантов применения редиректа очень много – через jаvascript, php, htaccess настройки apache и ngnix и т.д. – запомните не нужно применять сразу все варианты одновременно, скорее всего у вас возникнут проблемы между этими вариантами и в итоге вы получите бесконечное циклическое перенаправление.
301 редирект с помощью .htaccess
Это вариант установки редиректа является самым востребованным и легким. Хотя если сказать честно, легко, это только кажется. Из положительных сторон данного способа можно выделить, что редирект срабатывает на уровне сервера и до начала исполнения любых скриптов веб-сайта и не оказывает нагрузки на сервер.
У вас на сервере в корневой папке сайта уже должен находиться файл .htaccess. Если этого файла нет:
- Нужно посмотреть настройки вашего ФТП менеджера, он может не показывать системные файлы, каким и является htaccess;
- Перейдите в FTP менеджер через консоль управления хостингом (в большинстве случаев ISPmanager) и поглядите какие права выставлены для этого файла. Подразумевается не CHMOD, а группа и пользователь, допустим, там будет стоять пользователь root, а вы делаете подключение через ФТП используя доступ владельца домена;
- Данного файла просто нет. Тогда вам предстоит его создать, но под windows новички столкнуться с проблемой, ведь файл .htaccess отображается системой как файл без имени и только с расширением. Есть простой выход из этой ситуации – вам необходимо создать простой txt-файл, добавив в него строчку «RewriteEngine On» (без кавычек), после загрузить этот txt-файл на сервер, а уже на сервере переименовать его в файл .htaccess.
«RewriteEngine On», основные настройки редиректа будут прописываться после этой строки и их необходимо вписывать в самом начале файла, чтобы сервер их обработал в первую очередь. Нужно соблюдать последовательность вносимых изменений, т.к. сервер обрабатывает команды построчно с самого начала и до 1-го вхождения.
Для настройки переадресации в файле htaccess, вам понадобятся следующие операторы регулярных выражений:
- ^ — метка начала строки;
- $ — метка конца строки;
- ! – отрицание;
- \ — экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом;
- . – точка, обозначает любой символ, но только один;
- () – группировка;
- ? — символ повторяется 0 или 1 раз;
- * — Повторяется от 0 до 65536 раз;
- + — Повторяется от 1 до 65536 раз;
- NC — (nocase) отключает проверку регистра символов;
- R — (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY). С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY). Как вы понимаете, это то самое, что нам и надо;
- L — (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.
Редирект для домена с www.tvoysait.ru на tvoysait.ru
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Редирект для домена с tvoysait.ru на www.tvoysait.ru
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
Альтернативный вариант редиректа с без www на домен с www.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^tvoysait\.ru$ [NC]
RewriteRule ^(.*)$ http://www.tvoysait.ru/$1 [R=301,L]
И обратно с www на без www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.tvoysait\.ru$ [NC]
RewriteRule ^(.*)$ http://tvoysait.ru/$1 [R=301,L]
Я предпочитаю пользоваться альтернативным вариантом.
Редирект страницы с символьным URL -ом на другую страницу с символьным URL -ом
RewriteEngine On
RewriteRule ^(.*)vashastranica.html$ http://tvoysait.ru/vashanovayastranica.html [R=301,L]
Переадресация старого домена на новый.
Необходим когда вы решили поменять домен сайта на новый.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.tvoysait\.ru$ [NC]
RewriteRule ^(.*)$ http://noviytvoysait.ru/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^tvoysait\.ru$ [NC]
RewriteRule ^(.*)$ http://noviytvoysait.ru/$1 [L,R=301]
В приведенном примере новый домен будет открываться по новому адресу без www, а при заходе на старый домен с www и без www будет стоять редирект.
Перенаправление вторичного домена на основной домен при нахождении их в разных доменных зонах.
Бывает такое что компания приобрела несколько названий своего бренда в разных доменных зона и сайт будет находиться только по одному адресу,для этого нам и понадобиться 301 редирект.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^tvoysait.ru$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www.tvoysait.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://tvoysait.ru/$1 [R=301,L]
В примере основным доменом является tvoysait.ru.
Редирект страницы tvoysait.ru/index.php на tvoysait.ru Самый распространенный случай когда главная страница сайта открывается по двум адресам, чтобы избавиться от этого нужно прописать в файле .htaccess следующее:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://tvoysait.ru/ [R=301,L]
Альтернативный вариант
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L]
Редирект URL со значением на любую другую страницу сайта.
Если в URL ваших страниц сайта имеются параметры, то при желании можно выполнить редирект страницы с конкретным параметром на любую другую страницу. Например страницы https://tvoysait.ru/index.php?section=1 на с страницу https://tvoysait.ru/index.php?section=2 Параметр в URL идет, как правило, после "?" в данном случае это section=1, сам код будет таким:
RewriteEngine On
RewriteCond %{QUERY_STRING} section=1
RewriteRule ^index.php http://tvoysait.ru/index.php?section=2 [R=301,L]
Еще один вариант перенаправления URL с параметром на главную страницу сайта:
RewriteEngine On
RewriteCond %{QUERY_STRING} section=1
RewriteRule ^index.php http://tvoysait.ru/? [R=301,L]
Простой редирект страницы на новый адрес
Самый частый случай, когда нужно сделать перенаправление одной страницы на другой адрес. Но вдруг вам необходимо сделать редирект для большого количества страниц, то понадобиться прописать несколько правил, но все же лучше воспользоваться шаблонами, написанными выше. Есть несколько похожих вариантов синтаксиса:
Redirect 301 /page1.html http://tvoysait.ru/page2.html
Redirect permanent /page1.html http://tvoysait.ru/page2.html
RedirectPermanent /page1.html http://tvoysait.ru/page2.html
Вы можете выбрать любой из трех предложенных вариантов, но я рекомендую вам первый вариант.
Пример редиректа при смене структуры сайта
Иногда встает необходимость поменять название категорий на сайте, пример https://tvoysait.ru/seo/tut/ данная категория сменила адрес на следующий https://tvoysait.ru/seofishki/. Для этого нужно написать в файле htaccess правила указанные ниже:
RewriteEngine On
RewriteRule ^seo/tut/(.*)$ seofishki/$1 [R=301,L]
Перенаправление домена с https:// на https://.
Для того, чтобы этот редирект работал, нужно использовать только Web-сервер Apache. При применении связки Nginx+Apache появиться ошибка циклической переадресации. Поэтому перенаправление нужно будет настроить именно в Nginx.
RewriteEngine On
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://www.tvoysait.ru/$1 [R=301,L]
Перенаправление домена с https:// на https:// .
Сейчас все большую популярность набирают SSL сертификаты, и большинство компаний переводит свои сайты на защищенное соединение. Думаю в ближайшем будущем всем придется перейти на https протокол. Так же как для работы этого редиректа должен использоваться Web-сервер Apache.
RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://www.tvoysait.ru/$1 [R=301,L]
В обоих случаях перенаправление будет осуществляться на домен с WWW.С .htaccess можно заканчивать, теперь мы перейдем к PHP редиректам.
Permanent Redirect 301 с помощью PHP
PHP редирект 301 понадобиться в том случае если по какой то причине у вас проблемы с редактированием файла .htaccess.
Синтаксис PHP редиректа будет выглядеть таким образом:
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://tvoysait.ru");
die("Redirect");
Данный параметр говорит браузеру юзера, что с определенной страницы надо выполнить перманентный редирект на следующий адрес https:// tvoysait.ru. При этом https:// tvoysait.ru не обязательно должен быть адресом главной страницей вашего сайта, но и туда можно указать любой другой сайт. Если вы ошиблись в написании какого-либо правила, то в вашем браузере вы будете наблюдать надпись «Redirect».
Чтобы вам стало более понятно я написал несколько примеров, которые вы сможете применить на ваших сайтах.
Функция, убирающая заданный кусок из url
if (strpos($_SERVER['REQUEST_URI'], 'http://tvoysait.ru') !== false) {
$real_page_url = "http://tvoysait.ru".str_replace ( "/http://tvoysait.ru", "", $_SERVER['REQUEST_URI'] );
header("HTTP/1.1 301 Moved Permanently");
header("Location: $real_page_url");
die("Redirect");
}
В этом примере я рассматриваю проблему, при которой иногда может вылезать много 404 ошибок, и адреса этих страниц будут вида https://tvoysait.ru/https://tvoysait.ru/111/, т.е. неизвестно откуда в адресе появляется дубль адреса сайта. И для устранения этой ошибки нужно написать функцию, которая будет проверяет, есть ли в URI (обратите внимание, не URL, а URI) вхождение «https://tvoysait.ru», и если оно есть, то убирать его из адреса, для этого, записываем ненужный кусок в переменную $real_page_url, а после выполняем 301-редирект на правильный адрес из переменной.
Функция, удаляющая конечный слеш из url
if ( ( $_SERVER['REQUEST_URI'], - 1, 1 ) == '/' ) {
$requested_url = rtrim($requested_url, '/');
header("HTTP/1.0 301 Moved Permanently");
header("Location: $requested_url");
die("Redirect");
}
Вот такая несложная функция, которая проверит, есть ли в запрошенном адресе страницы слеш на конце, и если он присутствует, то слеш вырезается и происходит 301-редирет на адрес без слеша.
В своей статье я указал не все варианты, делающие команду переадресации, ведь её можно реализовать, и на других языках программирования, типа ASP, Ruby on Rail и подобным, но я этих языков не знаю, следовательно не буду тут включать умника. Еще можно делать редиректы с помощью метатегов meta refresh, а так же редиректы на jаvascript – но это промыслы грязных на руку дорвейщиков, а поисковые боты эти редиректы не распознают, они получаю ответ от сервера 200 OK. Так что эти варианты мы не будем рассматривать.
301 редирект средствами сервера nginx
Все настройки сервера nginx производяться в конфигурационном файле обычно он располагается по адресу /etc/nginx/nginx.conf. А также не забываем перезапустить веб сервер после внесения каких либо правок в его файлах командой: service nginx restart
Примеры самых распространенных редиректов
Редирект для домена www.tvoysait.ru на tvoysait.ru
server {
listen 80;
server_name www.tvoysait.ru;
rewrite ^ http://tvoysait.ru$request_uri? permanent;
}
Редирект для домена с tvoysait.ru на www.tvoysait.ru
server {
listen 80;
server_name tvoysait.ru;
rewrite ^ http://www.tvoysait.ru$request_uri? permanent;
}
Редирект 301 с http на https
server {
listen IP.се.рве.ра:80;
server_name www.tvoysait.ru;
rewrite ^ https://www.tvoysait.ru$request_uri? permanent;
}
И обратно
server {
listen 443;
server_name www.tvoysait.ru;
rewrite ^ http://www.tvoysait.ru$request_uri? permanent;
}
Я не слишком силен в настройках ngnix, так что если у вас возникнут вопросы спрашивайте у Гугла:)
Как проверять статус ответа сервера и HTTP-заголовки сайта
[banner_468x60] {banner_468x60} [/banner_468x60]Так как статья получилась и так уже большой я не буду здесь расписывать как пользоваться различными сервисами для проверки http-заголовков сайтов а укажу несколько полезных расширений для браузера, а как пользоваться ими думаю вы разберетесь сами.
Дополнение HttpFox для Firefox
HttpFox (вот ссылка на него) — это самый популярный инструмент для отслеживания http-заголовков. HttpFox построчно покажет вам ход загрузки страниц сайта, что поможет отследить, допустим, цепочку редиректов и вообще порядок и быстроту загрузки страницы. Если вы используете браузер Мозилу, то обязательно рекомендую.
Расширение HTTP Headers для Chrome
С этим расширением не знаком но в интернете о нем очень лесные отзывы вот ссылка на него.
Чуть не забыл, рассказываю вам здесь значит про то как нужно делать эти редиректы, а что от этого толку я же вам не сказал где посмотреть эти ошибки, которые возникают на вашем сайте, чтобы делать эти самые редиректы вот список ссылок по теме:
Яндекс вебмастер (смотреть так Выбираем сайт –> Индексирование сайта –> Исключенные страницы.)
Гугл вебмастер(смотреть так Выбираем сайт –> Оптимизация –> Оптимизация HTML и сайт –> Конфигурация –> Параметры URL.)
Ну вот и все дорогие друзья все что хотел я написал, думаю после прочтения этого поста вы исправите те ошибки которые у вас имеются на сайте, еще раз большое человеческое спасибо кто дочитал эту статью до конца, надеюсь она принесет вам пользу.
Вашей благодарностью буде если вы поделитесь в комментариях вашими наработками на эту тему.