ГлавнаяБлогТехническое SEO

Как сделать 301 редирект: nginx, Apache, WordPress

10 июля 202612 мин чтенияТехническое SEO

301 редирект — это способ навсегда перенаправить старый адрес страницы на новый и не потерять при этом позиции в поиске. Меняете структуру URL, переезжаете на новый домен, склеиваете www и https — везде нужен именно 301. Разберу по шагам: чем он отличается от 302, как настроить в nginx, Apache, WordPress и Битрикс, и какие ошибки роняют трафик после переезда.

Кратко: что внутри

301 — постоянный редирект: переносит вес и позиции старого URL на новый, старый адрес выпадает из индекса. 302 — временный, вес не передаёт. Для nginx — директива return 301, для Apache — Redirect 301 или RewriteRule в .htaccess, для WordPress — плагин Redirection. Готовые правила, массовые редиректы и разбор ошибок — ниже.

Что такое 301 редирект

301 редирект — это команда серверу: страница переехала навсегда, отправляй всех на новый адрес. Когда браузер или поисковый робот запрашивает старый URL, сервер отвечает кодом 301 Moved Permanently и заголовком Location с новым адресом. Пользователь автоматически попадает на новую страницу, а поисковик понимает, что старого URL больше нет.

Ключевое слово здесь — «навсегда». Для поисковой системы 301 значит: старую страницу можно убрать из индекса, а всё, что она накопила (позиции, ссылочный вес, историю), переписать на новый URL. Именно поэтому 301 — рабочая лошадка технического SEO при любом переносе.

Проверить, какой код отдаёт страница, можно нашим инструментом проверки ответа сервера или командой в терминале:

curl -I https://site.ru/old-page/

В ответе должна быть строка HTTP/1.1 301 Moved Permanently и Location: с новым адресом. Если видите 200 OK — редиректа нет, если 302 — стоит временный вместо постоянного.

301 или 302: когда какой

Разница между 301 и 302 — в одном слове: постоянно или временно. От этого зависит, передаст поисковик вес или нет.

  • 301 (постоянный). Старый адрес больше не нужен. Поисковик переносит позиции и вес на новый URL, старый выкидывает из индекса. Это то, что нужно в 95% случаев.
  • 302 (временный). Страница переехала ненадолго и скоро вернётся. Поисковик держит в индексе старый адрес и вес на новый не передаёт.

Когда нужен 301: смена структуры URL, переезд на новый домен, переход на https, склейка www и без-www, удаление дубля с параметрами, объединение двух страниц в одну, замена старой статьи новой.

Когда оправдан 302: страница на техобслуживании и вернётся, временная посадочная под акцию, A/B-тест, географическое перенаправление по языку. Если сомневаетесь — почти всегда правильный ответ 301. Ошибочный 302 на месте переезда — классическая причина, по которой новый URL не набирает позиции.

Как выглядит ответ сервера при 301 — код и адрес назначения:
HTTP/1.1 301 Moved Permanently   # постоянный переезд
Location: https://site.ru/new-page/   # куда ведём
# вес и позиции старого URL уйдут на новый
Код 301 плюс заголовок Location — это и есть весь механизм. Всё остальное делает браузер и поисковый робот.

Зачем 301 нужен для SEO

Без редиректа при переезде вы теряете всё, что страница зарабатывала месяцами. Старый URL отдаёт 404, поисковик выкидывает его из индекса вместе с позициями, а новый начинает с нуля. 301 решает эту проблему — переносит накопленное на новый адрес.

Основные SEO-задачи, где без 301 не обойтись:

  • Склейка версий сайта. Сайт должен открываться по одному адресу. Все варианты — http://, www., со слешем и без — редиректят на одну каноническую версию, чтобы не плодить дубли.
  • Переход на https. После установки SSL весь http://-трафик перенаправляется на https:// одним правилом.
  • Смена URL страницы. Поменяли ЧПУ или структуру каталога — старый адрес ведёт на новый, позиции сохраняются.
  • Переезд на новый домен. Каждая страница старого домена редиректит на такую же страницу нового — страница в страницу, а не всё скопом на главную.
  • Устранение дублей. Иногда дубль правильнее склеить редиректом, а не тегом. Где граница между 301 и canonical для дублей — разбирал отдельно.

