Правильный редирект 301

301 код ошибки (Moved Permanently) означает, что данная страница или весь сайт перемещены на новый постоянный URL навсегда. Используется для передачи ссылочного веса. Обязательно проверяйте какой код ошибки отдает сервер, когда настроите данный редирект. Я использую для этого, например, замечательный плагин Firebug для Firefox.

Настройка 301 редиректов, если у Вас веб-сервер linux Apache, происходит в файле.htaccess. А в случае windows веб-сервера IIS — это будет файл web.config.

301 редирект на различных CMS, таких как wordpress, битрикс, друпал, dle, modx, joomla, opencart и других, настраивается с помощью специальных плагинов, а также обычным способом через htaccess или web config.

Основные операторы регулярных выражений

Перед тем, как настраивать правильные 301 редиректы в файле.htaccess нужно чётко различать основные операторы регулярных выражений (спецсимволы, модификаторы, флаги):

спецсимволы:

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

модификаторы:

  • ? — символ повторяется 0 или 1 раз;
  • + — 1 и более символов (до 65536);
  • * — 0 и более символов (до 65536);

Настройка 301 редиректов в файлах htaccess и web.config

Я публикую здесь только проверенные и технически законченные рабочие варианты 301 редиректов. База рабочих вариантов 301 редиректов будет пополняться.
Редирект со старой статической (чпу) страницы на новую страницу:

RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.seowind\.ru$ RewriteRule ^baza-znanij-seo/nastrojka-301-redirekta/$ https://www.сайт/newpage/

Редирект на главную страницу:

RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.seowind\.ru$ RewriteRule ^baza-znanij-seo/nastrojka-301-redirekta/$ https://www.сайт/

Редирект с главной на внутреннюю страницу:

RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.seowind\.ru$ RewriteRule ^$ https://www.сайт/baza-znanij-seo/nastrojka-301-redirekta/

Редирект со страниц сайта с WWW на страницы без WWW:

RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.seowind\.ru$ RewriteCond %{REQUEST_URI} !^/robots.* RewriteRule ^(.*)$ http://сайт/$1

Редирект со страниц сайта без WWW на страницы с WWW:

RewriteEngine On RewriteCond %{HTTP_HOST} ^seowind\.ru$ RewriteCond %{REQUEST_URI} !^/robots.* RewriteRule ^(.*)$ https://www.сайт/$1

Следующий пример позволяет убрать слеш на конце урла.

Редирект 301 со страниц со слешем на конце на страницы без него:

RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1

А здесь добавляем слеш в конец урла:

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

301 редирект с index.php на главную:

RewriteEngine On RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ https://www.сайт/

Редирект всех внутренних страниц на главную:

RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule !(^$|.*\.(css|jpg|gif)) /

