301 редирект в SEO

Обновлено: 22 мая, 2020

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

RewriteCond %{HTTP_HOST} ^vash-sait.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www.vash-sait.com$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://vash-sait.ru/$1 [R=301,L]

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

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

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

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

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

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

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

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

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

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

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

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

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

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

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

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

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

RewriteRule ^(.*)/old-category/(.*)$ $1/new-category/$2 [R=301,L]

Если у вас категория идет сразу после домена (типа site.ru/category/), то используем другой вариант:

RewriteRule old-category /(.*) / old-category /$1 [R=301,L]

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

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

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? [R=301,L]

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

Убираем .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$ [NC]
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} ^site\.ru
RewriteRule ^(.*)$ http://new-site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.site\.ru
RewriteRule ^(.*)$ http://new-site.ru/$1 [R=301,L]

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

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

В SEO с 2010 года. С 2013 года работаю как частный SEO-эксперт, продвигаю свои и клиентские сайты, а так же веду блог Romanus.ru.
Что мне еще стоит почитать?

Рекомендую к прочтению

4.6 5 votes
Рейтинг статьи
Подписаться
Уведомление о
79 Комментарий
Inline Feedbacks
View all comments
Александр
5 лет назад

Добрый день. У меня такая проблема, может кто подскажет. Сайт зарегистрирован в зоне РФ. Стр. сайт.рф/витрина/ дублирует сайт.рф Как правильно сделать перенаправление? Если можно с примером. Сейчас это выглядит так) Но не проходит… Redirect 301 http://xn—-btbetbl1bemq9c.xn--p1ai/%D0%B2%D0%B8%D1%82%D1%80%D0%B8%D0%BD%D0%B0/ http://xn—-btbetbl1bemq9c.xn--p1ai Впринципе как и не работает ред 301 с www на без Options +FollowSymLinks… Подробнее »

Romanus
5 лет назад
Ответить  Александр

Редирект с www на без www у вас работает.

Насчет переадресации по страницам попробуйте:
RewriteRule ^%D0%B2%D0%B8%D1%82%D1%80%D0%B8%D0%BD%D0%B0/ http://xn—-btbetbl1bemq9c.xn--p1ai/$1 [R=301,L]
или
RewriteRule ^%D0%B2%D0%B8%D1%82%D1%80%D0%B8%D0%BD%D0%B0/ /$1 [R=301,L]

Romanus
5 лет назад

Я могу ошибаться, но я никогда не видел в индекса страниц аля site.ru/index.php/
Расширение является конечной точкой в урле

Алексей Гусев
5 лет назад

Доброго времени суток!
Ставлю
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^.]+)$ /$1.html [R=301,L]

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} ^(.+)/$

RewriteRule ^(.+)/$ /$1 [R=301,L]

после этого отваливается JComments. Куда копать?

Romanus
5 лет назад
Ответить  Алексей Гусев

Вы так и пишите?
2 RewriteEngine On и т.д.?

Алексей Гусев
5 лет назад
Ответить  Romanus

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

Romanus
5 лет назад
Ответить  Алексей Гусев

Значит плагины конфликтуют с вашей идеей, об этом писал Евгений в комментариях к видео на YouTube.
Я не настолько силен в написании кода, потому на этапе, когда появляются такого рода проблемы и я не знаю как их решить — иду к программистам 🙁

Romanus
5 лет назад

Canonical вообще никак не передает вес. Прямо совсем.
Если нужна передача веса — только 301 редирект.

Google переклеивает за 3-7 дней весь сайт практически. Чтобы далеко не ходит — я на своем блоге перебивал много страниц, т.к. структура менялась. Google за 3 дня всё переклеил, Яндекс дней за 5.

андрей егоров
5 лет назад
Ответить  Romanus

Если не обращать внимание на то что при 301 сайт выпадет из поиска yandex, для yandex что лучшее использовать (значение имеет скорость востановления позиций) host или 301?

Romanus
5 лет назад
Ответить  андрей егоров

Повторю еще раз — НИЧЕГО, кроме 301 редиректа не склеивает страницы сайта.
Директива Host -это указание главного зеркала для Яндекса.

Это не взаимозаменяемые вещи.
Соответственно и то и то необходимо.

surikat
5 лет назад
Ответить  Romanus

Скажите , а для чего иметь несколько доменов , которые перенаправляются редиректом 301 на один ресурс? Ведь Алиасы (зеркала) в этом случае не участвуют в поиске и не индексируются вообще?! Допустим у меня site.ru . В поиске google.ru он на первых местах в поисковом запросе , в google.com.ua на последних!… Подробнее »

