Типов 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-редиректам.
Именно это единственное различие - до страницы или после - объясняет, почему в остальном тексте постоянно звучит: "используйте серверный редирект, когда можете."
HTTP-редиректы с кодами статусов
Это настоящие редиректы, которые сервер возвращает в диапазоне 3xx. Важных кодов пять.
| Код | Значение | Постоянный? | Метод сохранён? | Типичное применение |
|---|---|---|---|---|
| 301 | Moved Permanently | Да | Не гарантировано | Окончательное перемещение, миграция сайта, переход на HTTPS |
| 302 | Found | Нет | Не гарантировано | Временное перемещение, редактируемые ссылки, A/B-тесты |
| 303 | See Other | Нет | Принудительный GET | Редирект на страницу результата после отправки формы |
| 307 | Temporary Redirect | Нет | Да | Временное перемещение на POST или API-эндпоинте |
| 308 | Permanent 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, чтобы обновление страницы не повторяло отправку формы.
Метаправило за всеми четырьмя: сопоставляйте код статуса с истинной природой перемещения - постоянное ли оно и важен ли метод. Неправильная пара - вот как редиректы незаметно теряют ранжирование или ломают форму.
Что используют короткие ссылки
Управляемая короткая ссылка - это серверный редирект, и не случайно: это быстрое семейство, удобное для краулеров. Интересный выбор - какой именно код, и для большинства коротких ссылок ответ - 302.
На первый взгляд это звучит неверно с точки зрения SEO, пока не вспомните, для чего нужна короткая ссылка. 302 позволяет редактировать ссылку - переназначить её после публикации или рассылки - и гарантирует, что каждый клик доходит до сервера, так что ваша аналитика остаётся точной: оба преимущества потерялись бы с жёстко кешируемым 301. Полное обоснование, включая ловушку с кешированием браузера, есть в 301 vs 302 редиректы, а механика разрешения редиректа на граничном узле описана в как работают сервисы сокращения URL. Одно правило, которое действует независимо от кода: держите цепочку в один прыжок. Редирект, указывающий на другой редирект, тратит бюджет обхода и увеличивает задержку - и это быстрейший способ свести на нет то SEO-преимущество, которое короткие ссылки в целом сохраняют.
Вся карта умещается в одном предложении: серверные коды для реальных редиректов, постоянные против временных для SEO, варианты с сохранением метода для не-GET-запросов, и клиентские приёмы только когда сервер недоступен. Выбирайте по истинной природе перемещения, держите цепочку в один прыжок - и ваши редиректы будут делать то, что вы задумали.
Другие статьи блога
- 301 vs 302 редиректы: какой должны использовать короткие ссылки
- Вредят ли сервисы сокращения URL продвижению в поиске? Честный ответ
- Как работают сервисы сокращения URL изнутри
- Достижение p95 менее 15 мс для редиректов из FRA, ASH и SGP
- Стратегия кеширования для URL-редиректов: L1 LRU + L2 Redis
- Уязвимости открытого редиректа и как их предотвратить
- Петля редиректов: как найти и исправить ERR_TOO_MANY_REDIRECTS
- Как перенаправить URL: шесть способов, и когда какой из них уместен
Частые вопросы
Какие бывают основные типы 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 в день