308 Redirect: постоянное перенаправление с сохранением метода

Что такое HTTP 308, чем он отличается от 301 и 307, когда его необходимо использовать для API и форм, и как настроить на сервере.

Кратко

308 Permanent Redirect — HTTP-статус постоянного перенаправления, который обязывает клиента повторить запрос на новый URL с тем же методом (POST, PUT, PATCH и т.д.) и телом запроса. В отличие от 301, браузер не меняет метод на GET. Поисковые системы трактуют 308 как постоянный редирект: ссылочный вес передаётся на новый URL, старый URL удаляется из индекса.

Что такое 308 редирект

308 Permanent Redirect — это HTTP-статус, стандартизированный в RFC 7538 (2015). Он сообщает клиенту: «Запрошенный ресурс навсегда перемещён на новый URL. Повтори запрос туда же, сохранив метод и тело». Ключевое слово — «навсегда»: в отличие от 307, который временный, 308 является постоянным и сигнализирует поисковым системам о необходимости обновить индекс и передать ссылочный вес.

Код 308 закрывает пробел в спецификации HTTP: до его появления разработчики сталкивались с дилеммой — 301 постоянный, но браузеры де-факто меняют POST на GET; 307 сохраняет метод, но только для временных перемещений. 308 объединяет постоянность 301 и гарантию сохранения метода 307.

Правило запоминания: 308 = «301, но метод не трогать». 307 = «302, но метод не трогать». Если перемещение постоянное и важен метод запроса — используйте 308.

308 vs 301 vs 307 vs 302: в чём разница

Четыре кода перенаправления отличаются по двум осям: постоянность и сохранение HTTP-метода.

  • 301 Moved Permanently — постоянный редирект, передаёт ссылочный вес. Метод формально должен сохраняться, но браузеры меняют POST→GET (поведение унаследовано от HTTP/1.0).
  • 302 Found (Temporary) — временный редирект, вес не передаётся. Метод де-факто меняется POST→GET в большинстве браузеров.
  • 307 Temporary Redirect — временный редирект, вес не передаётся. Метод гарантированно сохраняется (POST остаётся POST).
  • 308 Permanent Redirect — постоянный редирект, передаёт ссылочный вес. Метод гарантированно сохраняется. Аналог 301 для API и форм.
308 поддерживается всеми современными браузерами (Chrome 36+, Firefox 18+, Edge, Safari 7.1+), но некоторые старые HTTP-клиенты и прокси его не понимают. Для максимальной совместимости в легаси-окружениях используйте 307 (временный) или 301 (постоянный).

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

  • Постоянная миграция API-эндпоинтов: когда клиенты отправляют PUT/PATCH/DELETE и нужно навсегда перенести эндпоинт на новый адрес без потери тела запроса.
  • Переезд форм на новый URL: при постоянном изменении адреса формы регистрации или оформления заказа — сохраняем POST-данные.
  • Смена версии API: переход с /api/v1/ на /api/v2/ при постоянном отказе от старой версии с сохранением метода запроса.
  • HTTPS-апгрейд для POST-эндпоинтов: при постоянном переходе с HTTP на HTTPS для форм и API, где важно сохранить метод и тело запроса.
  • Реструктуризация маршрутов: при постоянном переносе обработчиков форм в новую структуру приложения.
Не используйте 308 для временных перемещений — он сигнализирует постоянность. Браузеры кешируют 308-редирект и не будут повторно запрашивать старый URL. Для временных ситуаций используйте 307.

Влияние 308 на SEO

С точки зрения поисковых систем 308 — это постоянный редирект, аналогичный 301. Google и Bing передают ссылочный вес (PageRank, link equity) через 308: старый URL удаляется из индекса, новый получает авторитет старого. Обработка 308 поисковыми роботами идентична 301 — Googlebot следует за редиректом и обновляет индекс.

На практике для SEO-специалистов разница между 301 и 308 несущественна — оба передают вес, оба постоянные. Выбор кода становится важен только в контексте API и форм: если приложение использует POST/PUT/PATCH-запросы и метод критичен, предпочтительнее 308. Для обычных HTML-страниц с GET-запросами используйте привычный 301.

Если вы видите 308 в SEO-аудите на обычных страницах — это не ошибка с точки зрения SEO, но может указывать на избыточную конфигурацию. 308 оправдан только там, где важно сохранение метода запроса.

Как настроить 308 редирект

Примеры для основных серверных окружений:

NGINX
# Nginx: постоянный редирект с сохранением метода
server {
    listen 80;
    server_name example.com;

    # Весь HTTP-трафик → HTTPS (308 сохранит POST-тело и постоянный)
    return 308 https://example.com$request_uri;
}

# Постоянный перенос API-эндпоинта
location /api/v1/ {
    return 308 https://example.com/api/v2/;
}
APACHE
# Apache (.htaccess)
# Постоянный редирект одного URL с сохранением метода
Redirect 308 /old-endpoint https://example.com/new-endpoint

# или через mod_rewrite
RewriteEngine On
RewriteRule ^api/v1/(.*)$ https://example.com/api/v2/$1 [R=308,L]
JAVASCRIPT
// Next.js (next.config.js) — постоянный редирект
// Примечание: Next.js использует 301 для permanent: true
// Для точного 308 используйте middleware:
import { NextResponse } from 'next/server';

export function middleware(request) {
  if (request.nextUrl.pathname.startsWith('/api/v1/')) {
    const newUrl = request.nextUrl.clone();
    newUrl.pathname = newUrl.pathname.replace('/api/v1/', '/api/v2/');
    return NextResponse.redirect(newUrl, { status: 308 });
  }
}
PHP
<?php
// PHP: явный 308
http_response_code(308);
header('Location: https://example.com/new-endpoint');
exit();
?>
BASH
# Проверка через curl — убедитесь, что ответ именно 308
curl -I -X POST https://example.com/old-endpoint
# HTTP/2 308
# location: https://example.com/new-endpoint

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

Оба постоянные и оба передают ссылочный вес. Разница в поведении с методом: 301 де-факто меняет POST на GET в большинстве браузеров, 308 — нет. Для GET-страниц разницы нет, для POST-форм и API — принципиальная.
Да. 308 — постоянный редирект, как и 301. Поисковые системы передают PageRank на новый URL и удаляют старый из индекса. Поведение идентично 301 с точки зрения SEO.
308 — для постоянного перемещения (миграция API, смена версии эндпоинта). 307 — для временного переноса (failover, A/B-тест, техработы). Если перемещение постоянное и важен метод — 308. Если временное — 307.
Да. Googlebot и Bingbot корректно обрабатывают 308, передают ссылочный вес и обновляют индекс аналогично 301. Если вы видите задержку в переиндексации — это нормально, процесс занимает от нескольких дней до нескольких недель.
Используйте curl -I -X POST <URL> и смотрите на строку статуса. В браузере: DevTools → Network → найдите запрос к старому URL → колонка Status. Screaming Frog также показывает коды редиректов при краулинге.
Прямые контакты

Обсудим ваш проект?

Расскажите о целях и сайте — предложу формат работы и следующий шаг.

308 Redirect: постоянное перенаправление с сохранением метода — что это такое?