С миру по нитке

Сделать переадресацию 301. Последствия неправильной настройки зеркал

Мы выпустили новую книгу «Контент-маркетинг в социальных сетях: Как засесть в голову подписчиков и влюбить их в свой бренд».

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

301 Permanent Redirect / 301 редирект…

… это переадресация пользователя на другой адрес страницы или домена. Этот код ответа сервера означает, что страница и ресурс переехали навсегда и теперь доступны в другому адресу.

Есть мифы, связанные с : например, что при редиректе не передаётся PR страницы, но этот миф был развенчан одним из вебмастеров Google Джоном Мюллером в своем блоге . Или что вместо редиректа можно использовать 302 Temporary Redirect.

Существует целый класс 3хх редиректов. Наиболее часто используются коды 301 и 302 - они как двойняшки, которые вроде бы и похожи, но всё-таки различаются. А для поискового робота это два совершенно разных человека, и трактуются такие ответы сервера по-разному:

  • 301 Moved Permanently : постоянный редирект. Этот код уведомляет о том, что ресурс перемещен на новый адрес на постоянной основе с удалением прошлого домена. Нужен для окончательного переезда на новый ресурс, новую CMS или для склейки страниц.
  • 302 Temporary Redirect: временный редирект. Уведомляет о временном переезде сайта или его страницы. Используется при технических работах на сайте.
  • Как эти коды отразятся на выдаче:

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

    Из-за подобных ошибок вебмастеров и злоупотребления 302 редиректом в неэтичных целях SEO-специалисты очень не советуют использовать его на своём сайте, ведь даже за небольшое подозрение в черном SEO вы можете схлопотать серьезный штраф. Давайте лучше разберемся как можно настроить легальный 3 01 редирект в

    Файл.htaccess - это файл конфигурации HTTP-сервера, наподобие Apache. С его помощью задается большое количество дополнительный параметров и разрешений веб-сервера, распространяет свои права только на каталог, в котором располагается, и его дочерние подкаталоги.

    Самый простой пример редиректа: с сайта на сайт

    Redirect / www.example.com

    www.example.com - сайт, на который мы перенаправляем запрос пользователя.

    Чуть более сложный пример - если мы хотим сделать редирект со страниц нашего сайта на другой сайт. Или, например, сделать редирект на главную страницу.

    Redirect /semantica сайт/

    Redirect /semantica/blog сайт/blog

    Redirect 301 /kernel сайт/

    Что всё это значит:

    1 строка - при обращении к странице www.example.com/semantica будет открываться сайт сайт/

    2 строка - при обращении к http://www.example.com/semantica/blog будет открываться сайт/blog

    3 строка - веб-сервер будет отдавать код 301 о постоянном переезде на новый URL

    Теперь, когда вы примерно понимаете, как это работает, можно переходить на задачи посложнее.

    Сложные редиректы

    Для сложных редиректов существует модуль mod_rewrite - это средство преобразования URL-адресов, использующее . Для редиректа используются три важные директивы: RewriteCond, RewriteRule и RewriteEngine.

  • RewriteEngine включает или выключает работу механизма преобразования:
  • RewriteEngine on | off

    Положение on-off включает и выключает работу модуля.

    2. RewriteCond - определяет условие какого-либо правила, при котором происходит преобразование. Сразу после директивы чаще всего идут переменные %{HTTP_HOST} и %{REQUEST_URI}, которые означают адрес сервера (например, example.ru) и ресурс, запрошенный в строке HTTP-запроса, соответственно.

    3. RewriteRule - идёт после одного или нескольких RewriteCond. Это правило преобразования URI, которое применяется только при условии выполнения RewriteCond.

    Синтаксис директивы RewriteRule выглядит следующим образом:

    RewriteRule Шаблон Подстановка

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

    Метасимволы используются для задания групп символов и меток в шаблоне:

    • ^ - метка начала строки,
    • $ - метка конца строки,
    • \ - экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом,
    • . - точка, обозначает любой символ, но только один,
    • () - группировка.
    • ! - отрицание,

    Флаги определяют дополнительные опции для данного правила и перечисляются в квадратных скобках через запятую:

    • NC - (nocase) отключает проверку регистра символов.
    • R - (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY). С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY).
    • L - (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.
    Как сделать 301 редирект?

    Теперь, зная эти правила, мы можем попытаться самостоятельно сделать редирект с помощью htaccess .

  • Редирект.htaccess на другую страницу
  • Redirect 301 /old-post.html http://new-site.ru/new-post.html
  • Редирект.htaccess с www на без www
  • RewriteEngine on RewriteCond %{HTTP_HOST} !^site.ru$ RewriteRule ^(.*)$ site.ru/$1
  • Редирект.htaccess с без www на www
  • RewriteEngine on RewriteCond %{HTTP_HOST} !^www.site.ru$ RewriteRule ^(.*)$ www.site.ru/$1

    где site.ru - ваше доменное имя.

  • Редирект с index .php (html) на главную страницу
  • RewriteEngine on RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1
  • Редирект со слешем на без слеша
  • RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.*)\/$ /$1
  • Редирект со страниц без слеша на слеш
  • RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteRule ^(.*[^\/])$ /$1/
  • Редирект всех страниц одного домена на главную другого домена
  • RewriteCond %{REQUEST_URI} (.*) RewriteRule ^(.*)$ http://site.ru/
  • Редирект с http на https через. htaccess
  • RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1
  • Редирект с https на http
  • RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1
  • Избавление от дублей страниц
  • Если вы заметили, что к адресу основной страницы приклеивается что-то вроде &sa=123 456 или &crw=123 456 и подобное, просто замените буквенную часть в следующем коде

    RewriteCond %{REQUEST_URI} ^(.*)\&sa= RewriteRule ^(.*)\&sa=(.*)$ $1

    Пример: объясняем на пальцах

    Как с помощью 301 редиректа сделать так, чтобы по запросу site.ru/category/art1/zapis/ в строке адреса было site.ru/zapis/, то есть /category/art1 вырезалась бы из строки, но после вырезания строки показывалось содержимое site.ru/category/art1/zapis/?

    RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^category/art1/zapis/$ http://%{HTTP_HOST}/zapis/ RewriteRule ^zapis/$ /category/art1/zapis/ [L]

    А теперь давайте подробнее разберем, что же тут написано и что вообще происходит.

    Как известно mod_rewrit на apache постоянно просматривает список правил, пока URL можно хоть как-то изменить.
    И не редко получаются бесконечные циклы.

    Чтобы ограничить цикл выполнения правил одной итерацией, можно использовать конструкцию из первой строки. Она предает apache статус был ли выполнен редирект или нет и если да, то пропустить следующие правила. К слову, на nginx эта строка не нужна.

    Вторая строка делает 301 редирект с www.site.ru/category/art1/zapis/ на www.site.ru/zapis/
    Третья же строка говорит серверу, что если адрес вида www.site.ru/zapis/, то надо показывать то, что находится по адресу www.site.ru/category/art1/zapis/

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

  • Принцип «от меньшему к большему»: располагайте редиректы от частных к более глобальны. Т. е. переадресация со страницы на страницу будет выше, чем переадресация с без www на www .
  • Избегайте последовательных - двойных, тройных - редиректов. Один редирект перенаправляет пользователя только один раз.
  • Проверьте HTTP заголовки и статусы ответа сервера, чтобы убедиться в правильности работы редиректа.
  • В заключении хотелось бы по пунктам огласить условиях при которых стоит и не стоит использовать .htaccess переадресацию .

    Когда редирект необходим
  • Вы переехали на другой домен: и вам логично не хочется потерять своих клиентов - настоящих и потенциальных, а также есть необходимость передать вес прошлого сайта на новый.
  • Хотите склеить зеркала: у вас несколько доменных имён с разным написанием бренда и вы перенаправляете всех посетителей на основной сайт.
  • Страница сменила свой адрес: структура вашего сайта была реорганизована и вы пытаетесь предотвратить возможный беспорядок.
  • Хотите избавиться от дублей страниц или копии сайта: не стоит относится к дублям как чему-то безвредному и незначительному. С дублями вы теряете в весе и сдаете позиции конкурентам, а так же дублирование контента может привести к штрафам от поисковых систем.
  • В каких случаях не нужно использовать редирект?
  • Вы временно переезжаете на новую страницу: для этого есть 302 и 307 код, это гарантия того, что не произойдёт склейки страниц и оригинальная страница не выпадет из поисковой выдачи.
  • Вы переезжаете из-за проблем со старым доменом: если у вас есть баны, фильтры и штрафы, то при склейке к вам перейдет не только ТИЦ и PR, но и все беды, от которых вы бежали.
  • Правила приведены для сервера Apache. В правилах: %{QUERY_STRING} - обозначает фрагмент URL -адреса после знака вопроса (задания значений CGI -параметров). Срабатывание того или иного правила для редиректа определяется тем, попадает URL -адрес страницы под это правило или нет. О значении тех или иных обозначений (^, $, NC и т.д.) .

    Ниже даны наиболее используемые правила настройки файла.htaccess для 301 редиректа. Лучше размещать все правила после двух строк:

    Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^site\.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1 RewriteCond %{HTTP_HOST} ^www.site\.ru$ RewriteRule ^(.*)$ http://site.ru/$1 Redirect 301 /was.php http://www.site.ru/new.php

    При этом, новый адрес указывать необходимо полностью с http и доменным именем.

    RewriteRule ^dir /dir-new/$1

    Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111 , тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:

    RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=111$ RewriteRule ^dir/index\.php$ /new/sef/?

    Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:

    RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=(.*)$ RewriteRule ^dir/index\.php$ /new/sef/?

    Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/ , но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.

    RewriteRule ^dir/$ http://www.site.ru/new-dir/

    Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона.рф преобразуется в.xn--p1ai .

    RewriteCond %{HTTP_HOST} ^old-site\.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

    И для домена в зоне РФ:

    RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ RewriteRule ^(.*)$ http://www.site.ru/$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..{1,10}$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.site.ru/$1/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ http://www.site.ru/$1 RewriteCond %{HTTP_HOST} ^si-te\.ru$ RewriteRule ^(.*)$ http://www.site.ru/si-te/ RewriteRule ^bitrix/ /bitrix/admin/ RewriteRule ^(.*)$ http://www.newsite.ru/new/ RewriteRule ^dir(.*)$ /new-file.php RewriteRule ^dir/no-file.html /no-file-new.html RewriteRule ^dir(.*)$ /all.php RedirectMatch 301 (.*)\.html$ http://www.new-site.ru$1.php

    Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.

    DirectoryIndex index.html index.php index.htm index.shtml RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://www.site.ru/ RewriteCond %{HTTP_HOST} ^test.site.ru$ RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} RewriteRule [^abc]/unique-file.html /unique-file.html

    Код позволяет поставить 301-редирект со всех папок вида http://site.ruuniqe-file.html на один файл в корне /unique-file.html . Бывает полезен при переделке сайта и изменении ссылок.

    RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11

    Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11 по адресу /testovyi/test/

    Внимание, важно, чтобы код ответа сервера для 404 ошибки, был именно 404. Путь к файлу указывается с помощью следующей строчки:

    ErrorDocument 404 /404-for-me.php RewriteCond %{HTTP_HOST} ^(+)\.site\.com$ RewriteRule ^(.*) http://site.com/$1 RewriteCond %{HTTP_HOST} ^(+)\.site\.com$ RewriteCond %{HTTP_HOST} !=one.site.com RewriteRule ^(.*) http://site.com/$1

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

    Для сайтов, на которых используется не сервер Apache, аналогичные 301 редиректы легко настраиваются с помощью PHP :

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

    RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ ce|ppc|smartphone|blackberry|mtk|bada|windows\ phone)

    RewriteRule (.*) http://mobile.site.ru/

    RewriteCond %{HTTP_USER_AGENT} ! (accoona|ia_archiver|antabot|ask\ jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo!\ slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer)

    RewriteRule (.*) http://no-search.site.ru/

    Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/

    RewriteCond %{QUERY_STRING} ^view=featured$ RewriteRule ^component/content/?$ /?

    RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ RewriteRule ^index\.php$ /? . - Точка заменяет произвольный символ. - обозначает перечень символов, совпадающих с буквами a, b, или с. [^abc] - перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с. * - означает, что предшествующий символ может повторяться (0 или более раз). * - команда найдёт идущие подряд символы из заданного набора. [^abc]* - с точностью до наоборот. .* - заменяет абсолютно любой набор символов. ".*" - найдёт все подстроки между кавычками. ^ - начало строки (в том случае, если используется в начале выражения). $ - обозначает конец строки. \w - буква, цифра или подчёркивание _. \d - заменяет любую цифру. \D - заменяет любой символ, но не цифру. - заменяет любую цифру. - любая буква от a до z (весь латинский набор символов) в нижнем регистре. - любая буква от A до Z в ВЕРХНЕМ регистре. - любая буква от a до Z в любом регистре. - то же самое. RewriteRule (.*) $1?

    Располагать после: RewriteBase /

    Памятка по используемым символам и обозначениям Строчка RewriteCond - условие выполнения правила RewriteRule . Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
    Спецсимволы, используемые в правилах и их значения.

    ^ - спецсимвол начала строки;
    $ - спецсимвол конца строки;
    ! - спецсимвол отрицания;
    . - точка, заменяет любой символ, но только один;
    () - группировка;
    \ - «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.

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

    Символ повторяется 0 или 1 раз.
    + - повторяется от 1 до 65536 раз.
    * - повторяется от 0 до 65536 раз.

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

    NC - флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
    R - флаг Redirect, производит процесс остановки изменения URL -адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY ).
    L - флаг Last, останавливает формирования URL -адреса и строка считается окончательной.

    • Redirect 301 – теория и практика редиректа, настройка и правила использования

    UPD :

    RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI}

    RewriteCond %{SERVER_PORT} ^443$ RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://your_site.com/$1

    301-ая ошибка (301 Permament Redirect), возвращаемая при обращении к определенному адресу страницы, означает, что сайт был на постоянной основе перенесен на новый адрес, также указанный в HTTP заголовке. Как пользователи, зашедшие через браузер, так и поисковые боты будут перенаправляться по новому адресу, при этом, для поисковиков все свойства старого адреса (страницы) будут переданы новому URL . При 301 редиректе произойдет склейка старого и нового адресов: параметры вроде PageRank и тИЦ, а также вес страницы и ссылочный вес старого адреса будет передан новому URL .

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

    301 редирект в.htaccess

    При использовании апача (apache) на сервере, переадресацию можно просто выполнить с помощью файла.htaccess, однако, при этом, не забыть включить модули mod_alias (для поддержки директив Redirect, RedirectPermanent и RedirectMatch) и/или mod_rewrite (для использования реврайта) в php.ini.

    Редирект с помощью директивы Redirect или RedirectPermanent модуля mod_alias

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

    Редирект с помощью директивы RedirectMatch

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

    RedirectMatch /(.*).php$ /$1.aspx

    Редирект с помощью директивы RewriteRule модуля mod_rewrite

    Для использования директивы RewriteRule необходимо удостовериться, что в httpd.conf подключен модуль mod_rewrite, а также влючена опция FollowSymLinks. Использование реврайт модуля дает много возможностей для перенаправления страниц на новые адреса.

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

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www.(.*)
    RewriteRule ^(.*)$ http://%1/$1

    или альтернативный, более понятный синтаксис

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www.domain.com$
    RewriteRule ^(.*)$ http://domain.com/$1

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

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^domain.com$
    RewriteRule ^(.*)$ http://www.domain.com/$1

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

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www.(.*)
    RewriteRule ^(.*)$ http://www.%1/$1

    Редирект с помощью скрипта (отправки заголовков)

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

    PHP редирект

    ASP редирект


    ASP .NET редирект


    private void Page_Load(object sender, System.EventArgs e)
    {
    Response.Status = “301 Moved Permanently”;
    Response.AddHeader(“Location”,“http://www.new-url.com”);
    }

    ColdFusion редирект


    JSP (Java) редирект

    CGI PERL

    $q = new CGI ;
    print $q->redirect(“http://www.new-url.com/”);

    Ruby on Rails

    def old_action
    headers[“Status”] = “301 Moved Permanently”
    redirect_to “http://www.new-url.com/”
    end

    Привет! В Питере случаются теплые солнечные деньки, и мы их не упускаем, проводим время активно, занимаемся акройогой и акробатикой. Фото в конце статьи. А как вы проводите лето?

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

    301-й редирект

    301 Permanent Redirect (постоянный) позволяет перенаправить пользователей и поисковых роботов с одного урла вашего сайта на другой. В каких случаях он применяется чаще всего?

    • Настроить зеркала: редирект с www на без www;
    • Если ваш сайт переезжает с одного домена на другой;
    • При смене CMS (системы управления контентом);
    • Если контент страницы устарел, но вам нужно сохранить ее вес;
    • При смене урлов на ;
    • Как один из вариантов (отличается от rel=canonical тем, что последний оставляет дополнительные урлы рабочими, но основной вес передает одной канонической странице);
    • При любой необходимости перенаправить посетителя с одной страницы на другую.

    При этом 301-й редирект на 90-99% переносит все свойства старой страницы на новый адрес. Т.е. фактически он склеивает два урла. Для новой страницы сохраняется ТИЦ, PR, ссылочный вес старой.

    Разберем, как установить 301 редирект для сайтов на WordPress.

    Как поставить 301 редирект на Вордпресс?

    Для CMS WordPress существует несколько вариантов настройки 301 редиректа. В сегодняшней статье рассмотрим два из них:

    • С помощью файла.htaccess;
    • С помощью плагина.

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

    Настройка редиректа с помощью.htaccess

    Для внесения изменений в код для данных целей существует ряд директив:

    • Redirect 301 или RedirectPermanent – перенаправляет конкретные страницы, т.е. в данном случае нужно прописывать правило для каждой страницы отдельно. Например, команда

    Redirect 301 /oldpage.html https://site.ru/newpage.html перенаправляет со старой страницы на новую

    • RedirectMatch – задает редирект с возможностью использовать регулярные выражения. Например, можно задать новые расширения урлов:

    RedirectMatch /(. *)\.php$ https://site.ru$1.html

    • RewriteRule – используют чаще других, задает правила перенаправления.

    Разберем смысл некоторых спецсимволов:

    • . – любой символ;
    • * — 0 и больше символов;
    • $ — конец строки;
    • ^ — начало строки;
    • () – переменная.

    И теперь перейдем к рассмотрению примеров 301 редиректов через htaccess.

    301 редирект с одного домена на другой

    Итак, если нам нужно поставить 301 редирект со старого домена на новый домен, прописываем следующее в.htaccess старого сайта:

    1 2 3 4 5 RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.old-site\.ru$ RewriteRule ^(.*)$ https://new-site.ru/$1 RewriteCond %{HTTP_HOST} ^old-site\.ru$ RewriteRule ^(.*)$ https://new-site.ru/$1

    RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.old-site\.ru$ RewriteRule ^(.*)$ https://new-site.ru/$1 RewriteCond %{HTTP_HOST} ^old-site\.ru$ RewriteRule ^(.*)$ https://new-site.ru/$1

    При этом в robots.txt старого ресурса нужно прописать:

    RewriteEngine On RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ https://www.site.ru/

    Редирект 301 со страниц с www на страницы без www

    RewriteCond %{HTTP_HOST} (.*) RewriteCond %{REQUEST_URI} /$ RewriteRule ^(.*)(/)$ $1

    Если вы не знаете, как прописать код для вашего конкретного случая, можно воспользоваться генераторами 301 редиректов. Например, webconfs.com/htaccess-redirect-generator.php .

    Создание перенаправлений с помощью плагина

    Разберем, как прописать 301 редиректы в WordPress с помощью плагина Redirection.

  • Для начала находим и .
  • После активации плагина Redirection, переходим в панель управления «Настройки» — «Redirection».
  • В Source URL прописываем старый адрес страницы, в Target URL – новый, на который будет происходить перенаправление.
  • В Regular expression нужно поставить галочку и нажимаем Add Redirection.
  • Редирект 301 для данной страницы настроен.

    Также тут существует возможность создать временный редирект 307. Его можно использовать, если вы временно изменяете url страницы, например, на время технических работ.

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

    P.S. Смотрим новые акрофотки с Марсового поля:


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

    301 Moved Permanently

    301 – постоянный редирект, который указывает на то, что запрашиваемая страница находится по новому адресу, а старый нужно считать устаревшим. Такой вид редиректа передает 90-99% ссылочной массы на новый URL.

    Канонизация или склейка домена

    Для склейки домена с www на без www:

    RewriteCond %{HTTP_HOST} ^www.site\.com$ RewriteRule ^(.*)$ http://site.com/$1

    Для склейки домена с без www на с www:

    RewriteCond %{HTTP_HOST} ^site\.com$ RewriteRule ^(.*)$ http://www.site.com/$1

    Для правильного выбора метода склейки нужно рассмотреть такие факторы:

    • У какого варианта выше индексация;
    • У какого варианта выше позиции в выдаче;
    • Канонизация слэша в конце адреса.

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

    • http://www.site.com/category1
    • http://www.site.com/category1/

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

    RewriteCond %{HTTP_HOST} (.*) RewriteCond %{REQUEST_URI} /$ RewriteRule ^(.*)(/)$ $1

    или такой, чтобы добавить его:

    RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*[^/])$ $1/

    Для редиректа 301 одной страницы на другую :

    Redirect 301 /oldpage.html http://www.site.com/newpage.html

    Чтобы убедиться, что при запросе любой версии главной страницы, к примеру: default.htm или index.html , будет произведен редирект на каноничную страницу http://www.site.com , нужно прописывать следующий код редиректа:

    RewriteCond %{THE_REQUEST} ^{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/ RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ http://www.site.com/$1

    Редирект каталога

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

    RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2

    Но бывает так, что адрес старого каталога отображается сразу после доменного имени, например www.site.com/old-catalog/ . В этом случае используется такой код:

    RewriteRule old-catalog /(.*) / old-catalog /$1

    Редирект при изменении расширения файлов

    При смене CMS обычно меняется только расширении файлов. Для канонизации страниц в этом случае нужно использовать код вида:

    RedirectMatch 301 (.*)\.php$ http://www.site.com$1.html

    Редирект при появлении нескольких слэшей или тире

    По разным причинам бывает, что в адресе появляются лишние слэши или тире, например www.site.com/catalog////page-1.html . Такие страницы нужно переадресовывать на адреса с одним слэшем .

    RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2

    Таким же образом убираются и лишние тире в адресе, например изменение www.site.com/catalog/page-1.html на www.site.com/catalog/page-1.html .

    RewriteCond %{REQUEST_URI} ^(.*)-(.*)$ RewriteRule . %1-%2

    .htaccess - лишние слэши после имени домена

    • http://site.com//////catalog

    Чтобы убрать все эти слэши так, чтобы было перенаправление на страницу без слэшей, т.е.

    • http://site.com/catalog

    Нужно прописать:

    RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2

    Генерация 301 редиректов

    Если технических знаний для написания собственного кода не хватает, то есть специальные сервисы генерации всех основных редиректов:

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

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

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

    • Проверить работает ли вообще сайт – зайти на его главную страницу;
    • Побродить по сайту, его разделам и отдельным страницам.

    Но есть и сервисы для автоматической проверки редиректа:

    • http://bertal.ru – очень подробные данные обо всех откликах сервера

    Правила использования 301 редиректа vs Canonical

    Поисковая система Google устанавливает четкие правила, только при соблюдении которых, она будет верно трактовать ваши действия. Вот как буквально понимают поисковики 301 и Canonical:

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

    Предпочтения по использованию редиректа 301

    Обычно, это наиболее предпочтительный метод:

    • Для отдельных страниц – если навсегда изменился ее адрес;
    • Для доменов – если сайт будет находиться постоянно на новом домене;
    • Для страниц 404 и страниц с контентом, который более не актуален. К примеру, при удалении товара из каталога можно сделать редирект на похожий по функциям товар или на страницу каталога с этим типом товаров.

    Когда лучше не использовать редирект 301

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

    Понравился пост? Нажми на кнопочки →