Что такое 301 редирект
301 — это ответ сервера: «страница переехала навсегда». Браузер получает новый адрес и открывает его автоматически. Поисковый робот тоже переходит дальше и со временем заменяет старый URL новым в индексе. Для бизнеса это важно при смене структуры сайта, переезде на другой домен, подключении HTTPS или объединении дублей с www и без www.
Я ставлю 301 только тогда, когда возвращать старый адрес уже не планирую. Если изменение временное, выбираю 302 или 307. Если обе страницы должны открываться, но одна считается основной, использую canonical. Эти инструменты решают разные задачи: редирект переносит человека, а canonical лишь подсказывает поисковику предпочтительную версию.
Старый адрес отвечает кодом 301 и сразу направляет посетителя на новый.
Как выбрать правильный способ
| Способ | Когда применяю | Что видит посетитель | Главное ограничение |
|---|
| 301 | Адрес изменился навсегда | Сразу открывается новый URL | Не подходит для временных изменений |
| 302 или 307 | Перенос нужен на короткий срок | Открывается временный URL | Старый адрес остаётся основным |
| Canonical | Обе версии нужны, но одна основная | Никуда не перенаправляется | Это рекомендация для робота, а не переход |
| 404 или 410 | Страница удалена и равноценной замены нет | Показывается страница ошибки | Нельзя массово вести такие URL на главную |
Когда я настраиваю постоянный редирект
- Меняю адрес отдельной страницы и перенаправляю старый URL на её прямую замену.
- Перевожу сайт с HTTP на HTTPS и оставляю одну защищённую версию.
- Выбираю главное зеркало: с www или без www.
- Переношу сайт на другой домен, сохраняя пути страниц.
- Убираю дубли вроде /index.php и привожу адреса со слешем к одному формату.
- Удаляю страницу, но у неё есть близкая по смыслу действующая замена.
Перед настройкой я составляю карту «старый URL → новый URL». Для небольшого сайта хватает таблицы. При крупном переезде выгружаю все индексируемые, посещаемые и имеющие внешние ссылки страницы. Каждому важному старому адресу назначаю наиболее близкую новую страницу. Не отправляю весь архив на главную: посетитель не получает ожидаемый ответ, а поисковик может посчитать такой переход мягкой ошибкой.
Карта редиректов связывает каждый старый URL с релевантной новой страницей.
Как настроить 301 на Apache
На сервере Apache правила обычно добавляют в файл .htaccess в корне сайта. До правок я сохраняю копию файла: лишний символ способен вызвать ошибку сервера. Для одной страницы удобно простое правило:
Redirect 301 /old-page/ https://example.com/new-page/
Старый путь указываю относительным, новый адрес — полным. После сохранения отдельно проверяю оба URL.
Для перевода всего сайта на HTTPS использую mod_rewrite:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Флаг R=301 задаёт постоянный ответ, а L прекращает обработку следующих правил. Если сайт работает за прокси, сервер может не видеть HTTPS напрямую — тогда конфигурацию лучше уточнить у администратора или хостинга.
При переезде на новый домен сохраняю путь после имени сайта:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?old\.example$ [NC]
RewriteRule ^(.*)$ https://new.example/$1 [R=301,L]
Так старая страница /contacts/ ведёт на /contacts/, а не на главную. Домены в примере обязательно заменяю своими.