Romanus
5 лет назад
Ответить  surikat

Намного практичнее сделать несколько сайтов. Каждый под свой регион. Больше гибкости, меньше проблем.

surikat
5 лет назад
Ответить  Romanus

Не совсем ясно как это сделать с тех. точки зрения? Ведь контент одинаковый будет , только ссылки будут разные на фото и в шаблоне. Таким образом один из доменов может попасть под фильтр поисковиков! Об этом пишут в сети.. Притом добавлять новости придётся на несколько сайтов. Может я не правильно… Подробнее »

Romanus
5 лет назад
Ответить  surikat

Сделайте разный контент, добавляйте разный контент, сделайте разные сайты 🙂
Для справки — контент, это намного шире, чем просто текст. От этого и нужно исходить. Текст — это только часть контента на странице.

surikat
5 лет назад
Ответить  Romanus

В моём случае это практически невозможно.. у меня тысячи новостей. кино сайт с субтитрами для изучения английского . Переделать это всё нужен год! Ограничусь пока склейкой домена .ru с доменом .tv а там дальше будет видно. Спасибо Большое!

Artyom Koshkin
5 лет назад

Здравствуйте! Сделал 301 редирект средствами php-фреймворка(Yii), т.к. через htaccess нереально делать в моем случае. Уже дней 10 в гугл-вебмастер ошибки(одинаковые title и мета-описание) так-же висят, хотя пишет, что обновление было пару дней назад. Проверял разными редирект-чекерами — пишет что редирект правильно настроен.
Может ли гугл-бот привередничать в моем случае?

Romanus
5 лет назад
Ответить  Artyom Koshkin

Вы зеркало меняли или просто какие-то страницы склеивали?
Старые страницы отдают 301 ответ?

Artyom Koshkin
5 лет назад
Ответить  Romanus

Склеивал страницы, что-то вроде mysite.ru/article/1 = mysite.ru/article/1?name=название статьи. Проверял страницы через разные редирект чекеры и гугл вебмастер, ответ 301 дает. Возможно из базы будут очень долго удаляться..

Romanus
5 лет назад
Ответить  Artyom Koshkin

Посмотрите, возможно старая версия страницы еще сидит в кэше поисковика. Если да — то ничего страшного, просто дождитесь обновления.

андрей егоров
5 лет назад

Здравствуйте, подскажите как сделать 301 ридерект только для googlebot

Romanus
5 лет назад
Ответить  андрей егоров

А для чего вам нужно редиректить бота гугла?

Для такой задачи лучше обратиться к программисту, т.к. это вряд ли делается только с помощью 301 редиректа в .htaccess. Здесь нужно написать функцию, которая будет вычленять именно бота Google и его уже перенаправлять.

андрей егоров
5 лет назад
Ответить  Romanus

Задача сделать переезд сайта как можно быстрее. 301 для google но не для yandex, host для yandex (в yandex сайт в топе, а в google только начал заходить в топ 10). На данный момент использую такую схему: rel=canonical для google, host для yandex. Если оставить 301 и для yandex, то… Подробнее »

Romanus
5 лет назад
Ответить  андрей егоров

Вам зеркала склеить нужно?
Я бы host прописал нужны, дождался смены главного зеркала в Яндексе, а потом повесил 301 редирект. Страницы в Яндексе не выпадают.

Олег
5 лет назад

Добрый день, у меня такая проблема, когда пишу вот так:
Redirect 301 /old.html http://site.ru/newt.html

у меня получается вот такой УРЛ и не работает, почему так?

http://site.ru/new.html?q=old.html

Рушан
5 лет назад

Не подскажете как сделать перенаправление с videonablyudenie.html?lang=ru и videonablyudenie.html/ на videonablyudenie.html

Алексей
5 лет назад

Ничего не получается. Romanus можете подсказать, в чем ошибка? Джумла 3, вид файла htaccess.txt а не .htaccess Где то читал, что необходимо файл переименовать на .htaccess Пытаюсь настроить редирект на www. с http: и редирект с http://www.site.ru/index.php на http://www.site.ru/ Содержимое файла было (начиная с Options +FollowSymlinks ) Options +FollowSymlinks Options… Подробнее »

Александр
6 лет назад

Добрый день, подскажите, как с такого адреса http://www.site.ru/index (открывается пустая страница) сделать постоянный редирект на галвную страницу сайта http://www.site.ru
Правило, RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
Помогает только делать редирект с страницы http://www.site.ru/index.php на главную.

79
0
Поговорим на эту тему? Пиши комментарииx