Видів 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-перенаправлень.
Ця єдина відмінність - до сторінки чи після неї - і пояснює, чому решта цього посту постійно повертається до тези "використовуйте серверне перенаправлення, коли є можливість".
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 є постійними, тому пошукові системи передають сигнали ранжування і вважають ціль канонічною, тоді як 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 проти 302 перенаправлень, а механіка того, як перенаправлення вирішується на рівні edge, - у статті як працюють сервіси скорочення URL. Одне правило, яке діє незалежно від коду: обмежуйтесь одним переходом. Перенаправлення, що вказує на інше перенаправлення, марнує crawl budget і збільшує затримку, і це найшвидший спосіб звести нанівець SEO-переваги, які скорочені посилання в іншому випадку зберігають.
Вся карта вміщується в одному реченні: серверні коди для реальних перенаправлень, постійне проти тимчасового для SEO, варіанти зі збереженням методу для не-GET запитів і клієнтські прийоми лише коли сервер недоступний. Обирайте, виходячи з реальної ситуації з переміщенням, обмежуйте ланцюжок одним переходом - і ваші перенаправлення робитимуть саме те, що ви задумали.
Інші матеріали в блозі#
- 301 проти 302 перенаправлень: яке слід використовувати для скорочених посилань
- Чи шкодять сервіси скорочення URL для SEO? Чесна відповідь
- Як працюють сервіси скорочення URL під капотом
- Досягнення p95 менше 15ms для перенаправлень із FRA, ASH та SGP
- Стратегія кешування для URL-перенаправлень: L1 LRU + L2 Redis
Спробуйте Elido
Вставте URL - отримайте коротке посилання
Без реєстрації. Посилання живе 30 днів. Зареєструйтесь, щоб зберегти назавжди.
Безкоштовно, без реєстрації · 2 на день