5 мин чтенияИнженерия

Типы URL-редиректов: 301, 302, 307, 308 и другие

Объяснение каждого типа URL-редиректа - 301, 302, 303, 307, 308, meta refresh и JavaScript - что делает каждый из них, как влияет на SEO и какой выбрать.

Marius Voß
DevRel · edge infra
Типы URL-редиректов - 301, 302, 303, 307, 308, meta refresh и JavaScript - сгруппированные по семействам серверных и клиентских, в фирменной палитре Elido

Типов URL-редиректов больше, чем предполагает спор 301 против 302, и выбор неправильного незаметно лишит вас скорости или позиций. Они делятся на два семейства. Серверные HTTP-редиректы - это коды статусов, которые сервер возвращает до загрузки страницы: 301, 302, 303, 307, 308. Клиентские редиректы выполняются в браузере после загрузки страницы - тег meta refresh или переход через JavaScript. Серверные быстрее и чище для пользователей и краулеров; клиентские медленнее и слабее, и к ним прибегают только когда сервер вне досягаемости.

Я работаю над путём редиректов, поэтому буду конкретен: что делает каждый тип на уровне сети, как его читают поисковые системы и какой выбрать на практике. Если хотите детально разобрать два наиболее используемых, статья 301 vs 302 редиректы подробно рассматривает эту пару; данный материал - полная карта.

Краткий итог заранее: для постоянного перемещения используйте 301, для временного - 302, добавьте сохраняющие метод 308/307 когда POST должен выжить, и избегайте клиентских вариантов, если есть хоть какой-то сервер для настройки.

Два семейства редиректов

Редирект - это просто инструкция перейти в другое место, но то, где именно живёт эта инструкция, меняет всё поведение.

Серверный редирект - это ответ сервера "не здесь, переходи туда" до того, как отправлен какой-либо контент страницы. Браузер получает код статуса и заголовок Location и немедленно переходит - на исходном URL ничего не загружается, поэтому это быстро и однозначно. Клиентский редирект - полная противоположность: исходная страница загружается полностью, и лишь затем мета-тег или скрипт отправляют посетителя дальше. Это означает лишнюю загрузку страницы, заметное мигание и более слабый сигнал для поисковых систем, которым нужно загрузить и иногда выполнить страницу, чтобы вообще заметить редирект. Формальные определения серверных кодов содержатся в RFC 9110, а практическое поведение браузеров описано в руководстве MDN по HTTP-редиректам.

Именно это единственное различие - до страницы или после - объясняет, почему в остальном тексте постоянно звучит: "используйте серверный редирект, когда можете."

Два семейства редиректов: серверный редирект, срабатывающий до загрузки страницы, быстрый и удобный для краулеров, против клиентского meta refresh или JavaScript-редиректа, срабатывающего после загрузки, медленнее и слабее

HTTP-редиректы с кодами статусов

Это настоящие редиректы, которые сервер возвращает в диапазоне 3xx. Важных кодов пять.

КодЗначениеПостоянный?Метод сохранён?Типичное применение
301Moved PermanentlyДаНе гарантированоОкончательное перемещение, миграция сайта, переход на HTTPS
302FoundНетНе гарантированоВременное перемещение, редактируемые ссылки, A/B-тесты
303See OtherНетПринудительный GETРедирект на страницу результата после отправки формы
307Temporary RedirectНетДаВременное перемещение на POST или API-эндпоинте
308Permanent RedirectДаДаПостоянное перемещение с сохранением метода

Таблицу организуют две оси: постоянство и обработка метода. Постоянство - это SEO-ось: 301 и 308 постоянные, поэтому поисковые системы передают ранжирующие сигналы и считают цель каноническим URL, тогда как 302, 303 и 307 временные и оставляют исходный URL в индексе. Обработка метода - это инженерная ось: 307 и 308 строго сохраняют HTTP-метод, то есть POST остаётся POST, тогда как 301 и 302 исторически позволяли ему сменяться на GET. Код 303 стоит особняком - он специально создан для принудительного GET после отправки формы, чтобы обновление страницы не повторяло отправку данных. Собственная документация Google по редиректам подтверждает, что постоянные коды трактуются как сигналы канонизации.

