Генератор 301-редиректов — код, который не сломает сайт
Опишите, куда должны вести старые адреса, — и получите готовый код редиректа для .htaccess, Nginx или PHP. Подходят четыре сценария: отдельные страницы, целый раздел по маске, склейка www и HTTPS, переезд на новый домен. Перед копированием инструмент найдёт циклы, цепочки и конфликты правил.
Формат и домен
Общие настройки для всего кода ниже — сначала выберите сервер, на котором работает сайт.
Код для Nginx правится не в .htaccess, а в конфиге виртуального хоста. После изменений выполните nginx -t для проверки синтаксиса и только потом systemctl reload nginx — перезагрузка с ошибкой в конфиге остановит весь веб-сервер.
Код вставляется в самое начало входного файла (обычно index.php) — до вывода любого текста и даже до пробела перед <?php. Заголовки нельзя отправить после того, как что-то уже выведено. Это полноценный редирект с корректным кодом ответа, но работает он только для запросов, которые доходят до PHP: статические файлы сервер отдаёт мимо него.
А. Постраничные редиректы страница → страница
Самый частый случай: удалили страницу, переименовали адрес, объединили две страницы в одну. Указывайте только путь — домен добавляется автоматически.
Если вставите ссылку целиком (с https:// и доменом) — при сборке кода будет использован только путь, домен и протокол игнорируются.Б. Массовый редирект по маске каталог → каталог
Когда переименовали целый раздел и страниц слишком много, чтобы перечислять вручную. Всё из старого префикса пути ведёт в новый с тем же окончанием.
В. Склейка зеркал www · https
Правило уровня всего сайта, не отдельной страницы — приводит все варианты адреса к одному каноническому.
Включайте только если на сайте уже установлен и работает SSL-сертификат. Если сертификата нет или он просрочен, редирект на HTTPS сделает сайт полностью недоступным — браузер заблокирует переход с ошибкой безопасности.
Г. Переезд на новый домен домен → домен
Весь сайт целиком переезжает на другой домен с сохранением структуры путей. Указанный выше «Домен сайта» считается старым доменом, с которого происходит переезд.
Готовый код
Вставьте в файл .htaccess в корне сайта. Обновляется автоматически.
Чек-лист перед публикацией
- Сделайте резервную копию текущего файла конфигурации перед заменой
- Для Nginx обязательно проверьте синтаксис командой
nginx -tперед перезагрузкой - Проверьте 2-3 конкретных адреса после публикации через любой сервис проверки HTTP-заголовков
- Не публикуйте изменения в момент пиковой нагрузки на сайт
- Убедитесь, что новые адреса из правил действительно открываются и отдают код 200
Код формируется локально в браузере — ничего не отправляется на сервер Neorank.
Важно: сначала сделайте резервную копию файла с правилами: ошибка может отключить сайт. Проверьте цепочки и циклы редиректов на тестовом адресе.
Как правильно настроить 301-редиректы
Разбираем разницу между Apache и Nginx, типичные ошибки и то, что реально происходит с SEO-весом при переадресации.
Apache (.htaccess)
Самый распространённый вариант на виртуальном хостинге в рунете. Правила читаются из файла .htaccess в корне сайта — изменения применяются сразу, без перезапуска сервера.
- Директивы
RewriteRuleиз модуляmod_rewrite - Правила выполняются построчно сверху вниз
- Ошибка в синтаксисе часто даёт мгновенную 500-ю ошибку на всём сайте
- Доступен почти на любом shared-хостинге без доступа к серверу
Nginx
Используется на VPS и выделенных серверах. Правила прописываются в конфиге виртуального хоста, а не в файле внутри сайта — нужен доступ к серверу.
- Директивы
return 301внутри блоковserverиlocation - Ошибка в конфиге не применяется — сервер откажется перезагружаться, если проверить через
nginx -t - Склейка зеркал и переезд домена требуют отдельных
server-блоков, а не строк внутри существующего - Изменения применяются только после
reload, не мгновенно
Цепочки редиректов — почему это вредно
Цепочка возникает, когда страница A ведёт на B, а B — на C, вместо того чтобы сразу A вести на C. Каждое дополнительное перенаправление — это лишний сетевой запрос, который замедляет загрузку страницы и постепенно теряет часть передаваемого SEO-веса.
Хуже всего — циклическая цепочка, когда одна из страниц в цепочке в итоге снова ведёт на A. Такой цикл делает страницу недоступной: браузер прерывает загрузку с ошибкой «слишком много перенаправлений».
Что такое склейка зеркал и зачем она нужна
Без явного указания поисковик может воспринимать site.ru, www.site.ru, http://site.ru как четыре разных сайта с одинаковым содержимым — это дубли контента, которые размывают ранжирование между версиями.
Склейка зеркал через 301 редирект явно указывает поисковику единственную каноническую версию — весь вес и позиции консолидируются на ней, а остальные версии перестают индексироваться отдельно.
301 против 302 — путать нельзя
301 сообщает поисковику: «страница переехала навсегда, обновите свой индекс». Он передаёт накопленный вес и постепенно вытесняет старый адрес из выдачи новым. Это правильный код для любого постоянного изменения структуры сайта.
302 означает «временно» — поисковик продолжает считать старый адрес основным и периодически его перепроверяет, вес новой странице не передаётся. Использование 302 там, где нужен 301, — одна из самых частых технических ошибок при миграции сайтов.
Как долго нужно хранить редиректы
Официальной рекомендации по срокам нет, но общепринятая практика — держать 301 редиректы минимум год после изменения структуры. За это время поисковики успевают полностью переиндексировать новые адреса, а часть пользователей всё ещё переходит по старым ссылкам из закладок и внешних сайтов.
Для страниц с большим количеством внешних ссылок (у которых высокий трафик из соцсетей или упоминаний на сторонних ресурсах) редиректы разумно не удалять вообще.
Виды редиректов: 301, 302, 307, 308 и 410
Код ответа решает, передастся ли накопленный вес и что станет со старым адресом в индексе. Выбор кода — не формальность.
Редирект — это ответ сервера, который говорит браузеру и поисковому роботу: запрошенного адреса здесь больше нет, иди по другому. Технически это код состояния из группы 3xx и заголовок Location с новым адресом. Разница между кодами не косметическая: от неё зависит, сохранит ли страница позиции после переезда.
| Код | Смысл | Когда использовать |
|---|---|---|
301 |
Переехало навсегда | Основной вариант для SEO. Вес старой страницы переходит на новую, старый адрес со временем уходит из индекса. Смена адресов, склейка зеркал, переезд домена. |
302 |
Найдено, временно | Страница вернётся: акция, техническое обслуживание, A/B-тест. Вес не передаётся, старый адрес остаётся в индексе. |
307 |
Временно, метод сохраняется | То же, что 302, но браузер обязан сохранить метод запроса. Нужен там, где переадресуется не только просмотр страницы, — формы, API. |
308 |
Навсегда, метод сохраняется | Строгий аналог 301 для запросов, отличных от GET. Для обычных страниц разницы с 301 нет, и 301 понимают все клиенты без исключений. |
410 |
Удалено насовсем | Не переадресация. Товар снят с продажи, раздел закрыт, замены нет. Поисковые системы убирают такую страницу из индекса быстрее, чем при обычной 404. |
Главное правило выбора
Редирект должен вести на страницу с тем же смыслом. Переадресация всех удалённых товаров на главную выглядит аккуратно в отчётах, но для поисковой системы это признак нерелевантности: такие переходы обрабатываются как обычная ошибка «страница не найдена», и вес не передаётся. Если замены нет — честнее отдать 410 и не делать вид, что страница куда-то переехала.
Второе правило — не путать редирект с канонической ссылкой. Редирект физически уводит посетителя на другой адрес, тег rel="canonical" лишь подсказывает поисковой системе, какую из похожих страниц считать главной. Если обе версии должны оставаться доступными людям, нужен canonical, а не 301.
Где настраивать редиректы: .htaccess, Nginx, PHP и CMS
Способ зависит от того, к чему у вас есть доступ. Результат для поисковой системы одинаков — важно лишь, чтобы код ответа был настоящим.
| Способ | Когда подходит | На что обратить внимание |
|---|---|---|
Apache .htaccess |
Виртуальный хостинг, доступ к файлам сайта есть, к конфигу сервера — нет. | Файл читается при каждом запросе. Ошибка в синтаксисе даёт ошибку 500 на весь сайт, поэтому резервная копия обязательна. |
| Nginx | VPS и выделенные серверы, есть доступ к конфигурации виртуального хоста. | Правила применяются только после перезагрузки. Всегда проверяйте конфиг командой nginx -t: перезагрузка с ошибкой останавливает весь веб-сервер. |
| PHP | Доступа к конфигу нет вовсе, либо правила нужно строить по данным из базы. | Заголовки отправляются до вывода — код идёт в самое начало файла. Работает только для запросов, которые доходят до PHP. |
| Плагин или модуль CMS | WordPress, Битрикс, другие движки с готовым разделом переадресаций. | Удобно для нескольких правил. На сотнях правил каждый запрос идёт через движок, и это заметно медленнее серверного варианта. |
Редиректы в популярных системах
WordPress живёт на Apache: правила добавляются в .htaccess, но выше или ниже служебного блока между комментариями # BEGIN WordPress и # END WordPress — движок перезаписывает его содержимое при обновлении настроек ссылок. Альтернатива — плагин переадресаций, который хранит правила в базе.
1С-Битрикс тоже работает через .htaccess в корне сайта; в редакциях с модулем поисковой оптимизации есть и раздел для переадресаций в административной панели. Осторожнее с масками: у Битрикса собственные правила ЧПУ, и слишком широкая маска может перехватить служебные адреса.
Тильда и другие конструкторы не дают доступа ни к .htaccess, ни к конфигу сервера — переадресации настраиваются штатными средствами платформы в настройках сайта. Код из этого конструктора там применить не получится, и это ограничение платформы, а не инструмента.
Мета-обновление страницы и переход через JavaScript редиректами не являются. Тег <meta http-equiv="refresh"> и window.location в скрипте отдают обычный код 200: для поисковой системы страница осталась на месте, а её содержимое подменилось. Вес при этом не передаётся, а посетитель успевает увидеть промежуточную страницу. Поэтому таких форматов в конструкторе нет — не потому, что их сложно собрать, а потому, что для переезда они не годятся.
Как проверить редирект и найти ошибку
Настроить — половина дела. Вторая половина: убедиться, что переход происходит за один шаг и с нужным кодом.
Проверьте код ответа
Откройте инструменты разработчика на вкладке «Сеть» и перейдите по старому адресу. В списке запросов должен быть один переход с выбранным кодом, а не 200 и не 302 вместо 301.
Посмотрите на цепочку
Если запросов в списке больше двух, вы получили цепочку: http → https → www → страница. Каждый лишний шаг замедляет обход и расходует краулинговый бюджет. Правильно — один переход сразу на конечный адрес.
Убедитесь, что цель отдаёт 200
Частая ошибка — переадресация на страницу, которой уже нет. Проверьте несколько конечных адресов из своих правил: они должны открываться обычным кодом 200, а не уводить дальше.
Сообщите поисковым системам
При переезде домена подтвердите оба сайта в Яндекс Вебмастере и Google Search Console и пересоберите карту сайта с новыми адресами. В Вебмастере Яндекса есть отдельный инструмент для переезда сайта.
Ошибки, из-за которых редирект не работает
Циклический редирект
Браузер показывает «слишком много переадресаций» или ERR_TOO_MANY_REDIRECTS. Причина всегда одна: адрес прямо или через несколько шагов ведёт сам на себя.
Классика — правило «убрать слэш» вместе с правилом «добавить слэш», или переезд на домен, который совпадает со старым. Конструктор находит такие циклы и не добавляет их в код.
Общее правило выше конкретного
Маска на весь раздел, поставленная выше постраничного правила, перехватывает адрес первой — и конкретное правило уже не срабатывает. Внешне похоже на «редирект не работает», хотя строка на месте.
Поэтому в готовом коде конкретные адреса всегда идут раньше масок, а не наоборот.
Адрес с параметрами
И RewriteRule в Apache, и location в Nginx сопоставляются только с путём: строка запроса после знака вопроса в них не попадает. Правило для /page?id=5 не сработает никогда.
Для таких адресов нужна отдельная проверка %{QUERY_STRING} в Apache или $args в Nginx. Конструктор предупреждает, если находит вопросительный знак в пути.
Кеш браузера и сервера
Код 301 постоянный, и браузер запоминает его надолго. После правки правил кажется, что ничего не изменилось, хотя на сервере уже всё верно.
Проверяйте в режиме инкогнито. По этой же причине новые правила иногда сначала отдают с кодом 302 и переключают на 301, убедившись, что цепочка верная.
Коды состояния приведены по спецификации HTTP (RFC 9110): 301 и 308 — постоянные, 302 и 307 — временные, при этом 307 и 308 запрещают клиенту менять метод запроса; 410 сообщает, что ресурс удалён окончательно. Позиция поисковых систем о переадресации на нерелевантную страницу — по документации Google о переадресациях сайта и справке Яндекс Вебмастера о переезде сайта. Синтаксис приведён для Apache 2.4 (mod_rewrite) и Nginx.
Частые вопросы о редиректах
Разница между кодами, потеря позиций, цепочки, циклы и настройка в разных системах.
301 означает «переехало навсегда»: поисковые системы переносят накопленный вес старой страницы на новую и со временем убирают старый адрес из индекса. Это основной вариант при смене адресов, склейке зеркал и переезде домена.
302 означает «временно»: вес не передаётся, старый адрес остаётся в индексе, робот продолжает его периодически проверять. Подходит для акций, техобслуживания и тестов — то есть когда страница действительно вернётся.
Ошибочно поставленный 302 вместо 301 — частая причина, по которой после переезда позиции не восстанавливаются: для поисковой системы переезда как бы и не было.
Они повторяют смысл 302 и 301, но с одним строгим условием: клиент обязан сохранить метод запроса. При 301 и 302 браузер исторически имеет право превратить POST в GET, и данные формы теряются.
Для обычных страниц разницы нет — там всегда GET, и 301 понимают вообще все клиенты. Коды 307 и 308 нужны, когда переадресуются формы, API или загрузка файлов.
Когда страница удалена окончательно и замены ей нет: товар снят с производства, услуга закрыта, раздел расформирован. Код 410 прямо сообщает «ресурс удалён насовсем», и поисковые системы убирают такую страницу из индекса быстрее, чем при обычной 404.
Соблазн увести все удалённые страницы редиректом на главную велик, но это не помогает: переадресация на нерелевантную страницу обрабатывается как обычная ошибка «не найдено», вес не передаётся, а посетитель оказывается не там, где ожидал.
В конструкторе для этого не нужно выбирать код. Добавьте адрес в список постраничных правил и в самой строке выберите «удалена насовсем» — поле «куда» станет неактивным, потому что вести такой адрес некуда. Так же можно закрыть целый раздел: в маске выберите «удалён насовсем». В одном списке спокойно уживаются и переехавшие адреса, и удалённые.
При корректном 301 на страницу с тем же смыслом вес передаётся почти полностью, но временная просадка на несколько недель — обычное дело: поисковой системе нужно обойти новые адреса и переиндексировать их.
Настоящая потеря происходит в двух случаях: редирект ведёт на нерелевантную страницу (например, всё на главную) или выстроена длинная цепочка переходов. Чем короче путь от старого адреса к новому, тем меньше потери.
Ускорить процесс помогает свежая карта сайта с новыми адресами и обновлённые внутренние ссылки: оставлять их ведущими на старые адреса не стоит, даже если редирект работает.
Это когда адрес ведёт на второй, второй — на третий, и только потом открывается страница. Типичная цепочка после небрежной настройки: http://www.site.ru/old → https://www.site.ru/old → https://site.ru/old → https://site.ru/new.
Каждый лишний шаг — это дополнительный запрос: медленнее для посетителя и расточительно для обхода. Правильно настраивать переход сразу на конечный адрес. Инструмент находит такие цепочки в ваших правилах и предлагает их сократить.
Это циклический редирект: адрес прямо или через несколько шагов ведёт сам на себя, и браузер прерывает бесконечный круг сообщением ERR_TOO_MANY_REDIRECTS.
Самые частые причины — одновременно включённые правила «добавлять слэш» и «убирать слэш», переезд на домен, совпадающий со старым, или редирект на HTTPS на сервере, который сам возвращает запрос обратно на HTTP.
Конструктор строит граф переходов по вашим правилам, находит циклы и не добавляет их в готовый код — вместо этого показывает, какие именно строки образуют круг.
Это приведение всех вариантов адреса сайта — с www и без, по http и https — к одному каноническому через постоянный редирект. Без склейки поисковая система может считать версии разными сайтами и делить между ними вес.
Какой вариант выбрать главным — с www или без — значения не имеет, важно только выбрать один и не менять. Склейку настраивают один раз на уровне всего сайта, а не для отдельных страниц.
Если вы одновременно переезжаете на новый домен, склейку на старом лучше выключить: правило переезда и так покрывает оба варианта, а вместе они дадут лишний шаг в цепочке.
Выберите формат PHP: код вставляется в самое начало входного файла (обычно index.php) и отдаёт настоящий заголовок с нужным кодом ответа. Это полноценный редирект, ничем не хуже серверного.
Два условия. Первое: код должен идти до вывода любого текста — даже пробел перед <?php сломает отправку заголовков. Второе: правила сработают только для запросов, которые доходят до PHP; статические файлы сервер отдаёт мимо него.
На конструкторах вроде Тильды не сработает и это — там переадресации настраиваются штатными средствами платформы.
Технически да, но для переезда это плохой выбор, и в конструкторе таких форматов нет намеренно. Тег <meta http-equiv="refresh"> и переход через window.location отдают обычный код 200: для поисковой системы страница осталась на месте, просто её содержимое подменилось.
Последствия: вес на новый адрес не передаётся, старый остаётся в индексе, а посетитель успевает увидеть промежуточную страницу. Настоящий редирект — это ответ сервера, а не разметка страницы.
Потому что и RewriteRule в Apache, и location в Nginx сопоставляются только с путём адреса. Всё, что идёт после знака вопроса, в правило не попадает, поэтому строка вида /page?id=5 не совпадёт никогда.
Для таких адресов нужна отдельная проверка строки запроса: RewriteCond %{QUERY_STRING} в Apache или переменная $args в Nginx. Инструмент предупреждает, если находит вопросительный знак в исходном пути.
Откройте инструменты разработчика на вкладке «Сеть» и перейдите по старому адресу. Проверяйте три вещи: код ответа совпадает с задуманным, переход ровно один, а конечная страница отдаёт 200.
Проверяйте в режиме инкогнито: код 301 постоянный и надолго запоминается браузером, поэтому после правки правил легко увидеть старое поведение вместо нового.
Если правил много, после публикации стоит пройтись по списку выборочно — особенно по адресам, которые попадают под маски: именно там чаще всего обнаруживаются неожиданные совпадения.
Нет. Код собирается локально в браузере на JavaScript: домены, адреса страниц и правила никуда не передаются и нигде не сохраняются.
Файл для Apache скачивается как htaccess.txt — браузеры не сохраняют файлы с точкой в начале имени. Переименуйте его в .htaccess уже на сервере.