Важный нюанс: вес по 301 передаётся не мгновенно. Яндексу и Google нужно время, чтобы переобойти старые URL и переписать данные на новые — обычно от пары недель до пары месяцев. Ускорить переобход помогает подача новых адресов в панель вебмастера и работа над индексацией.

Как сделать 301 редирект в nginx

В nginx редиректы задаются в конфиге сервера — обычно это файл в /etc/nginx/sites-available/ или внутри блока server { ... }. Основной инструмент — директива return, она быстрее и понятнее, чем rewrite.

Редирект одной страницы:

location = /old-page/ {
    return 301 /new-page/;
}

Знак = означает точное совпадение адреса — правило сработает только на /old-page/ и ни на чём другом.

Редирект всего сайта на новый домен с сохранением пути и параметров:

server {
    server_name old-site.ru www.old-site.ru;
    return 301 https://new-site.ru$request_uri;
}

Переменная $request_uri подставляет полный путь с query-строкой — страница /catalog/shoes/?id=5 уедет на https://new-site.ru/catalog/shoes/?id=5, а не на главную.

Склейка www и https в одном блоке:

server {
    listen 80;
    server_name site.ru www.site.ru;
    return 301 https://site.ru$request_uri;
}

Редирект по маске через rewrite — когда нужен шаблон, а не точный адрес. Например, перенос всего старого раздела /blog/ в /articles/:

rewrite ^/blog/(.*)$ /articles/$1 permanent;

Флаг permanent в rewrite — это и есть код 301. Скобка (.*) захватывает остаток пути, а $1 подставляет его в новый адрес.

После правки конфига проверьте синтаксис и примените изменения:

nginx -t
nginx -s reload

Команда nginx -t покажет ошибки до перезагрузки — не пропускайте её, иначе одна опечатка положит весь сайт. Официальный синтаксис директив — в документации nginx по модулю rewrite.

Как сделать 301 редирект в Apache и .htaccess

На Apache и большинстве виртуальных хостингов редиректы прописывают в файле .htaccess в корне сайта. Менять его можно прямо через файловый менеджер хостинга, изменения применяются сразу, без перезапуска.

Простой редирект через mod_alias:

Redirect 301 /old-page.html https://site.ru/new-page/

Слева — старый путь от корня сайта, справа — полный новый URL. Годится для точечных редиректов отдельных страниц.

Гибкие правила через mod_rewrite. Модуль включают один раз в начале файла:

RewriteEngine On

Редирект одной страницы с точным совпадением:

RewriteRule ^old-page/?$ https://site.ru/new-page/ [R=301,L]

Флаг [R=301,L] — это ядро правила: R=301 отдаёт постоянный редирект, L останавливает обработку остальных правил.

Склейка www → без www:

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

Переход на https:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Редирект всего старого раздела в новый с сохранением подпути:

RewriteRule ^catalog/(.*)$ /shop/$1 [R=301,L]

Строка RewriteCond задаёт условие, при котором сработает следующий за ней RewriteRule. Флаг [NC] делает проверку без учёта регистра. Файл .htaccess работает только на Apache — на nginx его не читают, там всё в конфиге сервера.

Какой редирект вам нужен?
Не каждый переезд — это 301. Сначала решите, что вообще случилось со страницей.

Как сделать 301 редирект в WordPress

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

1. Плагин Redirection — самый ходовой вариант. Установите его, откройте «Инструменты → Redirection», нажмите «Add New» и укажите пару: старый URL в поле «Source URL», новый — в «Target URL», тип оставьте 301. Плагин ведёт лог переходов и сам ловит битые ссылки, из которых потом удобно делать редиректы.

2. SEO-плагины. Yoast SEO Premium и Rank Math умеют делать редиректы во встроенном модуле — если он уже стоит на сайте, отдельный плагин не нужен.

