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

301 Редирект в .htaccess: Настройка переадресации для сайта

Что такое redirect 301

301-й редирект (ответ сервера HTTP 301 или Moved Permanently) – это способ постоянного перенаправления поисковых запросов и пользователей с одного URL-адреса на другой. Постоянный редирект или среди SEO-оптимизаторов часто называется «склейка», т.к. по сути вы подклеиваете одну страницу к другой.

Как работает переадресация 301

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

Основные преимущества заключаются в следующем:

  1. Постоянность: 301 редирект действует бессрочно и рекомендуется поисковыми системами при переезде страниц (так называемая склейка).
  2. Сохранение ранжирования: при использовании 301 редиректа, поисковые системы сохраняют результаты страницы на новом URL-адресе.
  3. Удобство использования: настройка 301 редиректа происходит на уровне сервера, что позволяет легко и быстро настроить перенаправление.

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

  • 302 редирект: это временный редирект, который сообщает поисковым системам и браузерам, что страница временно перемещена на другой URL-адрес. При использовании этого типа редиректа поисковые системы продолжают индексировать и ранжировать исходную страницу, а не новую.
  • 307 редирект: аналогичен 302-му, за исключением того, что при его использовании метод HTTP-запроса не меняется, то есть сохраняется оригинальный метод HTTP-запроса, в отличие от 302 редиректа, который переключается на GET-запрос.
  • Meta-редиректы: это редиректы, которые настраиваются внутри кода HTML-страницы с помощью тега <meta> и атрибута «http-equiv». Они используются для перенаправления поисковых роботов и браузеров с одной страницы на другую.

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

Для чего нужно использование 301 редиректов?

Наиболее часто он используется для следующих целей:

  1. Перемещение сайта на новый домен: позволяет сохранить поисковые позиции и результаты страниц на новом домене.
  2. При переходе с http на https и других изменений главного зеркала: чтобы склеить копии страниц.
  3. Устранение дублей: позволяет сделать так, чтобы все дубликаты ссылались на одну корректную страничку.
  4. Изменение URL-адресов на сайте: при изменении адресов страниц на сайте, 301 редирект позволяет сохранить трафик на страницах и избежать ошибок 404.
  5. Устранение битых ссылок: при обращении к несуществующей странице сайта, может перенаправлять на главную страницу сайта или наиболее подходящую страницу.
  6. Мобильная версия: перенаправление пользователей мобильных устройств на соответствующую версию сайта.
  7. ГЕО: перенаправление пользователей в зависимости от их геолокации на нужный поддомен или папку.

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

Подготовка htaccess файла

Файл под названием .htaccess находится в главной категории вашего сайта. Это дополнительный конфигурационный файл web-сервера Apache, в котором мы будем указывать правила склейки. Открываем файл блокнотом (рекомендую notepad++ или sublime, чтобы не было проблем с кодировкой). Если у вас их нет — рекомендую обзавестись, а заодно посмотрите мои инструменты для работы.

Роман Вердыш
SEO-Expert, стаж более 10 лет
Файл .htaccess может не отображаться - включите отображение скрытых файлов. И в корне вашего сайта вы его увидите через FTP-клиент.
Как выглядит и где лежит .htaccess

Наглядно, где лежит у меня .htaccess

Что представляет собой код в htaccess?

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

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

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

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

Строка RewriteCond представляет собой критерий активации RewriteRule. Когда условие достигнуто, происходит редирект (можно использовать регулярные выражения для установки правил).

Спецсимволы, которые используются в правилах и их значения:

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

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

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

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

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

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

  • %{REQUEST_URI} — часть URL-адреса, исключая доменное имя и GET-параметры , например, для страницы, которую вы сейчас читаете: /301-redirekt-v-seo;
  • %{HTTP_HOST} — ваше доменное имя, например в моем случае: romanus.ru
  • %{QUERY_STRING} —  строка, содержащая набор GET-параметров, то есть раздел URL-адреса после символа вопроса (и до символа якоря решетки, если он присутствует).
  • %{REQUEST_FILENAME} —  полный адрес в файловой системе сервера до файла или скрипта, соответствующего данному запросу. Если на сайте мы имеем путь romanus.ru/files/test.php, то в файловой системе нашего сервера это может быть /var/www/LOGIN/data/www/romanus.ru/files/test.php.  Например, вы хотели избавиться от параметров id=3993 в адресе https://site.ru/page?id=3993, задали соответствующие правила, и в итоге получили URL https://site.ru/usr/local/www/site.ru/www/page. Т.е. да, вы параметры-то убрали, но проблема в том, что вы не указали директиву RewriteBase / после RewriteEngine On в начале файла, которая задает специфический, базовый URL для преобразований в пределах каталога (потому и получили адрес из файловой системы).

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

