Что означает HTTP-статус ответа 301 Moved Permanently?

Ответ

301 Moved Permanently — это HTTP-код состояния, который сообщает клиенту (например, браузеру или поисковому роботу), что запрошенный ресурс был навсегда перемещен на новый URL, указанный в заголовке Location.

В отличие от временного редиректа 302 Found, 301 указывает на постоянное изменение.

Как это работает:

  1. Клиент запрашивает /old-url.
  2. Сервер отвечает статусом 301 и заголовком Location: /new-url.
  3. Клиент автоматически делает новый запрос на /new-url.
  4. Браузеры могут кэшировать этот редирект, а поисковые системы передают "вес" (ranking power) со старой страницы на новую.

Пример на Python с использованием Flask:

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/old-page')
def old_page():
    # Возвращаем ответ с кодом 301 и новым URL
    return redirect(url_for('new_page'), code=301)

@app.route('/new-page')
def new_page():
    return "Это новая страница!"

Основные сценарии использования:

  • SEO: При смене URL-адреса страницы для сохранения её позиций в поисковой выдаче.
  • Смена домена: Перенаправление всего трафика со старого домена на новый.
  • Рефакторинг структуры сайта: При изменении путей к разделам или статьям.

Ответ 18+ 🔞

А, слушай, вот эта штука — 301 редирект. Это когда ты пытаешься зайти на старую страницу, а тебе сервер такой: «Э, дружок-пирожок, мы тут переехали навсегда, вот новый адрес, держи, и больше не возвращайся сюда, блядь».

Это не какой-то временный «ой, мы тут прибраться не успели», а именно насовсем, ёпта. Как переезд из хрущёвки в новостройку, а старую квартиру потом снесли. И все поисковики, эти умные жопы, должны понять, что весь «вес» и авторитет со старой страницы теперь перетекает на новую. Если сделать это неправильно — пиши пропало, трафик накроется медным тазом.

Как эта магия работает, если по-простому:

  1. Ты, такой довольный, стучишься в браузере по адресу /staraya-stranica.
  2. Сервер, вместо контента, плюёт тебе в лицо кодом 301 и кричит: «Ищи в другом месте! Новый адрес — /novaya-stranica!».
  3. Твой браузер, покорный как пёс, сразу бежит по новому адресу.
  4. И главное — он это запоминает! В следующий раз он может сразу лететь на новый URL, даже не спрашивая старый. Экономия времени, блядь, целых наносекунд!

Вот смотри, как это выглядит в коде, на примере Flask (код не трогаем, он святой):

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/staraya-stranica')
def old_page():
    # Вот тут и происходит вся движуха. Кидаем клиента на новый адрес с кодом 301.
    return redirect(url_for('new_page'), code=301)

@app.route('/novaya-stranica')
def new_page():
    return "А вот и новая страница, добро пожаловать!"

И где этот гениальный инструмент применяется? Да везде, сука!

  • Для SEO-спецов: Переименовал раздел на сайте? Без 301 редиректа все твои прошлые заслуги в поиске — на хуй улетят. А так — плавненько всё переедет.
  • Смена домена: Был sait.ru, стал kruche-sait.com. Чтобы народ не потерялся, вешаешь 301 со всех старых адресов на новые. Красота.
  • Чисто технический рефакторинг: Упростил структуру сайта, убрал лишние папки. Чтобы ссылки из интернета не вели в пустоту, ставишь эти редиректы. Пользователь даже не заметит подмены, хитрая жопа.

Короче, 301 — это как сказать и поисковикам, и пользователям: «Забудь старый путь, вот новый, и он теперь твой дом». Главное — не перепутать с временным редиректом, а то будет ебаться с кэшами потом, овердохуища.