С помощью 301 редиректа в SEO вы можете настроить склейку старых страниц с новыми или перенести свой сайт на другой домен, убрать многие дубли с сайта и многое другое. Крайне полезная вещь — поэтому нужно научиться делать его правильно!
- Что такое redirect 301
- Для чего нужно использование 301 редиректов?
- Подготовка htaccess файла
- Примеры настройки 301 редиректа в htacccess
- Как настроить переадресацию на конструкторах и CMS
- Ошибки, которые могут возникнуть при настройке 301 редиректа
- Как проверить, что редирект 301 работает правильно
- Популярные вопросы и ответы на них
Что такое redirect 301
301-й редирект (ответ сервера HTTP 301 или Moved Permanently) – это способ постоянного перенаправления поисковых запросов и пользователей с одного URL-адреса на другой. Постоянный редирект или среди SEO-оптимизаторов часто называется «склейка», т.к. по сути вы подклеиваете одну страницу к другой.
Как работает переадресация 301
301 редирект является наиболее постоянным и рекомендуемым способом перенаправления поисковых запросов и пользователей с одного URL-адреса на другой. Он работает следующим образом: при запросе браузером страницы, сервер возвращает HTTP-статус 301 и указывает новый URL-адрес страницы в заголовке ответа. После этого браузер автоматически перенаправляет пользователя на новый адрес.
Основные преимущества заключаются в следующем:
- Постоянность: 301 редирект действует бессрочно и рекомендуется поисковыми системами при переезде страниц (так называемая склейка).
- Сохранение ранжирования: при использовании 301 редиректа, поисковые системы сохраняют результаты страницы на новом URL-адресе.
- Удобство использования: настройка 301 редиректа происходит на уровне сервера, что позволяет легко и быстро настроить перенаправление.
Другие виды редиректов, могут быть использованы для временного перенаправления, например:
- 302 редирект: это временный редирект, который сообщает поисковым системам и браузерам, что страница временно перемещена на другой URL-адрес. При использовании этого типа редиректа поисковые системы продолжают индексировать и ранжировать исходную страницу, а не новую.
- 307 редирект: аналогичен 302-му, за исключением того, что при его использовании метод HTTP-запроса не меняется, то есть сохраняется оригинальный метод HTTP-запроса, в отличие от 302 редиректа, который переключается на GET-запрос.
- Meta-редиректы: это редиректы, которые настраиваются внутри кода HTML-страницы с помощью тега <meta> и атрибута «http-equiv». Они используются для перенаправления поисковых роботов и браузеров с одной страницы на другую.
Хотя эти редиректы могут быть использованы для перенаправления поисковых запросов и пользователей, рекомендуется использовать 301 редирект в качестве основного способа перенаправления.
Для чего нужно использование 301 редиректов?
Наиболее часто он используется для следующих целей:
- Перемещение сайта на новый домен: позволяет сохранить поисковые позиции и результаты страниц на новом домене.
- При переходе с http на https и других изменений главного зеркала: чтобы склеить копии страниц.
- Устранение дублей: позволяет сделать так, чтобы все дубликаты ссылались на одну корректную страничку.
- Изменение URL-адресов на сайте: при изменении адресов страниц на сайте, 301 редирект позволяет сохранить трафик на страницах и избежать ошибок 404.
- Устранение битых ссылок: при обращении к несуществующей странице сайта, может перенаправлять на главную страницу сайта или наиболее подходящую страницу.
- Мобильная версия: перенаправление пользователей мобильных устройств на соответствующую версию сайта.
- ГЕО: перенаправление пользователей в зависимости от их геолокации на нужный поддомен или папку.
В целом, использование 301 редиректа позволяет сохранить поисковые позиции, ссылочную массу, трафик и результаты страниц на сайте при изменениях в его структуре и содержании.
Подготовка htaccess файла
Файл под названием .htaccess находится в главной категории вашего сайта. Это дополнительный конфигурационный файл web-сервера Apache, в котором мы будем указывать правила склейки. Открываем файл блокнотом (рекомендую notepad++ или sublime, чтобы не было проблем с кодировкой). Если у вас их нет — рекомендую обзавестись, а заодно посмотрите мои инструменты для работы.
Что представляет собой код в 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 есть модули, которые позволяют сделать переадресацию:
- Редиректы для SEO — модуль поддерживает перенаправления по маске URL и редирект с 404 ошибки (т.е. у вас вместо 404 страницы будет идти переадресация на нужную страницу).
- Редиректы, поиск битых ссылок (ошибок 404).
Tilda
Настройку всех перенаправлений для сайтов, созданных на Тильде, можно осуществить в разделе «Настройки сайта — SEO — Редиректы страниц (Code 301)». Процесс прост: вы выбираете необходимый вам редирект, вносите старые и новые URL, после чего сохраняете внесенные изменения.
Единственное, что этот функционал доступен только на тарифах Personal и Business. Так же на Тильде редиректы функционируют исключительно в пределах одного домена и лишь со страниц, которые больше не существуют.
Modx
Профильных расширений несколько, но я рекомендую использовать именно Redirector, т.к. с ним у меня никогда не было проблем.
Ошибки, которые могут возникнуть при настройке 301 редиректа
При использовании редиректа 301 могут возникнуть следующие ошибки:
- Неправильный URL-адрес назначения: если вы указали неправильный URL-адрес для перенаправления, то пользователи будут перенаправлены на неверную страницу. Чтобы избежать этой ошибки, необходимо тщательно проверять URL-адрес назначения перед созданием редиректа.
- Циклический редирект: это происходит, когда две страницы перенаправляют друг на друга, образуя цикл. Это может привести к ошибкам и снижению ранжирования в поисковых системах. Чтобы избежать циклического редиректа, необходимо тщательно планировать свои редиректы и проверять их наличие внимательно.
- Несовместимость HTTP и HTTPS: если ваш сайт использует HTTPS, а редирект настроен на HTTP, пользователи могут столкнуться с ошибкой безопасности и не смогут получить доступ к вашему сайту. Чтобы избежать этой ошибки, убедитесь, что все ваши редиректы настроены на HTTPS.
- Неправильная настройка сервера: если сервер не настроен, редиректы могут не работать. Чтобы избежать этой ошибки, рекомендуется обратиться к специалистам, которые могут помочь с настройкой сервера.
- Непонимание своих действий: если вы не знаете Apache у вас или Nginx, не понимаете устройство файла .htaccess — делайте копию работающего файла. А лучше обратитесь к специалистам.
Как проверить, что редирект 301 работает правильно
Существует несколько способов проверить, что редирект 301 работает правильно:
- Используйте онлайн-инструменты, такие как Bertal (если нужно разово) или PixelTools (если нужно массово + доп. параметры), чтобы проверить, что редирект перенаправляет на правильный URL-адрес и не имеет ошибок (смотрите ответ сервера чтобы был именно 301 и на какой URL перенаправляет).
- Проверьте индексацию новой страницы в поисковых системах. Если страница индексируется и отображаться в поисковых результатах (старый URL при этом исчезает из выдачи), это может указывать на то, что редирект работает правильно.
- Проверьте файл журнала сервера, чтобы убедиться, что редиректы не вызывают ошибок у пользователей и ботов или проблем в работе сервера.