Для обычных веб-ссылок, которые являются GET-запросами, ось методов исчезает, и вы выбираете только между постоянным и временным - это и есть выбор между 301 и 302.

Клиентские редиректы: Meta Refresh и JavaScript

Когда нет возможности настроить сервер, остаются два варианта на уровне браузера, и оба являются компромиссом.

Meta refresh - это HTML-тег в заголовке страницы, указывающий браузеру загрузить новый URL через заданную задержку - паттерн "вы будете перенаправлены через 5 секунд". Он работает, но страница уже загружена до его срабатывания, поэтому он медленный, и поисковые системы читают его непоследовательно: мгновенный meta refresh обычно воспринимается как постоянный редирект, тогда как задержанный неоднозначен и может быть расценён как мягкая 404. JavaScript-редирект ещё слабее, поскольку срабатывает только если краулер выполняет скрипт. Google рендерит JavaScript, но с задержкой, а многие другие краулеры и вовсе не запускают его, так что редирект может быть полностью пропущен.

Честный рейтинг вариантов прост: сначала серверный 3xx, meta refresh только если вы управляете HTML, но не сервером, и JavaScript-редирект как последний вариант, когда вы не управляете ничем. Ничего из этого не относится к управляемой короткой ссылке, которая всегда использует серверный редирект - клиентские техники нужны для ситуаций вроде статического хоста без конфигурации редиректов.

Какой редирект использовать

Сведите это к решению, которое можно принять за один проход.

  • Постоянное перемещение, обычная ссылка: 301. Полный перенос ранжирования, считается каноническим.
  • Временное перемещение, обычная ссылка: 302. Сохраняет исходный URL в индексе и даёт возможность редактировать ссылку.
  • Перемещение включает POST или вызов API: используйте 308 для постоянного или 307 для временного, чтобы метод сохранился.
  • После отправки формы: 303, чтобы обновление страницы не повторяло отправку формы.

Метаправило за всеми четырьмя: сопоставляйте код статуса с истинной природой перемещения - постоянное ли оно и важен ли метод. Неправильная пара - вот как редиректы незаметно теряют ранжирование или ломают форму.

Схема выбора, сопоставляющая постоянное против временного и GET против сохранения метода с правильным кодом редиректа: 301, 302, 307, 308 и 303 для форм Если хотите, чтобы всё работало правильно без ручной настройки веб-сервера, [создайте бесплатное рабочее пространство Elido](/pricing) и доверьте уровню ссылок управление редиректом.

Что используют короткие ссылки

Управляемая короткая ссылка - это серверный редирект, и не случайно: это быстрое семейство, удобное для краулеров. Интересный выбор - какой именно код, и для большинства коротких ссылок ответ - 302.

На первый взгляд это звучит неверно с точки зрения SEO, пока не вспомните, для чего нужна короткая ссылка. 302 позволяет редактировать ссылку - переназначить её после публикации или рассылки - и гарантирует, что каждый клик доходит до сервера, так что ваша аналитика остаётся точной: оба преимущества потерялись бы с жёстко кешируемым 301. Полное обоснование, включая ловушку с кешированием браузера, есть в 301 vs 302 редиректы, а механика разрешения редиректа на граничном узле описана в как работают сервисы сокращения URL. Одно правило, которое действует независимо от кода: держите цепочку в один прыжок. Редирект, указывающий на другой редирект, тратит бюджет обхода и увеличивает задержку - и это быстрейший способ свести на нет то SEO-преимущество, которое короткие ссылки в целом сохраняют.

