Elido
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 проти 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 є постійними, тому пошукові системи передають сигнали ранжування і вважають ціль канонічною, тоді як 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 для post-form Якщо ви хочете, щоб обидва працювали правильно без ручного налаштування веб-сервера, [почніть безкоштовно у Elido](/pricing) і дозвольте рівню посилань керувати перенаправленням.

Що використовують скорочені посилання#

Керовані скорочені посилання - це серверне перенаправлення, і на те є вагома причина: це швидке, дружнє для краулерів сімейство. Цікавим є вибір коду, і для більшості скорочених посилань відповідь - 302.

Це звучить контрінтуїтивно з точки зору SEO, поки ви не пригадаєте, для чого призначено скорочене посилання. 302 зберігає посилання редагованим, тому ви можете змінити його призначення після того, як воно надруковане або поширене, і забезпечує надходження кожного кліку на сервер, щоб ваша аналітика залишалася точною - обидві речі, яких позбавило б вас жорстко кешоване 301. Повне обгрунтування, включаючи пастку кешування браузера, описане в статті 301 проти 302 перенаправлень, а механіка того, як перенаправлення вирішується на рівні edge, - у статті як працюють сервіси скорочення URL. Одне правило, яке діє незалежно від коду: обмежуйтесь одним переходом. Перенаправлення, що вказує на інше перенаправлення, марнує crawl budget і збільшує затримку, і це найшвидший спосіб звести нанівець SEO-переваги, які скорочені посилання в іншому випадку зберігають.

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

Інші матеріали в блозі#

Спробуйте Elido

Вставте URL - отримайте коротке посилання

Без реєстрації. Посилання живе 30 днів. Зареєструйтесь, щоб зберегти назавжди.

Безкоштовно, без реєстрації · 2 на день

Спробуйте Elido

URL-скорочувач із хостингом у ЄС: власні домени, глибока аналітика, відкритий API. Безкоштовний тариф - без кредитної картки.

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

Читати далі