410 Gone: страница удалена навсегда
Что такое HTTP 410, чем он отличается от 404, когда выбрать 410 вместо 301, нужна ли кастомная страница и как настроить на любом сервере.
410 Gone — HTTP-код ответа, который сервер возвращает, когда маршрут ему известен, но ресурс по нему намеренно и безвозвратно удалён. В отличие от 404, 410 несёт явный сигнал: сервер знает об этом URL и подтверждает, что материал удалён намеренно и уже никогда не вернётся. Поисковые системы убирают такие страницы из индекса значительно быстрее.
Что такое 410 Gone
410 Gone — это HTTP-статус из группы 4xx (ошибки клиента), который сервер возвращает, когда запрошенный ресурс был намеренно и окончательно удалён. Ключевой момент: сервер знает об этом маршруте. Это не «страница не найдена» — это «страница была, но её удалили намеренно, и она не вернётся». Именно это отличает 410 от 404.
Согласно спецификации RFC 9110, 410 указывает, что ресурс больше не доступен, и это состояние, по всей видимости, постоянное. Поисковые системы воспринимают 410 как однозначный сигнал к деиндексации — без повторных проверок и ожидания.
410 vs 404: в чём разница
Оба кода означают, что страницы по запрошенному URL нет. Разница — в том, что сервер сообщает о причине:
- 404 Not Found: ресурс не найден. Сервер не знает, существовал ли он раньше и вернётся ли. Поисковый робот будет периодически проверять URL снова — вдруг появится.
- 410 Gone: сервер явно подтверждает — ресурс существовал, был удалён намеренно, и это навсегда. Поисковый робот прекращает проверки и деиндексирует страницу быстрее.
На практике 404 чаще всего тоже означает удаление, но поисковику об этом неизвестно. 410 убирает неопределённость: сервер явно сообщает о факте и причине отсутствия контента.
410 или 301: что выбрать
Это самый частый вопрос при удалении страниц. Выбор зависит от того, есть ли подходящий аналог для перенаправления:
- Используйте 301, если страница переехала или есть тематически близкий аналог. 301 передаёт накопленный ссылочный вес на новый URL — это сохраняет позиции и трафик.
- Используйте 410, если страница удалена безвозвратно и подходящего аналога нет. Перенаправлять на нерелевантный URL (например, на главную) ради сохранения веса — плохая практика. Google это понимает и не засчитывает такой вес.
- Используйте 404, если вы не уверены в намерениях или страница теоретически может вернуться.
Когда использовать 410
410 — правильный выбор в следующих ситуациях:
- Удаление товаров из каталога, у которых нет аналогов и которые не вернутся в продажу.
- Снятие с публикации статей, новостей или промо-страниц с истёкшим сроком.
- Удаление пользовательского контента (профили, публикации) по запросу пользователя или по GDPR.
- Очистка спам-страниц или дублей, которые не должны больше индексироваться.
- Удаление разделов при реструктуризации сайта, когда у страниц нет тематически близкого аналога.
- Деактивация API-эндпойнтов старых версий, которые больше не поддерживаются.
Нужна ли кастомная страница для 410
410 — это в первую очередь сигнал для поисковых роботов, а не для пользователей. Но если реальный пользователь попадёт на такой URL (например, по старой закладке или внешней ссылке), он увидит пустой ответ или браузерную ошибку без вашего брендинга.
Рекомендации по шаблону страницы 410:
- Для технических ресурсов (API, внутренние эндпойнты) — шаблон не нужен, достаточно статуса.
- Для пользовательских страниц — добавьте минимальный шаблон: объясните, что страница удалена, дайте ссылку на главную или поиск по сайту. Можно переиспользовать шаблон страницы 404.
- Не делайте редирект с 410 на 404. Возвращайте 410 со своим HTML — это правильнее семантически.
Как настроить 410
Примеры для популярных платформ:
# Apache — .htaccess
# Один конкретный URL:
Redirect 410 /old-promo
# Несколько URL сразу:
Redirect 410 /news/2021/event
Redirect 410 /sale/black-friday-2022
# Все страницы раздела:
RewriteEngine On
RewriteRule ^old-blog/.*$ - [G,L]# Nginx
server {
# Один URL:
location = /old-promo {
return 410;
}
# Все страницы раздела:
location ^~ /old-blog/ {
return 410;
}
}// Next.js — middleware.ts (точный 410 для конкретных URL)
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
const GONE_PATHS = new Set([
'/old-promo',
'/news/2021/event',
'/sale/black-friday-2022',
]);
export function middleware(request: NextRequest) {
const pathname = request.nextUrl.pathname;
if (GONE_PATHS.has(pathname)) {
return new NextResponse('Gone', { status: 410 });
}
}
export const config = {
matcher: ['/old-promo', '/news/:path*', '/sale/:path*'],
};<?php
// PHP — явный 410 с телом страницы
http_response_code(410);
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html lang="ru">
<head><title>Страница удалена</title></head>
<body>
<h1>410 Gone</h1>
<p>Эта страница была удалена и больше не существует.</p>
<a href="/">На главную</a>
</body>
</html>После настройки проверьте статус через Google Search Console (раздел «Проверка URL») или с помощью curl:
curl -o /dev/null -s -w "%{http_code}\n" https://example.com/old-promo
# Ожидаемый результат: 410Частые вопросы
Обсудим ваш проект?
Расскажите о целях и сайте — предложу формат работы и следующий шаг.