301 редирект в SEO
Редирект 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]
С помощью таких не хитрых махинаций мы избавимся от дублей страниц, тем самым улучшив нашу внутреннюю оптимизацию и соответственно качество сайта.
Если у вас появились какие-то вопросы, пишите в комментарии — будем разбираться 🙂
Рекомендую к прочтению

Принесу пользу вашему проекту
Заявка на бриф
Заполните несколько полей
Добрый день. У меня такая проблема, может кто подскажет. Сайт зарегистрирован в зоне РФ. Стр. сайт.рф/витрина/ дублирует сайт.рф Как правильно сделать перенаправление? Если можно с примером. Сейчас это выглядит так) Но не проходит… 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… Подробнее »
Редирект с 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]
Я могу ошибаться, но я никогда не видел в индекса страниц аля site.ru/index.php/
Расширение является конечной точкой в урле
Доброго времени суток!
Ставлю
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. Куда копать?
Вы так и пишите?
2 RewriteEngine On и т.д.?
Да, так и пишу. Редиректы срабатывают и страница становится доступна только по одному адресу, но отваливаются коментарии, т.е что было добавлено то остаётся, но добавить коментарий либо поставить лайк(дизлайк) невозможно. Ну а если эти кпавила закоментить, то коменты работают как часы, но плодится куча дублей.
Значит плагины конфликтуют с вашей идеей, об этом писал Евгений в комментариях к видео на YouTube.
Я не настолько силен в написании кода, потому на этапе, когда появляются такого рода проблемы и я не знаю как их решить — иду к программистам 🙁
Canonical вообще никак не передает вес. Прямо совсем.
Если нужна передача веса — только 301 редирект.
Google переклеивает за 3-7 дней весь сайт практически. Чтобы далеко не ходит — я на своем блоге перебивал много страниц, т.к. структура менялась. Google за 3 дня всё переклеил, Яндекс дней за 5.
Если не обращать внимание на то что при 301 сайт выпадет из поиска yandex, для yandex что лучшее использовать (значение имеет скорость востановления позиций) host или 301?
Повторю еще раз — НИЧЕГО, кроме 301 редиректа не склеивает страницы сайта.
Директива Host -это указание главного зеркала для Яндекса.
Это не взаимозаменяемые вещи.
Соответственно и то и то необходимо.
Скажите , а для чего иметь несколько доменов , которые перенаправляются редиректом 301 на один ресурс? Ведь Алиасы (зеркала) в этом случае не участвуют в поиске и не индексируются вообще?! Допустим у меня site.ru . В поиске google.ru он на первых местах в поисковом запросе , в google.com.ua на последних!… Подробнее »
Намного практичнее сделать несколько сайтов. Каждый под свой регион. Больше гибкости, меньше проблем.
Не совсем ясно как это сделать с тех. точки зрения? Ведь контент одинаковый будет , только ссылки будут разные на фото и в шаблоне. Таким образом один из доменов может попасть под фильтр поисковиков! Об этом пишут в сети.. Притом добавлять новости придётся на несколько сайтов. Может я не правильно… Подробнее »
Сделайте разный контент, добавляйте разный контент, сделайте разные сайты 🙂
Для справки — контент, это намного шире, чем просто текст. От этого и нужно исходить. Текст — это только часть контента на странице.
В моём случае это практически невозможно.. у меня тысячи новостей. кино сайт с субтитрами для изучения английского . Переделать это всё нужен год! Ограничусь пока склейкой домена .ru с доменом .tv а там дальше будет видно. Спасибо Большое!
Здравствуйте! Сделал 301 редирект средствами php-фреймворка(Yii), т.к. через htaccess нереально делать в моем случае. Уже дней 10 в гугл-вебмастер ошибки(одинаковые title и мета-описание) так-же висят, хотя пишет, что обновление было пару дней назад. Проверял разными редирект-чекерами — пишет что редирект правильно настроен.
Может ли гугл-бот привередничать в моем случае?
Вы зеркало меняли или просто какие-то страницы склеивали?
Старые страницы отдают 301 ответ?
Склеивал страницы, что-то вроде mysite.ru/article/1 = mysite.ru/article/1?name=название статьи. Проверял страницы через разные редирект чекеры и гугл вебмастер, ответ 301 дает. Возможно из базы будут очень долго удаляться..
Посмотрите, возможно старая версия страницы еще сидит в кэше поисковика. Если да — то ничего страшного, просто дождитесь обновления.
Здравствуйте, подскажите как сделать 301 ридерект только для googlebot
А для чего вам нужно редиректить бота гугла?
Для такой задачи лучше обратиться к программисту, т.к. это вряд ли делается только с помощью 301 редиректа в .htaccess. Здесь нужно написать функцию, которая будет вычленять именно бота Google и его уже перенаправлять.
Задача сделать переезд сайта как можно быстрее. 301 для google но не для yandex, host для yandex (в yandex сайт в топе, а в google только начал заходить в топ 10). На данный момент использую такую схему: rel=canonical для google, host для yandex. Если оставить 301 и для yandex, то… Подробнее »
Вам зеркала склеить нужно?
Я бы host прописал нужны, дождался смены главного зеркала в Яндексе, а потом повесил 301 редирект. Страницы в Яндексе не выпадают.
Добрый день, у меня такая проблема, когда пишу вот так:
Redirect 301 /old.html http://site.ru/newt.html
у меня получается вот такой УРЛ и не работает, почему так?
http://site.ru/new.html?q=old.html
Олег,
RewriteEngine On — есть?
Попробуй такой вариант: RewriteRule ^(.*)old.html$ http://sait.ru/new-url.html [R=301,L]
Не подскажете как сделать перенаправление с videonablyudenie.html?lang=ru и videonablyudenie.html/ на videonablyudenie.html
Ничего не получается. Romanus можете подсказать, в чем ошибка? Джумла 3, вид файла htaccess.txt а не .htaccess Где то читал, что необходимо файл переименовать на .htaccess Пытаюсь настроить редирект на www. с http: и редирект с http://www.site.ru/index.php на http://www.site.ru/ Содержимое файла было (начиная с Options +FollowSymlinks ) Options +FollowSymlinks Options… Подробнее »
Алексей, htaccess.txt переименуйте в .htaccess
Добрый день, подскажите, как с такого адреса 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 на главную.
Александр, используйте обычный постраничный 301 редирект типа:
Redirect 301 /index http://new-site.ru/