3. Через functions.php — когда плагины ставить нельзя. Правило добавляют в файл темы через хук:

add_action('template_redirect', function () {
    if ($_SERVER['REQUEST_URI'] === '/old-page/') {
        wp_redirect('https://site.ru/new-page/', 301);
        exit;
    }
});

Второй аргумент wp_redirect — код 301, а exit обязателен, иначе WordPress продолжит рендерить страницу. Правьте functions.php дочерней темы, чтобы правило не слетело при обновлении.

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

Редирект в Битрикс и на Тильде

Битрикс. В 1С-Битрикс есть встроенный инструмент: «Настройки → Сайты → SEO → Редиректы» (в разных редакциях путь чуть отличается). Добавляете пару «откуда → куда» с кодом 301. Битрикс работает на Apache или nginx, поэтому массовые правила проще прописать напрямую в .htaccess в корне — синтаксис такой же, как в разделе выше. Для точечных редиректов удобнее панель, для сотен URL — файл.

Tilda и конструкторы. Здесь доступа к серверу нет, поэтому возможности ограничены платформой. В Tilda редиректы настраиваются в личном кабинете: «Настройки сайта → Редиректы» — они работают на уровне самой платформы и отдают корректный 301. На большинстве других конструкторов серверного редиректа нет вообще, доступен только переход через мета-тег refresh или JavaScript. Такой редирект хуже передаёт вес и медленнее обрабатывается поисковиком.

Вывод простой: если проект на конструкторе без нормальных редиректов, а SEO важно — это аргумент за переезд на хостинг с доступом к nginx или Apache. При самом переезде на новый домен помогает инструкция Яндекса про смену адреса сайта в Вебмастере.

Массовые редиректы и редирект директории

Когда переезжает не одна страница, а весь сайт или большой раздел, руками правила не соберёшь. Есть три подхода.

Редирект директории целиком. Если структура внутри раздела не меняется — переносится вся папка с сохранением подпути. В nginx:

rewrite ^/old-section/(.*)$ /new-section/$1 permanent;

В .htaccess:

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

Редирект с сохранением query-параметров. Чтобы не потерять UTM-метки и параметры фильтров, в nginx подставляют $request_uri или $args, в Apache mod_rewrite по умолчанию тянет query дальше, а флаг [QSA] добавляет её к новому адресу:

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

Список «старый → новый» на сотни адресов. Когда URL меняются непредсказуемо и правилом по маске их не описать, нужна таблица соответствий: каждому старому адресу — свой новый. Собирать её руками долго и легко ошибиться в синтаксисе.

Здесь выручает генератор 301-редиректов — вставляете два столбца, старые и новые URL, а на выходе получаете готовый блок правил сразу под nginx и под .htaccess. Остаётся скопировать его в конфиг или в файл — синтаксис и флаги проставятся правильно, без ручной возни. Для переезда на сотни страниц это экономит часы и снимает риск опечатки, из-за которой половина редиректов не сработает.

Частые ошибки при настройке редиректов

  1. Цепочки редиректов. Старый URL ведёт на второй, тот на третий, третий на финальный. На каждом шаге теряется вес и время робота. Всегда ставьте редирект сразу на конечный адрес — A → D, а не A → B → C → D.
  2. 302 вместо 301. При настоящем переезде временный редирект не передаёт вес, и новый URL не набирает позиции. Проверяйте код ответа через curl -I или сервис заголовков — там должно быть ровно 301.
  3. Циклы редиректов. Правило ведёт страницу саму на себя или два правила отправляют друг к другу. Браузер выдаёт «слишком много перенаправлений», страница не открывается. Частый источник — конфликт правил https и www в одном файле.
  4. Всё на главную. При переезде домена ленивый вариант — редиректить все старые URL на главную нового сайта. Поисковик считает это мягкой 404 и вес не передаёт. Нужно страница в страницу: старый /catalog/shoes/ → новый /catalog/shoes/.
  5. Потеря параметров и пути. Редирект без $request_uri в nginx или без сохранения query в Apache отбрасывает всё после домена. Пользователь с ссылки на конкретный товар попадает на главную.
  6. Редирект вместо canonical. Не всё лечится редиректом. Дубли с параметрами, сортировки и фильтры, которые ещё нужны пользователю, склеивают через rel=canonical, а не режут 301.