Примеры настройки 301 редиректа в htacccess

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

Чтобы настроить его вам нужно прописать в вашем файле htaccess следующий код, который будет перенаправлять посетителей с адреса 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 или файлов с расширение .htm и других, то просто в коде выше замените .php на .html или другое нужное для вас расширение.

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

RewriteCond %{HTTP_HOST} ^romanus\.ru$ [NC]
RewriteRule ^$ https://romanus.ru/301-redirekt-v-seo/ [R=301,L]

Если нужен редирект всех внутренних страниц на главную, то:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule !(^$|.*\.(css|jpg|gif)) / [R=301,L]

Настройка 301 редирект с нескольких сайтов на один

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

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

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

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

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

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

301 редирект с домена без 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]

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

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

Убираем множественные слэши из URL

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

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

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

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

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

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

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

301 редирект не целой категории, а конкретной страницы

Если требуется сделать переадресацию только для адреса http://www.site.ru/category/, но при этом чтобы страница http://www.site.ru/category/page открывалась по старому адресу:

RewriteRule ^category/$ http://www.site.ru/new-category/ [R=301,L]

301 редирект со страницы на страницу

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

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

или вариант через RewriteRule:

RewriteRule ^old-post.html /new-post.html [R=301,L]

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

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

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

RewriteCond %{QUERY_STRING} sort=articles
RewriteRule .* http://site.ru/page.php? [R=301,L]

Пример с битрикса и страницы http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=123:

301-редирект со страницы без заданного параметра на главную

Перенаправит http://www.site.ru/?abc на главную страницу сайта:

RewriteCond %{QUERY_STRING} ^abc$ [NC]
RewriteRule ^$ /? [R=301,L]

Убираем расширения через 301 редирект

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

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

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

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

301 редирект со всех страниц на главную другого домена

Стандартный вариант редиректа для подклейки дропов (если нужна не главная — замените URL):

RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/ [L,R=301]

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

Был адрес seo.site.ru, но вы решили сменить этот адрес на site.ru/seo. Тогда нужно добавить такой редирект в htaccess, который находится в корневой папке поддомена seo.site.ru:

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

301 редирект с HTTP на HTTPs

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

Редирект всех файлов в папке на заданный файл

RewriteRule ^dir(.*)$ /new-file.php [L,R=301]

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

Этот пункт я выделил отдельно, т.к. он больше связан с переносом на другой домен. Тут есть важный момент, это не упустить директиву по правке robots.txt — она указана на 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]

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

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

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) [NC]
RewriteRule (.*) http://mobile.site.ru/ [L,R=301]

Если требуется сделать редирект для всех поисковых роботов (представлен список их USER_AGENT)

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) [NC]
RewriteRule (.*) http://no-search.site.ru/ [L,R=301]

Можно прописать 301 редирект только для конкретного IP-адреса

В данном примере происходит редирект только в том случае, если вы зашли с IP 192.168.1.133. Иногда бывает крайне полезен для назойливых ботов.

RewriteCond %{REMOTE_ADDR} 192.168.1.133
RewriteRule ^(.*)$ https://site.ru [R=301,L]

Настроить 301 редирект только главной страницы, но не остальных страниц сайта

RewriteRule ^$ https://site.ru [R=301,L]

Как настроить переадресацию на конструкторах и CMS

Да, вы можете сделать всё сильно проще, если будете использовать различные плагины и готовые решения. Минус данного способа в гибкости. Например, если завтра что-то произойдет с плагином — вы потеряете ВСЕ свои переадресации. Но нельзя отметать этот способ.

