301 редиректЧто такое 301 редирект?
Код 301 - это статус HTTP-ответа с официальным названием Moved Permanently («перемещено навсегда»). Когда браузер или поисковый робот запрашивает страницу, сервер возвращает ответ 301 и в заголовке Location указывает новый адрес. Браузер тут же уходит на новый URL - пользователь видит уже конечную страницу и не замечает промежуточного шага.
| Код | Название | Когда применять |
|---|---|---|
| 301 | Moved Permanently | Страница переехала навсегда |
| 302 | Found (временный) | Временная переадресация, позиции не передаются |
| 307 | Temporary Redirect | Временный, сохраняет метод HTTP-запроса |
| 410 | Gone | Страница удалена без замены |
Для SEO важно выбирать именно 301 редирект htaccess: он передаёт поисковый вес (link equity) со старого URL на новый. При 302 поисковики продолжают индексировать старую страницу и не переносят ссылочную массу.
Для поисковых роботов важно именно наличие кода 301 - без него робот не поймёт, что страница переехала, и продолжит возвращать в выдачу старый адрес. В отличие от тега rel="canonical", редирект физически переводит пользователя на новый URL, а не просто подсказывает поисковику предпочтительный вариант.
В каких случаях используется редирект через .htaccess?
.htaccess работает на серверах Apache и применяется в большинстве случаев при хостинге на Linux. Вот типичные ситуации, когда нужен именно этот способ:
- Смена домена - перенос сайта с одного доменного имени на другое с сохранением позиций.
- Переход с HTTP на HTTPS - после установки SSL-сертификата весь трафик нужно перенаправить на защищённую версию.
- Склейка зеркал - например, www.site.ru и site.ru должны открываться как один адрес.
- Изменение структуры URL - при редизайне или переезде на новую CMS URL-адреса страниц меняются.
- Удаление дублей - страницы с /index.html, /index.php или двойным слешем перенаправляются на канонический URL.
- Ограничение по IP - доступ к определённым разделам открывается только для нужных адресов.
Если сайт работает на Nginx, .htaccess не применяется - правила редиректа прописываются в конфигурационном файле сервера. На Apache файл .htaccess обрабатывается при каждом запросе к директории, где он лежит.
На VPS с доступом к основному конфигу Apache правила лучше прописывать там, а не в .htaccess: основной конфиг грузится один раз при старте, .htaccess - при каждом запросе, что ощутимо на нагруженных сайтах.
Подготовка файла .htaccess
Где находится .htaccess?
Искать файл нужно в той же папке, что содержит index.php или index.html. Типичные пути: public_html/ на cPanel-хостинге, www/ или httpdocs/ у других провайдеров. Поскольку имя файла начинается с точки, файловые менеджеры и FTP-клиенты по умолчанию его прячут - включите отображение скрытых объектов.
Нет файла - создайте. Часть CMS не генерирует .htaccess при установке, поэтому его отсутствие в папке в порядке вещей.
Как создать или отредактировать .htaccess?
Три рабочих варианта:
- Файловый менеджер панели управления - войдите в cPanel, ISPmanager или Plesk, откройте файловый менеджер, перейдите в корень сайта. Если .htaccess существует - откройте его на редактирование. Если нет - создайте новый файл и назовите его строго .htaccess (точка в начале обязательна). Редактор встроен в браузер, сохранить можно там же.
- FTP/SFTP - подключитесь через FileZilla. Включите отображение скрытых файлов через меню Server → Force showing hidden files, иначе .htaccess не появится в списке.
- SSH - откройте файл прямо на сервере: nano /var/www/html/.htaccess.
Резервное копирование
Скопируйте файл до того, как начнёте что-то менять. Синтаксическая ошибка в .htaccess роняет весь сайт с кодом 500 - причём страдают все страницы, а не только та, которую вы правили. Чтобы подстраховаться, скачайте копию по FTP или переименуйте старый файл в .htaccess.bak прямо на сервере.
Удобная привычка - версионировать изменения: добавляйте комментарий с датой перед каждым блоком новых правил. Это упрощает откат:
Советы по безопасности
- Запретите прямой доступ к файлу из браузера - добавьте в .htaccess правило:
- Не храните в .htaccess пароли и секретные ключи.
- Ограничьте права доступа к файлу: chmod 644 .htaccess.
- После любых изменений проверяйте сайт - ошибка в одной строке блокирует весь веб-сервер.
Пример базовых настроек
Минимальный шаблон .htaccess для сайта на Apache:
Options -Indexes запрещает листинг директорий. ServerSignature Off скрывает версию сервера от посторонних.
Синтаксис и директивы в .htaccess
Apache поддерживает два независимых механизма перенаправления: встроенную директиву Redirect и модуль mod_rewrite. Первый работает из коробки, второй даёт гибкость через регулярные выражения и условия. Разберём каждый.
Redirect 301
Директива Redirect входит в стандартный модуль mod_alias и не требует дополнительной активации. Запись минимальна:
Три параметра по порядку:
- 301 - код ответа, который браузер получит в заголовке HTTP;
- /old-page.html - относительный путь, который Apache ищет во входящем запросе;
- https://site.ru/new-page.html - новый абсолютный адрес, куда пойдёт браузер.
Слово permanent работает как синоним кода 301 - можете использовать любой вариант. Директива удобна для небольшого числа конкретных переадресаций, но не поддерживает шаблонное сопоставление.
Mod_Rewrite
Модуль mod_rewrite - основной инструмент для гибкого перенаправления. Он позволяет работать с шаблонами, регулярными выражениями и условиями, которые недоступны простой директиве Redirect. Перед любыми правилами RewriteRule нужно включить движок:
На большинстве хостингов модуль активирован по умолчанию. Если правила не работают - проверьте командой apache2ctl -M | grep rewrite и при необходимости попросите поддержку его включить.
Если правила применяются к поддиректории, добавьте базовый путь:
RewriteRule
RewriteRule - строка, в которой Apache проверяет входящий URL по шаблону и при совпадении возвращает другой адрес. Структура записи:
RewriteRule шаблон замена [флаги]
- Шаблон - регулярное выражение, с которым сравнивается путь запроса (без домена и строки параметров).
- Замена - путь или полный URL, на который нужно отправить запрос.
- флаги - дополнительные инструкции в квадратных скобках, определяют тип ответа и дальнейшую обработку.
Основные флаги:
| Флаг | Что делает |
|---|---|
| R=301 | Возвращает HTTP-ответ 301 и перенаправляет браузер на новый адрес |
| L | Завершает обработку текущего набора правил (Last) |
| NC | Сопоставление без учёта строчных и прописных букв |
| QSA | Сохраняет исходные GET-параметры при переходе на новый URL |
| NE | Передаёт спецсимволы (%, &, =) как есть, без URL-кодирования |
Пример: перенаправить все запросы к /catalog/* на /shop/*:
RewriteCond
RewriteCond стоит перед RewriteRule и блокирует его выполнение, если условие не выполнено. Несколько строк RewriteCond подряд объединяются по «И» - правило сработает, только когда все условия верны.
RewriteCond тестируемая_строка условие [флаги]
Часто используемые переменные сервера:
- %{HTTP_HOST} - хост из заголовка запроса (то, что пользователь набрал в адресной строке);
- %{HTTPS} - принимает значение on при HTTPS-соединении, иначе пусто;
- %{REQUEST_URI} - путь после домена, включая слеш;
- %{SERVER_PORT} - порт, на котором принят запрос (80 для HTTP, 443 для HTTPS);
- %{REMOTE_ADDR} - IP-адрес клиента.
Управляющие флаги RewriteCond:
- [NC] - регистр букв в сравнении не учитывается;
- [OR] - соединяет следующую строку RewriteCond логическим «или»; без этого флага все условия по умолчанию объединяются через «и».
Как сделать редирект через .htaccess?
Ниже собраны двенадцать готовых блоков кода с объяснениями. Каждый фрагмент вставляется в файл .htaccess - туда, где уже стоит строка RewriteEngine On, или сразу после неё, если движок включается впервые.
Комментарий эксперта Ingate
Антон Кривцов, технический SEO-специалист Ingate: «Перед добавлением правил рекомендую сначала протестировать их на тестовой копии сайта или в онлайн-отладчике htaccess - например, htaccess.madewithlove.com. Ошибочное правило, применённое на боевом сервере, может создать циклическую переадресацию и положить сайт за несколько секунд. Особенно осторожно работайте с .* в шаблоне RewriteRule - это выражение захватывает все URL подряд.»
301 редирект Битрикс
Сайты на 1С-Битрикс часто требуют особой настройки, потому что Битрикс генерирует собственный .htaccess при установке. Правила редиректа добавляйте до блока # BEGIN Bitrix:
Если Битрикс уже включает RewriteEngine, не дублируйте строку - это вызовет ошибку.
301 редирект с одного домена на другой
Перенести трафик с old-site.ru на new-site.ru, сохранив все пути:
Группа (www\.)? в RewriteCond делает «www.» необязательным, поэтому одно правило закрывает оба варианта старого домена. Обратная ссылка $1 переносит путь из старого URL дословно: посетитель /catalog/noutbuki/ попадёт на https://new-site.ru/catalog/noutbuki/.
301 редирект с одной страницы на другую
Простейший случай - переадресация одного конкретного URL:
Или через mod_rewrite, если нужны условия:
Знак ? после слеша делает завершающий слеш необязательным - переадресация сработает и для /old-page, и для /old-page/.
301 редирект с домена с WWW на домен без WWW
Зеркало www.site.ru направляется на основной домен site.ru:
Выберите главное зеркало раз и навсегда - и больше не меняйте. Поисковики запоминают предпочтительный вариант, и каждая смена откатывает этот процесс назад.
301 редирект с домена без WWW на домен с WWW
Если предпочитаете адрес с www, перенаправьте site.ru → www.site.ru:
301 редирект для отдельного IP
Отправить пользователей с определённого IP на другую страницу - удобно при техническом обслуживании или при разграничении доступа:
Чтобы охватить целую подсеть, укоротите маску в условии: ^192\.168\.1\. совпадёт с любым адресом вида 192.168.1.x.
301 редирект с https:// на http://
Обратный сценарий - снять SSL и вернуть трафик на http (применяется редко, но встречается при смене хостинга):
301 редирект с http:// на https:// для Linux
После установки SSL-сертификата добавьте в .htaccess это правило, чтобы HTTP-трафик автоматически шёл на HTTPS:
Оператор !=on в условии означает «HTTPS не активен». Флаг [L] завершает обработку после срабатывания правила - без него Apache проверил бы все последующие строки файла, что могло бы создать цикл.
301 редирект с главной страницы, кроме остальных страниц сайта
Перенаправить только корень сайта (/) на другой URL, не трогая остальные страницы:
Шаблон ^$ соответствует только пустому пути - то есть только главной странице.
301 редирект со всех страниц сайта, кроме главной
Перенаправить весь сайт на новый домен, но оставить главную страницу:
Условие !^/$ исключает главную страницу из переадресации.
301 редирект с GET-параметрами
Иногда URL формируется через строку параметров: /page?id=5. Переписать его в чистый путь /page/5/ можно так:
Знак вопроса в конце замены указывает Apache очистить строку параметров после перехода. Обратите внимание на %1 - это ссылка на первую захваченную группу из RewriteCond, тогда как $1 ссылается на группу из RewriteRule.
301 редирект с массовой склейкой
Когда нужно перенаправить сотни страниц, поштучные правила неудобны. Используйте один шаблон для списка:
Файл redirect_list.txt - это лист соответствий в формате:
Такой подход применяется при масштабном редизайне или переезде на новую CMS, когда список насчитывает десятки и сотни строк.
«При массовых редиректах важно после запуска проверить корректность каждого правила через краулер - Screaming Frog SEO Spider или аналог. Инструмент пройдёт по всем URL из старого sitemap и покажет, куда ведёт каждый редирект. Это помогает поймать опечатки и случайные циклы до того, как их увидят поисковые роботы. В нашей практике именно пропущенный символ в RewriteCond становился причиной того, что часть страниц не попадала в индекс месяцами.»
Основные ошибки при настройке 301 редиректа через .htaccess
- Redirect Loop. Браузер раз за разом прыгает между двумя адресами и после нескольких десятков итераций показывает «ERR_TOO_MANY_REDIRECTS». Корень проблемы - правило без ограничивающего условия: оно срабатывает даже для уже перенаправленного запроса. При переходе http→https спасает явная проверка RewriteCond %{HTTPS} !=on перед правилом.
- Неэкранированная точка в домене. В регулярных выражениях . - это «любой символ», а не буквальная точка. Если написать site.ru вместо site\.ru, правило случайно захватит siteXru или site2ru. Проверяйте регулярные выражения в отладчике (regex101.com) до публикации на рабочем сервере.
- Двойной RewriteEngine On. Если эта строка встречается в файле дважды - Apache вернёт ошибку 500. При работе с Битрикс проверяйте: его установочный .htaccess уже включает модуль, добавлять строку повторно не нужно.
- Общее правило перехватывает конкретное. Apache обходит строки сверху вниз и останавливается на первом совпадении (флаг [L]). Если поставить широкий шаблон (.*) выше специфичного, он "съест" весь трафик раньше, чем дело дойдёт до нужного правила. Конкретные случаи всегда должны стоять выше общих.
- Цепочки редиректов. Страница A → B → C - каждое звено увеличивает время ответа и, по мнению ряда SEO-специалистов, незначительно снижает передачу веса. Оптимальный вариант: A → конечный URL напрямую. Проверить цепочки удобно в Screaming Frog: он показывает полный путь каждого редиректа.
- Отсутствие резервной копии. Ошибка в .htaccess положит весь сайт, а не только отдельную страницу. Всегда сохраняйте рабочую копию перед редактированием.
- Не учтены редиректами GET-параметры. Правило ^page/?$ не захватит page?ref=abc. Если нужно перенаправлять и такие URL - добавьте соответствующий RewriteCond с %{QUERY_STRING}.
- Ошибка 403 вместо редиректа. Иногда хостинг запрещает использование RewriteMap или некоторых директив в .htaccess через директиву AllowOverride. Если правило не работает - уточните у хостинга, какие директивы разрешены.
Что даёт 301 редирект для SEO?
Правильная настройка перенаправления влияет на три ключевых показателя:
- Передача ссылочного веса. В 2016 году Google подтвердил: 301-редирект передаёт PageRank без каких-либо значимых потерь. На практике это означает, что все ссылки с других сайтов, которые указывали на старый адрес, после переезда работают в полную силу для нового.
- Устранение дублей. Яндекс и Google воспринимают site.ru/page/ и www.site.ru/page/ как два разных документа. Если зеркала не объединены редиректом, ссылочный вес дробится между ними - ни один адрес не набирает полной силы.
- Минимальная просадка при переезде. Смена домена или URL-структуры без редиректов - почти гарантированная потеря трафика на месяцы. С правильно выстроенными перенаправлениями поисковые роботы обновляют индекс за несколько недель, и позиции в выдаче за это время существенно не проседают.
- Корректный краулинговый бюджет. Без перенаправления роботы тратят ресурсы на обход мёртвых страниц. После настройки редиректов краулер сразу уходит на актуальный URL.
Практическая рекомендация: после настройки всех редиректов добавьте старые URL в Google Search Console через инструмент «Проверка URL» и запросите повторный обход. Это ускорит обновление индекса с нескольких недель до нескольких дней. В Яндекс Вебмастере аналогичную роль выполняет инструмент «Переезд сайта» - он позволяет явно указать новый домен, что дополнительно ускоряет переиндексацию при смене домена.
SEO-оптимизация со специалистами Ingate
Настройка редиректа через htaccess - один из технических пунктов большого SEO-аудита. Самостоятельно разобраться с кодом реально, но при масштабных изменениях - переезде домена, редизайне, смене CMS - ошибки стоят дорого: просадка трафика на месяцы и потеря позиций в поисковой выдаче.
Специалисты Ingate проводят полный технический аудит, выявляют битые редиректы и цепочки перенаправлений, настраивают правила .htaccess и контролируют индексацию после изменений. Обратитесь за консультацией - поможем сохранить трафик при любых структурных изменениях сайта.
Вопрос-ответ
Как проверить правильность настройки редиректов в .htaccess?
Несколько способов:
- Браузер - откройте DevTools (F12), вкладка Network. Перейдите по старому URL и проверьте код ответа: должен быть 301, а следующий запрос - 200.
- Online-сервисы - httpstatus.io, redirect-checker.org - введите URL и получите цепочку переадресаций с кодами.
- Curl в командной строке:
curl -I https://site.ru/old-page/. В ответе ищите HTTP/1.1 301 и заголовок Location:. - Screaming Frog - массовая проверка всех URL сайта, строит карту редиректов.
После любых изменений в .htaccess добавьте URL в Google Search Console для повторного обхода - это ускорит обновление индекса.
Код 301 кэшируется браузером, поэтому при тестировании открывайте страницу в режиме инкогнито или очищайте кэш - иначе изменения не будут заметны сразу.
Как настроить редирект для нескольких страниц одновременно?
Три подхода:
- Несколько правил Redirect - просто перечислите строки одна за другой. Директива Redirect обрабатывает каждое правило независимо. Этот способ удобен при небольшом количестве переадресаций - до 20–30 правил.
- RewriteMap - для сотен URL создайте текстовый файл-карту и подключите его через директиву RewriteMap (пример в разделе «301 редирект с массовой склейкой»). Обратите внимание: RewriteMap работает только в основном конфиге Apache, а не в .htaccess - если хостинг не даёт доступа к основному конфигу, попросите поддержку добавить директиву.
- Шаблон RewriteRule - если у старых и новых URL одинаковая структура, один шаблон заменит десятки правил. Например, ^products/(.*)$ → /catalog/$1. Это самый производительный вариант, потому что Apache проверяет одно правило вместо сотни.
Какие ещё коды перенаправлений можно использовать в .htaccess?
Помимо 301, в .htaccess доступны:
- 302 Found - временная переадресация. Используйте при A/B-тестировании или техническом обслуживании. Поисковики не переносят вес.
- 307 Temporary Redirect - аналог 302, но строго сохраняет метод HTTP-запроса (POST остаётся POST).
- 308 Permanent Redirect - как 301, но сохраняет метод запроса. Поддерживается не всеми серверами.
- 410 Gone - страница удалена навсегда, заменяющего адреса нет. Помогает быстрее исключить мёртвые страницы из индекса.
Выбор кода зависит от цели. Для переезда домена или постоянного изменения URL - всегда 301. Для временных акций, A/B-тестирования или технических работ - 302 или 307. Код 410 полезен для удалённых страниц, которых больше не будет: он сигнализирует поисковику, что страницу можно сразу исключить из индекса, не ожидая повторных проверок.
В htaccess редирект с кодом 302 выглядит так:
Замените 302 на нужный код. Для 301 можно писать Redirect permanent - это синоним.
Источники:



