Логотип seo-prodvizhenie-biznesa.ru
+7 (921) 333-77-45

Как сделать 301 редирект: в WordPress, в .htaccess и на конструкторе

Как сделать 301 редирект: в WordPress, в .htaccess и на конструкторе
Анатолий Кузнецов
Анатолий Кузнецов
SEO-оптимизатор с 20-летним стажем. Автор блога seo-prodvizhenie-biznesa.ru о продвижении и доработке сайтов.

Сделать 301 редирект нужно каждый раз, когда страница меняет адрес, — иначе посетитель упирается в ошибку 404, а поисковик теряет всё, что страница накопила за годы. Самая дорогая ошибка тут не техническая, а управленческая: адреса меняют пачкой при переделке сайта, а редиректы ставят «потом», и это «потом» обходится в месяцы просадки. Ниже — когда нужен именно 301, а когда 302, четыре рабочих способа настройки с готовыми правилами и три вещи, которые делать нельзя ни при каких обстоятельствах.

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

301 или 302: чем они отличаются на деле

Робот Яндекса распознаёт стандартные коды состояния HTTP 3xx. Разделение простое: 301 и 308 — постоянное перенаправление, 302, 303 и 307 — временное. Перенаправление метатегом refresh при небольших задержках тоже считается временным.

Код ответа Что означает Когда использовать
301 Постоянное перенаправление Адрес страницы изменился навсегда: смена структуры, переезд на https, склейка www
308 Постоянное, с сохранением метода запроса Редко нужен обычному сайту, применяется для форм и API
302 Временное перенаправление Страница временно недоступна: товар кончился, идёт акция, ведутся работы
307 Временное, с сохранением метода запроса Технические сценарии, обычному сайту не нужен
200 Страница доступна Нормальное состояние: страница открывается для робота и посетителя
404 Документ не существует Страница удалена и замены ей нет — это корректный ответ, а не проблема
410 Ресурс окончательно удалён с сайта Когда нужно явно сказать, что страницы больше не будет

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

Что происходит со старым адресом при редиректе внутри сайта, описано в справке так: робот индексирует содержимое цели, и в результатах поиска отображается ссылка на цель. Страница-источник в выдаче не показывается. То есть 301 — это не «две страницы», а замена одной на другую.

Три правила, которые важнее любого кода

Первое: резервная копия. Перед правкой .htaccess, functions.php или конфигурации сервера сохраните текущую версию файла себе на компьютер. Одна лишняя буква в этих файлах роняет сайт с ошибкой 500 полностью. Восстановление из копии занимает минуту, поиск опечатки вслепую — час.

Второе: никаких цепочек и петель. Цепочка — это когда А ведёт на Б, Б на В, В на Г. Каждое звено добавляет запрос и растягивает обработку, а робот может не дойти до конца. Петля — когда адрес через несколько шагов возвращается сам на себя; такая страница недоступна в принципе. Правила надо переписывать так, чтобы с А сразу вести на Г. Про то, как это выглядит на больших сайтах, есть отдельный разбор: цепочки 301 редиректов.

Третье: не редиректить всё подряд на главную. Это самая частая «оптимизация» после чистки сайта. Логика кажется разумной: страницы нет, отправим человека на главную. На деле поиск видит массовую замену разных страниц одной и трактует это как ошибку. Справка Яндекса отдельно называет распространённой ошибкой замену сообщения об ошибке 404 на страницу-заглушку, которая возвращается с кодом 200. Механика та же и последствия те же — подробно она описана в материале про то, как редирект на главную плодит soft 404.

Правильный порядок такой: есть страница-замена с тем же смыслом — 301 на неё. Замены нет — честная 404 с нормальным оформлением и ссылками на разделы.

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

Через плагин

Самый быстрый путь для владельца сайта. Плагины перенаправлений дают таблицу из двух колонок: старый адрес и новый. Плюсы — не нужно трогать файлы, есть журнал срабатываний и список адресов, на которых посетители получили 404. Минус — каждое перенаправление обрабатывается движком, то есть с запуском PHP и обращением к базе, и на тысяче правил это заметно медленнее, чем правило на уровне сервера.

Рабочая схема: заведите правило, перейдите по старому адресу в режиме инкогнито и убедитесь, что попали на новый. Потом проверьте код ответа — в журнале плагина или инструментом проверки ответа сервера в панели вебмастера.

Без плагина, кодом

Если правил немного, а лишний плагин ставить не хочется, перенаправление делается функцией ядра. Код добавляется в functions.php дочерней темы, предварительно — резервная копия.

add_action( 'template_redirect', function () {
    $karta = array(
        '/staraya-stranica/' => '/novaya-stranica/',
        '/uslugi-old/'       => '/uslugi/',
    );
    $put = untrailingslashit( parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ) ) . '/';
    if ( isset( $karta[ $put ] ) ) {
        wp_redirect( home_url( $karta[ $put ] ), 301 );
        exit;
    }
} );

Два момента по документации WordPress. Функция wp_redirect() по умолчанию отдаёт код 302, поэтому 301 указывается вторым параметром явно. И она не завершает выполнение сама — после неё обязателен exit, иначе страница продолжит генерироваться. Подробный разбор этого подхода есть в материале про 301-редиректы в WordPress без плагина.

Отдельно: если вы просто меняете адрес записи в редакторе, WordPress в большинстве случаев сам поднимет перенаправление со старого адреса. Но полагаться на это при массовой смене структуры нельзя — проверяйте каждый адрес.

Правила в .htaccess на Apache

Это уровень сервера: правило срабатывает до запуска движка, поэтому работает быстрее плагина. Файл .htaccess лежит в корне сайта. На WordPress в нём есть блок между строками # BEGIN WordPress и # END WordPress — движок перезаписывает его содержимое автоматически, поэтому свои правила пишите выше или ниже этого блока, но не внутри.

Перед любой правкой — копия файла. Повторяю третий раз намеренно: это самая частая причина, по которой сайт ложится целиком.

Со старой страницы на новую

Redirect permanent "/staraya-stranica/" "/novaya-stranica/"

Документация Apache рекомендует для простых случаев именно Redirect, а не правила переписывания: проще и эффективнее. Если нужен шаблон с подстановкой, используется вариант с регулярным выражением:

RedirectMatch permanent "^/catalog/old/(.*)$" "/catalog/new/$1"

С www на адрес без www

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

С http на https

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]

Если сертификат выпускается автоматически, добавьте перед этими строками исключение для служебного каталога проверки, иначе продление сертификата сломается:

RewriteRule "^/\.well-known/acme-challenge/" - [L]

При смене структуры адресов

Когда раздел целиком переезжает в другую папку, правило пишется одно, а не по строке на каждую страницу:

RedirectMatch permanent "^/uslugi/(.*)$" "/services/$1"

Важно: убедитесь, что новые адреса действительно существуют. Правило с подстановкой охотно отправит посетителя на несуществующую страницу, и вместо 404 на старом адресе вы получите 404 на новом плюс лишний переход.

nginx, Битрикс и конструкторы

На nginx файла .htaccess нет, перенаправления живут в конфигурации сервера, и править её через панель хостинга обычно нельзя — нужен доступ администратора. Практический путь для владельца сайта: сформулировать задачу письмом в поддержку хостинга или разработчику, указав пары «старый адрес — новый адрес» и код 301. Отдельная ловушка: панели управления хостингом иногда перегенерируют конфигурацию и затирают ручные правки, так что после любого обновления панели редиректы стоит перепроверить.

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

На конструкторах всё зависит от платформы. Где-то есть штатный раздел перенаправлений в настройках домена, где-то нет вообще — тогда остаётся только оставить старую страницу на месте со ссылкой на новую. Проверяется это за минуту в настройках, и если раздела нет, придумывать обходные пути через скрипты не стоит: перенаправление скриптом в браузере робот трактует иначе, чем серверный код ответа.

Какой способ под какую задачу

Задача Чем делать Что проверить после
Переименовали одну страницу Плагин или строка Redirect в .htaccess Код 301 по старому адресу, один шаг до новой страницы
Переехал целый раздел RedirectMatch с подстановкой Выборочно 10 адресов раздела: все ведут на существующие страницы
Склейка www и без www Правило в .htaccess или конфиг сервера Обе версии адреса ведут на одну, robots.txt открывается на основной
Переход на https Правило в .htaccess или настройка хостинга Нет цепочки http → https с www → https без www
Удалили страницу без замены Ничего: оставить 404 Страница 404 оформлена и отдаёт именно код 404, а не 200
Товар временно нет в наличии Оставить страницу или 302 Код именно 302, а не 301
Смена домена целиком Постраничный 301 со всех адресов старого домена Каждый адрес ведёт на свой аналог, а не на главную
Больше сотни правил Уровень сервера, не плагин Скорость ответа сервера не выросла

Как проверить, что редирект работает

Проверять глазами в браузере недостаточно: браузер запоминает постоянные перенаправления и при повторном заходе может даже не обращаться к серверу. Поэтому порядок такой.

Первое — инструмент проверки ответа сервера в Яндекс Вебмастере. Он показывает код ответа именно для робота, а это важно: роботы представляются не так, как браузеры, и сервер может отвечать им иначе. Вставляете старый адрес и смотрите: должен быть код 301 и конечный адрес в заголовке перенаправления.

Второе — проверка на цепочку. Если инструмент показывает, что после первого перехода следует ещё один, правило нужно переписать. Типичный источник цепочки: одно правило гонит с http на https, второе — с www на без www, и они срабатывают последовательно.

Третье — режим инкогнито в браузере, чтобы не мешал кэш. Проверьте пять-десять реальных адресов, а не один.

Четвёртое — через пару недель посмотрите раздел с исключёнными страницами в панели: старые адреса должны перейти в статус, связанный с перенаправлением. Полный порядок диагностики с поиском цепочек и петель описан отдельно: проверка редиректов.

Когда редирект не поможет и нужен специалист

Перенаправление переносит посетителя и подсказывает поисковику замену. Оно не переносит смысл страницы.

Редирект на страницу с другим содержанием. Если карточка снятого с производства товара уезжает на категорию, поиск может счесть это заменой без соответствия и не передать ничего. Чем ближе новая страница по смыслу к старой, тем лучше результат.

Массовая смена адресов без списка. Переделали сайт, старые адреса никто не выгрузил — восстанавливать их придётся из отчётов панели вебмастера и архивных копий. Это отдельная работа, и делать её надо до запуска, а не после.

Правила есть, но не срабатывают. На Apache причиной бывает отключённый модуль переписывания адресов или порядок правил: более общее правило выше перехватывает запрос раньше частного. Разбирается это только чтением файла целиком.

Сервер отвечает медленно, и каждый лишний переход это усугубляет. Тут чинить надо хостинг и кэширование, а не редиректы. Если непонятно, с чего начинать, помогает доработка сайта по техническому списку — редиректы там один из пунктов, а не самоцель.

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

Сколько держать редирект

Постоянное перенаправление на то и постоянное, чтобы не снимать его. Минимум — год, пока поиск полностью переиндексирует сайт и пока по старым адресам ещё ходят люди из закладок и со сторонних ссылок. Снимать правило раньше — значит терять этих посетителей.

Теряется ли что-то при 301

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

Можно ли сделать редирект через метатег refresh

Можно, но не нужно: при небольших задержках такое перенаправление считается временным, то есть ведёт себя как 302. Для смены адреса навсегда это не подходит.

Что делать, если страниц для перенаправления несколько тысяч

Не писать тысячи строк руками. Ищите закономерность в адресах и покрывайте её одним правилом с подстановкой. Оставшиеся исключения — списком. Тысяча отдельных правил в файле на уровне сервера заметно замедляет обработку каждого запроса.

Нужен ли редирект со страницы со слешем на страницу без слеша

Нужен, если обе версии открываются и отдают код 200 — иначе у вас дубли. Выберите одну версию и настройте постоянное перенаправление на неё, а в карте сайта и внутренних ссылках используйте только её.

Коротко

301 и 308 — постоянное перенаправление, 302, 303 и 307 — временное. Адрес изменился навсегда — 301. Страница временно недоступна — 302. Робот индексирует содержимое цели, и в выдаче отображается именно она, а страница-источник не показывается.

Перед правкой .htaccess или functions.php сохраняйте копию файла. Ошибка в синтаксисе кладёт весь сайт с ошибкой 500, и откат из копии — самый быстрый выход.

Три вещи делать нельзя: строить цепочки из нескольких переходов, допускать петли и отправлять удалённые страницы на главную. Если замены странице нет, корректный ответ — честная 404, а не заглушка с кодом 200.

На WordPress проще всего работать плагином перенаправлений, а при небольшом числе правил — кодом в дочерней теме. Помните, что wp_redirect() по умолчанию отдаёт 302 и требует exit после себя. Для сотен правил лучше уровень сервера: Redirect и RedirectMatch в .htaccess на Apache, конфигурация на nginx.

Проверяйте результат инструментом проверки ответа сервера, а не глазами в браузере: браузер кэширует постоянные перенаправления, а роботу сервер может отвечать иначе, чем вам.

Аккуратные редиректы сохраняют то, что сайт уже заработал в поиске, — а это как раз та часть трафика, которая не выключается вместе с рекламным кабинетом. Реклама приводит людей, пока списываются деньги; позиции остаются активом и работают дальше. Разумно держать оба канала и постепенно увеличивать долю бесплатного. Если предстоит смена структуры адресов или переезд и не хочется проверять это на живом сайте, разберём план на консультации по продвижению — с порядком действий и списком того, что проверить после.

Увеличьте позиции и продажи вашего сайта

Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:

Анатолий Кузнецов — SEO-оптимизатор

Остались вопросы по продвижению?

Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.

Связаться со мной →

Комментарии

Андрей

Переделали сайт, адреса поменялись у всех 340 страниц. Разработчик поставил редирект всего старого на главную, сказал, что так безопаснее. Посещаемость за месяц упала примерно вдвое. Это оно?

Анатолий Кузнецов автор

Очень похоже. Массовая отправка разных страниц на один адрес не воспринимается как замена: старые адреса уходят, а новые ничего не наследуют. Порядок восстановления такой. Соберите список старых адресов — из отчётов панели вебмастера, из выгрузки прежней карты сайта, из архивных копий. Сопоставьте каждому старому адресу новый аналог по смыслу, а не по похожести написания. Замените общее правило постраничными. Там, где аналога нет, оставьте честную 404. Потом отправьте новые адреса на переобход и обновите карту сайта. Это работа на несколько дней, но другого пути нет.

Вероника

Спасибо за пример с acme-challenge, у нас именно из-за этого перестал продлеваться сертификат после того, как поставили редирект на https. Полдня искали причину.

Геннадий

Не понимаю смысла возиться с .htaccess, когда есть плагин. Поставил, вбил адреса в таблицу, работает. Зачем усложнять?

Анатолий Кузнецов автор

До нескольких десятков правил плагин — нормальное решение, я и сам его рекомендую людям, которые не хотят трогать файлы. Разница появляется на объёме и на нагрузке. Правило в .htaccess отрабатывает до того, как запустится PHP и движок обратится к базе; плагин отрабатывает после. На сотнях правил это уже видно по времени ответа сервера, а время ответа влияет и на посетителей, и на то, сколько страниц робот успевает обойти. Второй момент — плагин зависит от работоспособности сайта: если движок упал, редиректы не работают, а серверное правило отработает всё равно.

Дарья

А как понять, есть ли у меня цепочка? В браузере всё открывается нормально, конечная страница правильная.

Егор

Дарья, браузер вам этого не покажет, он просто проходит все шаги молча. Смотрите инструментом проверки ответа сервера в панели вебмастера: там видно каждый переход отдельно. У меня было три шага подряд — с http на http с www, потом на https с www, потом на https без www. Переписал одним правилом.

Иван

Вопрос по 302. У нас сезонный товар, зимой его нет. Ставить 302 на категорию или лучше оставлять страницу с пометкой «нет в наличии»?

Анатолий Кузнецов автор

Почти всегда лучше оставлять страницу. Товар сезонный, значит, он вернётся, а страница за это время не потеряет накопленное и не уйдёт из поиска. Добавьте честную пометку о сроках поступления, форму «сообщить о поступлении» и ссылки на похожие позиции — тогда страница продолжит приносить обращения даже без наличия. Временное перенаправление имеет смысл, когда страница физически сломана или закрыта на переделку и показывать там нечего. Постоянное в такой ситуации ставить нельзя категорически: вернуть адрес потом будет заметно сложнее, чем убрать правило.

Кристина

Уточнение про WordPress: если менять ярлык записи в редакторе, движок часто сам поднимает перенаправление со старого адреса. Но только для одной смены — после второго переименования цепочка уже не строится и старый адрес отдаёт 404. Проверяла.

Марк

У меня хостинг на nginx, поддержка говорит, что правила добавят, но после каждого обновления панели они слетают. Есть способ это обойти?

Анатолий Кузнецов автор

Обойти можно, если у панели есть предусмотренное место для пользовательских директив — файл или поле, которое она не перезаписывает при перегенерации конфигурации. Спросите поддержку именно так: «куда положить правила, чтобы панель их не затирала». Такое место обычно есть. Если его нет, остаётся два варианта: держать редиректы на уровне движка, то есть плагином, либо завести себе напоминание проверять их после каждого обновления панели. И сохраните список правил отдельным текстовым файлом у себя — восстанавливать по памяти после третьего слёта будет невесело.

Владислав

Сделал по примеру с www, всё заработало с первого раза. До этого три дня переписывал правило из статей, где его дают без RewriteCond.

Лидия

Скажите, а обязательно ли вообще что-то делать с удалёнными страницами? У нас закрыли направление, 60 страниц просто удалили. Сейчас они отдают 404.

Анатолий Кузнецов автор

Если направления больше нет и заменить страницы нечем — 404 это правильный ответ, ничего делать не нужно. Поиск постепенно уберёт эти адреса сам. Сделайте только три вещи. Первая: уберите внутренние ссылки на удалённые страницы из меню, подвала и текстов, иначе робот будет ходить по ним снова и снова. Вторая: уберите их из карты сайта. Третья: оформите саму страницу 404 по-человечески — с меню, поиском и ссылками на живые разделы, чтобы посетитель не закрывал вкладку. А вот отправлять эти 60 адресов на главную не надо, будет хуже, чем сейчас.

Злата

Добавлю от себя: обязательно проверяйте редиректы после переезда на другой хостинг. У нас .htaccess перенесли, а модуль переписывания адресов на новом сервере был выключен. Сайт работал, а все правила молча не срабатывали две недели.

Любовь

А есть смысл ставить редирект со страниц, на которые вообще никто никогда не заходил? У нас в старой версии сайта было много технических адресов, возиться с ними не хочется.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 Нажимая «оставить комментарий» вы принимаетеправила конфиденциальности 

Прокрутить вверх