Редирект урла с параметром на любую внутреннюю страницу сайта: (Например, со страницы http://www.site.ru/news.php?category=1 на http://www.site.ru/news.php?category=2 (здесь параметр category=)):

RewriteEngine On RewriteCond %{QUERY_STRING} category=1 RewriteRule ^news.php http://www.site.ru/news.php?category=2

Редирект урла с параметром на главную страницу сайта: (Например, http://site.ru/index.php?show_section=12 на главную страницу http://site.ru/ (здесь параметр show_section=12)):

RewriteEngine On RewriteCond %{QUERY_STRING} show_section=12 RewriteRule ^index.php http://site.ru/?

Редирект со старого домена на новый (прописываем в htaccess старого сайта):

RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.siteold\.ru$ RewriteRule ^(.*)$ http://sitenew.ru/$1 RewriteCond %{HTTP_HOST} ^siteold\.ru$ RewriteRule ^(.*)$ http://sitenew.ru/$1

Редирект с домена РФ на домен RU . Здесь важно знать, что РФ зона преобразуется в .xn--p1ai , а само название кириллического домена в соответствующий код (punycode) на латинице xn-… .

RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ RewriteRule ^(.*)$ https://www.сайт/$1

301 редирект каталога:

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

Вы наверное в своей практике встречали случай, когда есть 2 сайта с одинаковой информацией, но в то же время доступные по разным адресам (сайты дубли). У этих сайтов одинаковый robots.txt, sitemap.xml и один на двоих.htaccess. Предлагаю вариант 301 редиректа с неосновного такого сайта (site2) на основной (site1):

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

Вставка включающая в себе все редиректы со страниц index|default с расширениями htm|html|php|asp|aspx на главную:

RewriteEngine On RewriteCond %{THE_REQUEST} ^GET\ .*/(index|default)\.(htm|html|php|asp|aspx)\ HTTP RewriteRule ^(.*)(index|default)\.(htm|html|php|asp|aspx)$ http://www.site.ru/$1

Пример редиректа со страниц без WWW на страницы с WWW в web.config для IIS:

Пример редиректа со страницы default.aspx на главную в web.config для IIS:

Пояснительная преамбула: Я не специалист по поисковой оптимизации (SEO) и не программист. Всё здесь описанное - опыт и интуитивные соображения более-менее продвинутого пользователя.

Ещё: Отдельно хочу выразить благодарность ave за многоразовую помощь в реабилитации сайта:)

Итак, к теме

Redirect 301: Как сделать редирект с одной страницы на другую

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

Что такое Redirect 301?

"Redirect" по-нашему "перенаправление", "переадресация". То есть, это такой код, с помощью которого мы сообщаем, что намерено и навсегда переадресовываем адрес (URL) страницы с прежнего места на новое. "Навсегда" можно отменить, удалив переадресацию.

301 - постоянная переадресация

302, 303 и 307 - временная переадресация

Для чего он нужен?

Простой пример: у вас была на сайте страница с содержанием, вы её удалили, её больше нет, это значит человек, попавший (с гугла или яндекса, например) на эту страницу, увидит "404 ошибку" или "Страница не найдена". Плохой вариант - человек сразу же закроет ваш сайт, или - решит найти через "поиск" на вашем сайте то, за чем пришёл, если оно вообще ещё есть.

В любом случае, увидеть "404 ошибку" - это не прикольно, да и поисковики массовое наличие таких страниц на сайте рассматривают по-неприкольному - могут понизить ваш сайт в результатах выдачи поиска.


Скриншот из видео , в котором глава команды Google по борьбе с веб-спамом Мэтт Каттс (Matt Cutts) отвечает на вопрос "Какая доля веса PageRank теряется при 301 редиректе?"

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

В каких случаях на сайтах применяется перенаправление 301?

1. чтобы перенаправлять одну страницу сайта (ссылку) на другую
2. ссылки сайта с www перенаправлять на ссылки без www, или наборот
3. сделать массовую переадресацию ссылок в случае изменения домена или движка сайта

Это основные случаи. Мой случай - первый, его и рассматриваем.
Делается просто, но у меня простой вариант не сработал, пришлось пару часов погуглить в поисках верного варианта.

Делаем переадресацию 301

Делается это в файле.htaccess, который лежит в корневой папке сайта. Открываем его и вписываем туда наш редирект. Я прописывала сразу после RewriteBase /

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

У меня этот вариант не сработал. Результат: переадресация не происходила, а в адрес ссылки дописывался параметр ?q= . Вот вариант, который у меня сработал. Уточняю: реализовано для сайта на Drupal

Редирект 301 или 301 Permanent Redirect — это правило, которое автоматически переадресовывает пользователя на другой адрес страницы. С его помощью вы можете склеить старые страницы с новыми или перенести сайт на другой домен, убрать многие дубли с сайта и многое другое. Крайне полезная вещь — поэтому нужно научиться делать его правильно!

Так же при 301 редиректе происходит склейка тИЦ (читаем ) и PR — т.е. вы можете сохранить старое значение на новом адресе. Вы можете нисколько не потерять в глазах поисковых систем. Давайте перейдем от теории к практике.

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

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

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

Options +FollowSymLinks RewriteEngine On #Здесь указываем правила

Все правила записываются в виде:

RewriteCond [Сравнение] [Условие] [Флаги] RewriteCond [Сравнение] [Условие] [Флаги] RewriteRule [Шаблон] [Подстановка] [Флаги]

Теперь непосредственно займемся переадресацией и разберем конкретные примеры.

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

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

Редирект с index.php на главную

Чтобы настроить его вам нужно прописать в вашем файле следующий код, который будет перенаправлять посетителей с адреса site.ru/index.php на site.ru:

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

Если вам так же нужно сделать переадресацию с index.html, то просто в коде выше замените .php на .html

Склеиваем алиасы сайта

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

RewriteCond %{HTTP_HOST} ^vash-sait.com$ RewriteCond %{HTTP_HOST} ^www.vash-sait.com$ RewriteCond %{REQUEST_URI} !^/robots.* RewriteRule ^(.*)$ http://vash-sait.ru/$1

Обратите внимание на первые 2 строки, там указано зеркало в зоне.com, если у вас иная или несколько зон, то добавляем правила.

Редирект с www на без www

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

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

Редирект с домена без www на домен с www

Это действие противоположное предыдущему, только основное зеркало здесь www.site.ru:

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

301 редирект страниц со слэшем и без

Это еще один вид дублей, тут мы склеим страницы site.ru/category/ и site.ru/category, как видите, в конце второго урла не стоит слэша:

RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1

Если вам нужно наоборот оставить слэш в конце урла, то вам нужен данный вариант:

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

Если у вас по какой-то причине появились урлы типа site.ru/category//article.html, то юзаем код:

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

где, «//» можно заменить на «—» или любые сдвоенные символы в урле.

Массовая замена категории

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

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

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

Редирект на новую страницу

Самый простой редирект со страницы на страницу, для это просто пропишите так:

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

Где old-post.html — это ваша старая страница, а new-site.ru/new-post.html — это новая страница и она может быть на любом домене (включая ваш текущий домен).

Редирект для url с параметрами

Страницы с параметрами редиректятся сложнее, возьмем пример http://site.ru/page.php?sort=articles. Параметр здесь «sort=articles». Код будет следующим:

RewriteCond %{QUERY_STRING} sort=articles RewriteRule .* http://site.ru/page.php?

Работаем с расширениями

Убираем.html из url (для удаления.php не забудьте заменить $1.html на $1.php):

RewriteRule ^(([^/]+/)*[^.]+)$ /$1.html [L]

Меняем.php на.html в урлах и наоборот (не забываем поменять местами в коде):

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

Правильный 301 редирект на новый домен

Этот пункт я выделил отдельно, т.к. он больше связан с переносом на другой домен. Тут есть важный момент, это не упустить директиву по правке роботса — она указана на 3 строке кода.

RewriteCond %{REQUEST_FILENAME} robots.txt$ RewriteRule ^([^/]+) $1 [L] RewriteCond %{HTTP_HOST} ^site\.ru RewriteRule ^(.*)$ http://new-site.ru/$1 RewriteCond %{HTTP_HOST} ^www.site\.ru RewriteRule ^(.*)$ http://new-site.ru/$1

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

Если у вас появились какие-то вопросы, пишите в комментарии — будем разбираться 🙂

Редирект, или переадресация, — это способ перемещения пользователей, а также поисковых систем на веб-страницы, местоположение которых изменилось. Существует несколько разновидностей редиректов, основные их типы — временный и постоянный.

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

301 редирект своими руками

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

  • Смена домена. Редирект позволяет сделать ее незаметной для пользователей, обеспечивая их перемещение на новый адрес при введении в адресную строку старого.
  • Необходимость сохранить поисковый трафик , Page Rank и ТИЦ, передав их новому домену.
  • Существование нескольких сайтов-зеркал с разными URL-адресами и необходимость перенаправлять трафик на основной домен при введении пользователем любого URL.
  • Объединение двух сайтов и необходимость корректной работы ссылок на устаревшие страницы.
  • Перенос страницы в новое место .
  • Необходимость склейки имени сайта .

Как настраивать 301 редирект — полная инструкция, пример кода

Чтоб принять решение относительно того, какой сайт канонизировать — с «www» или без, со слешем в конце или без, — нужно проанализировать положение в топе и индексацию каждого варианта.

Для склейки домена, содержащего «www»,с доменом без него используется код:

RewriteCond %{HTTP_HOST} ^www.site\.com$

RewriteRule ^(.*)$ http://site.com/$1

Для обратной процедуры:

RewriteCond %{HTTP_HOST} ^site\.com$

Для удаления слеша:

RewriteCond %{HTTP_HOST} (.*)

RewriteCond %{REQUEST_URI} /$

RewriteRule ^(.*)(/)$ $1

Для его добавления:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !(.*)/$

RewriteRule ^(.*[^/])$ $1/

Для редиректа страницы:

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

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

RewriteCond %{THE_REQUEST} ^{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/

RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ http://www.site.com/$1

Для редиректа каталога, структура которого вписана в URL:

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

Для редиректа каталога, URL которого начинается сразу после домена:

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

Для случаев, когда изменяется только расширение URL (перенос сайта на другую платформу или CMS):

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

Как переехать на новый домен? Оптимальный вариант 301 редиректа

Смена домена — одна из самых распространенных причин выполнения постоянного редиректа. Встал вопрос, как переехать на новый домен? Разработанный с учетом алгоритмов работы основных поисковых систем Рунета, Google и Яндекс, оптимальный вариант 301 редиректа осуществляется по такой схеме:

  • постоянная переадресация каждой страницы старого сайта на новый;
  • редиректу не подлежит только файл robots.txt, вместо этого в нем прописывается директива Host с указанием нового домена.

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

RewriteCond %{REQUEST_FILENAME} robots.txt$

RewriteRule ^([^/]+) $1 [L]

RewriteCond %{HTTP_HOST} !^www\.site\.com

RewriteRule ^(.*)$ http://www.site.com/$1

Файл robots.txt применительно к старому сайту должен приобрести такой вид:

User-agent: Yandex

Disallow:

Host: newsite.com

Как настроить главное зеркало сайта

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

  • применяется директива Host, в качестве ее значения указывается имя главного зеркала. Выбор главного зеркала в соответствии с указанием этой директивы не гарантирован, но вероятность высока;
  • осуществляется серверный редирект со станиц старого ресурса, который теперь будет являться неглавным зеркалом, на новый.

Чтоб ускорить вступление изменений в силу, нужно выбрать сайт через Яндекс.Вебмастер, в разделе «Помощь» раскрыть пункт «Настройка индексирования» и перейти по ссылке «Главное зеркало». Здесь можно поставить отметку напротив домена, который при индексировании должен восприниматься роботом как главный.

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

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

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

По умолчанию предпочтительным является постоянный редирект, но есть несколько нюансов и правил, как и когда лучше использовать 301 редирект vs Canonical.

301 редирект применяется, если:

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

Canonical предпочтительней в случаях, когда:

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

Как правильно сделать 301 редирект страницы

Очень важно после окончания прописывания кодов переадресации проверить работоспособность ресурса :

  • зайти на главную страницу, чтоб убедиться, что сайт вообще работает;
  • проверить загрузку основных разделов, наиболее важных страниц;
  • воспользоваться для тестирования сервисами http://bertal.ru и http://www.internetmarketingninjas.com/header-checker/.

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

Ошибки при использовании

Не все знают, как настраивать 301 редирект правильно. Наиболее распространенные ошибки при использовании постоянного редиректа:

  • выполняется многошаговый редирект — медленно работает, возможны потери ссылочного веса;
  • выбран неправильный тип переадресации, не соответствующий цели;
  • на сайте внедряется внутренний редирект, но адреса ссылок не меняются на новые;
  • редирект осуществляется на страницы, недостаточно релевантные исходным;
  • сделан неправильный выбор между редиректом и Canonical;
  • редирект не ведет на правильно работающую (с ответом 200) страницу;
  • осуществляется редирект файла robots.txt вместо прописывания в нем директивы Host.