После настройки прогоните сайт краулером (Screaming Frog, Netpeak Spider) — он покажет все цепочки, циклы и редиректы с неверным кодом. Один прогон на старте экономит недели восстановления позиций.

Главное

Если коротко

301 — постоянный редирект: переносит вес и позиции старого URL на новый. Нужен при смене URL, переезде домена, переходе на https, склейке www. 302 — только для по-настоящему временных переездов.

nginx — return 301 https://site.ru$request_uri; в блоке server, для масок rewrite ... permanent. Apache — Redirect 301 или RewriteRule ... [R=301,L] в .htaccess. WordPress — плагин Redirection. Тильда — редиректы в кабинете, полноценный серверный 301 есть только на хостинге.

Главные ошибки: цепочки, случайный 302, редирект всего на главную и потеря параметров. Много адресов сразу — соберите правила через генератор 301-редиректов. Сложный переезд с большим сайтом лучше доверить SEO-специалисту, чтобы не потерять трафик.

Частые вопросы

Чем 301 редирект отличается от 302?

301 — постоянное перенаправление: старый адрес больше не нужен, поисковик переносит его вес и позиции на новый URL и со временем выкидывает старый из индекса. 302 — временное: страница переехала ненадолго, поисковик держит в индексе старый адрес и вес не передаёт. Для смены URL, переезда на новый домен, склейки www и https всегда нужен 301. 302 — только когда переезд правда временный, например на время акции или технических работ.

Как сделать 301 редирект в nginx?

Для одного адреса добавьте в конфиг сервера строку location = /old-url { return 301 /new-url; } и перезагрузите nginx командой nginx -s reload. Для целого сайта или домена используйте return 301 https://new-site.ru$request_uri; внутри блока server — так сохранится путь и параметры. Директива return быстрее, чем rewrite, и её стоит выбирать по умолчанию.

Как сделать 301 редирект в .htaccess на Apache?

В файл .htaccess в корне сайта добавьте строку Redirect 301 /old-page.html https://site.ru/new-page.html для одного адреса. Для правил с условиями и масок используйте модуль mod_rewrite: RewriteEngine On, затем RewriteRule со шаблоном и флагом [R=301,L]. Файл .htaccess работает только на Apache, изменения применяются сразу без перезапуска сервера.

Как настроить редирект в WordPress без доступа к серверу?

Самый простой способ — плагин Redirection: устанавливаете, в разделе «Инструменты → Redirection» добавляете пару «старый URL → новый URL», тип 301. Плагин ведёт лог и ловит битые ссылки. Если плагины ставить нельзя, редирект прописывают в functions.php темы через хук template_redirect с функцией wp_redirect и кодом 301.

Можно ли сделать 301 редирект на Тильде или конструкторе?

На конструкторах нет доступа к серверу, поэтому полноценный серверный 301 недоступен. В Tilda есть настройка редиректов в личном кабинете (Настройки сайта → Редиректы) — она работает на уровне платформы. На других конструкторах чаще доступен только редирект через мета-тег refresh или JavaScript, но это не полноценный 301 и вес передаётся хуже. Если SEO важно, переносите сайт на хостинг с доступом к nginx или Apache.

Почему после редиректов упали позиции?

Три частые причины. Первая — цепочки редиректов: старый URL ведёт на второй, тот на третий, вес теряется на каждом шаге. Ставьте редирект сразу на финальный адрес. Вторая — вместо 301 случайно стоит 302, и вес не передаётся. Третья — потеря параметров и пути при переезде домена: редирект на главную вместо страницы в страницу. Проверяйте код ответа через сервис проверки заголовков и следите, чтобы каждый старый URL вёл на релевантный новый.

Под рукой: генератор 301-редиректов — вставьте список старых и новых URL и получите готовые правила для nginx и .htaccess за минуту.

Читать дальше

Все статьи