Как настроить переадресацию в WordPress

У WP есть как специализированные решения (вроде Redirection, 301 Redirects, Quick Page/Post Redirect и т.д.), так и комплексные плагины и именно про них я и расскажу:

  • Rank Math SEO (скорее всего есть и в аналогах аля All in One SEO или Yoast SEO) — какой-то из этих плагинов 100% будет у вас стоять, т.к. он обязателен для оптимизации сайта на Вордпресс. В нем есть вкладка «Переадресации» и там всё интуитивно понятно, указываете исходный URL, тип соответствия (точное, частично, регулярное выражение, нужно ли игнорировать регистр и т.д.), указываете конечный URL и тип перенаправления (301, 302 или 307). Всё остальное сделает плагин.

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

Битрикс

Аналогично в Bitrix есть модули, которые позволяют сделать переадресацию:

  1. Редиректы для SEO — модуль поддерживает перенаправления по маске URL и редирект с 404 ошибки (т.е. у вас вместо 404 страницы будет идти переадресация на нужную страницу).
  2. Редиректы, поиск битых ссылок (ошибок 404).

Tilda

Настройку всех перенаправлений для сайтов, созданных на Тильде, можно осуществить в разделе «Настройки сайта — SEO — Редиректы страниц (Code 301)». Процесс прост: вы выбираете необходимый вам редирект, вносите старые и новые URL, после чего сохраняете внесенные изменения.

Единственное, что этот функционал доступен только на тарифах Personal и Business. Так же на Тильде редиректы функционируют исключительно в пределах одного домена и лишь со страниц, которые больше не существуют.

Modx

Профильных расширений несколько, но я рекомендую использовать именно Redirector, т.к. с ним у меня никогда не было проблем.

Ошибки, которые могут возникнуть при настройке 301 редиректа

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

  1. Неправильный URL-адрес назначения: если вы указали неправильный URL-адрес для перенаправления, то пользователи будут перенаправлены на неверную страницу. Чтобы избежать этой ошибки, необходимо тщательно проверять URL-адрес назначения перед созданием редиректа.
  2. Циклический редирект: это происходит, когда две страницы перенаправляют друг на друга, образуя цикл. Это может привести к ошибкам и снижению ранжирования в поисковых системах. Чтобы избежать циклического редиректа, необходимо тщательно планировать свои редиректы и проверять их наличие внимательно.
  3. Несовместимость HTTP и HTTPS: если ваш сайт использует HTTPS, а редирект настроен на HTTP, пользователи могут столкнуться с ошибкой безопасности и не смогут получить доступ к вашему сайту. Чтобы избежать этой ошибки, убедитесь, что все ваши редиректы настроены на HTTPS.
  4. Неправильная настройка сервера: если сервер не настроен, редиректы могут не работать. Чтобы избежать этой ошибки, рекомендуется обратиться к специалистам, которые могут помочь с настройкой сервера.
  5. Непонимание своих действий: если вы не знаете Apache у вас или Nginx, не понимаете устройство файла .htaccess — делайте копию работающего файла. А лучше обратитесь к специалистам.

Как проверить, что редирект 301 работает правильно

Существует несколько способов проверить, что редирект 301 работает правильно:

  1. Используйте онлайн-инструменты, такие как Bertal (если нужно разово) или PixelTools (если нужно массово + доп. параметры), чтобы проверить, что редирект перенаправляет на правильный URL-адрес и не имеет ошибок (смотрите ответ сервера чтобы был именно 301 и на какой URL перенаправляет).
  2. Проверьте индексацию новой страницы в поисковых системах. Если страница индексируется и отображаться в поисковых результатах (старый URL при этом исчезает из выдачи), это может указывать на то, что редирект работает правильно.
  3. Проверьте файл журнала сервера, чтобы убедиться, что редиректы не вызывают ошибок у пользователей и ботов или проблем в работе сервера.

Популярные вопросы и ответы на них

В чем разница между 301 и 302 Редиректом?
Где прописывается редирект?
Как быть с доменами в зоне РФ?
Автор статьи
Роман Вердыш (Romanus)
SEO-Expert, стаж более 10 лет
Написано статей
43