Вся карта умещается в одном предложении: серверные коды для реальных редиректов, постоянные против временных для SEO, варианты с сохранением метода для не-GET-запросов, и клиентские приёмы только когда сервер недоступен. Выбирайте по истинной природе перемещения, держите цепочку в один прыжок - и ваши редиректы будут делать то, что вы задумали.

Другие статьи блога

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

Какие бывают основные типы URL-редиректов?

Существует два семейства. Серверные HTTP-редиректы - это коды статусов, которые возвращает сервер: 301 (постоянный), 302 (временный), 303 (see other, принудительный GET), 307 (временный с сохранением метода) и 308 (постоянный с сохранением метода). Клиентские редиректы выполняются в браузере после загрузки страницы: HTML-тег meta refresh или изменение location через JavaScript. Серверные редиректы быстрее и чище как для пользователей, так и для поисковых систем; клиентские - медленнее и слабее, и к ним прибегают только когда нет возможности управлять сервером.

В чём разница между редиректами 301 и 308?

Оба постоянные, поэтому оба сообщают поисковым системам, что целевой URL стал новым каноническим, и передают ранжирующие сигналы. Разница в обработке HTTP-метода: исторически 301 допускал смену метода (POST мог превратиться в GET при редиректе), тогда как 308 строго сохраняет метод и тело запроса. Для обычных ссылок, которые являются GET-запросами, они ведут себя одинаково. 308 важен для API и отправки форм, где POST должен оставаться POST.

Для чего используется редирект 307?

307 - это строгий временный редирект. Он выполняет ту же задачу, что и 302 - отправить посетителя в другое место на время, сохранив индексацию исходного URL - но гарантирует сохранение метода запроса, то есть POST остаётся POST. Используйте его для временных перемещений на эндпоинтах, принимающих не-GET-запросы, например API или обработчики форм. Для обычного временного редиректа ссылки 302 и 307 взаимозаменяемы.

Плохо ли влияет meta refresh на SEO?

Он слабее серверного редиректа, и его стоит избегать, когда есть выбор. Meta refresh срабатывает в браузере после загрузки HTML, что медленнее для пользователя и менее надёжный сигнал для поисковых систем. Google говорит, что интерпретирует мгновенный meta refresh как постоянный редирект, но задержка делает сигнал размытым, и редирект может быть воспринят как мягкая 404 или хуже. Если можно вернуть 301 или 302 с сервера - сделайте именно так.

Работают ли JavaScript-редиректы для SEO?

Могут, но это наименее надёжный вариант. JavaScript-редирект срабатывает только если краулер выполняет скрипт, и хотя Google рендерит JavaScript, он делает это с задержкой, а другие краулеры нередко не запускают его совсем. Поэтому редирект может быть не замечен или учтён с опозданием. Используйте JavaScript-редирект только тогда, когда нет никакого контроля ни над сервером, ни над возможностью применить meta refresh - это последний вариант, а не умолчание.

Какой тип редиректа использовать?

Сопоставьте код с реальностью. Для постоянного перемещения используйте 301 (или 308, если POST должен сохраниться). Для временного - 302 (или 307 для не-GET-методов). Для большинства коротких ссылок, которые являются редактируемыми GET-редиректами, 302 - правильный выбор по умолчанию, поскольку он сохраняет возможность изменить ссылку и обеспечивает точность аналитики. Клиентские meta refresh и JavaScript-редиректы оставьте для случаев, когда нет никакого доступа к серверу.

Попробуйте Elido

Вставьте URL - получите короткую ссылку

Без регистрации. Ссылка живёт 30 дней. Зарегистрируйтесь, чтобы оставить её навсегда.

Бесплатно, без регистрации · 2 в день

Попробуйте Elido

URL-сокращатель с хостингом в ЕС: собственные домены, глубокая аналитика, открытый API. Бесплатный тариф - без банковской карты.

Теги
types of redirects
url redirect types
301 redirect
308 redirect
meta refresh redirect
javascript redirect

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