Monitor404

Код 308 Permanent Redirect: постоянный редирект без смены метода

Код 308 Permanent Redirect означает, что ресурс навсегда переехал на новый URL и клиент должен повторить запрос по нему тем же методом и с тем же телом. Это «301, который не превращает POST в GET».

Обновлено 11 октября 2026 г.

Что значит код 308

Код 308 появился в RFC 7538 и сейчас описан в RFC 9110 (раздел 15.4.9). Он работает как 301: новый постоянный адрес указан в заголовке Location, а ответ по умолчанию кешируется. Отличие одно: клиент обязан сохранить метод запроса и тело. Для POST, PUT или DELETE это существенно: 301 мог превратить их в GET и потерять данные.

http
HTTP/1.1 308 Permanent Redirect
Location: https://example.com/api/v2/orders

Как выбрать между 301, 302, 307 и 308

Метод может смениться на GETМетод и тело сохраняются
Постоянный301 Moved Permanently308 Permanent Redirect
Временный302 Found307 Temporary Redirect

Практическое правило: для обычных страниц, открываемых GET, достаточно 301; 308 нужен, когда через редирект проходят запросы с телом (API, формы, webhook).

Когда использовать 308

  • переезд API-эндпойнта на новый адрес, когда клиенты шлют POST или PUT;
  • перевод всего сайта или API на HTTPS, если на HTTP приходят не только GET;
  • смена домена у сервиса, принимающего webhook-вызовы;
  • фреймворк сам выбирает 308: например, в Next.js редиректы с permanent: true отдают именно 308.

Что делать посетителю

Ничего: браузер перейдёт на новый адрес сам. Если страница не открывается и пишет о зацикливании, очистите cookie и кеш сайта: 308, как и 301, браузеры запоминают. Подробнее в разборе ERR_TOO_MANY_REDIRECTS.

Как настроить 308 владельцу сайта

nginx
server {
    listen 80;
    server_name example.com;
    return 308 https://example.com$request_uri;
}
.htaccess
Redirect 308 /api/v1/ https://example.com/api/v2/
Next.js (next.config.js)
module.exports = {
  async redirects() {
    return [
      { source: "/old-page", destination: "/new-page", permanent: true }, // 308
    ];
  },
};

Редирект, настроенный для страниц сайта, проще собрать в генераторе 301-редиректов, а затем при необходимости заменить код. Подробности по Next.js в руководстве.

Как безопасно перейти на 308

  1. Составьте список старых и новых адресов и проверьте, что на новых отвечает 200.
  2. Включите редирект на тестовом адресе или на части трафика и проверьте методы GET, POST и HEAD.
  3. Убедитесь, что клиенты API обрабатывают редиректы и сохраняют метод (библиотеки в большинстве случаев так и делают, но у части нужно включить следование редиректам).
  4. Обновите ссылки внутри сайта, sitemap и canonical на новые адреса, чтобы редирект работал только для внешних обращений.
  5. Проследите за логами: сколько запросов по-прежнему идёт на старые адреса и откуда.

Типичные ошибки и совместимость

  • 308 вместо 301 «на всякий случай». Для страниц это ничего не даёт. Код 308 появился позже, и очень старые клиенты или самописные боты могут его не знать и воспринять как ошибку.
  • Редирект «навсегда» для временного переезда. 308 кешируется браузерами, и откатить его будет непросто. Сначала проверьте цель на тестовом адресе, а на время тестов используйте 307.
  • Цепочки. Не оставляйте связку http → https → www → новый путь: сразу отправляйте на итоговый адрес за один шаг.
  • Забытые старые правила. После перехода на 308 убедитесь, что старые правила 301 не создают второй переход.

Как 308 видят Яндекс и Google

Google относит 301 и 308 к постоянным редиректам: оба служат сильным сигналом, что новый URL должен стать каноническим. Яндекс также воспринимает 308 как постоянное перенаправление. Если выбор между 301 и 308 произвольный (страницы, GET-запросы), оставайтесь на 301: он поддерживается всеми клиентами и инструментами. Переход на 308 нужен только там, где важно сохранить метод запроса.

Как проверить

Откройте адрес в проверке кода ответа и убедитесь, что цепочка завершается на нужном URL с кодом 200 и состоит из одного шага. Через консоль: curl -sIL https://example.com/old-page | grep -iE "^(HTTP|location)".

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

Чем 308 отличается от 301?

Оба постоянные. При 308 клиент обязан сохранить метод и тело запроса, а при 301 может заменить POST на GET. Для обычных страниц на практике разницы нет.

Понимают ли Google и Яндекс код 308?

Google относит 308 к постоянным редиректам наряду с 301. Яндекс также обрабатывает его как постоянное перенаправление.

Почему Next.js отдаёт 308, а не 301?

Next.js использует 308 для редиректов с параметром permanent: true, чтобы метод запроса сохранялся. А для временных отдаёт 307.

Читайте также