Задача: Проработать механику «страница удалена навсегда» для публичных сущностей

Проработать механику «страница удалена навсегда» для публичных сущностей

27.08.2026haih-агент

Добавить корректную механику окончательного удаления публичных страниц без возврата обычного 404.

Цель

Проработать и реализовать в haih-agent механику окончательного удаления публичной страницы так, чтобы старый URL не выглядел как случайно отсутствующий ресурс.

Сейчас нежелательные или случайно созданные публичные сущности нельзя просто удалять, если на них уже мог появиться внешний URL: обычный 404 Not Found не объясняет поисковикам и пользователям, что страница существовала и была удалена намеренно.

Нужен отдельный сценарий «страница удалена навсегда».

Базовая идея

Для окончательно удаленной публичной страницы старый URI должен продолжать обрабатываться системой, но возвращать специальное состояние удаления вместо обычного 404.

Предпочтительный HTTP-статус — 410 Gone.

410 семантически означает, что ресурс существовал, но удален намеренно и возвращаться не будет. Это лучше соответствует задаче, чем 404, который не отличает никогда не существовавший URL от удаленного.

Что нужно проработать

1. Модель данных

Определить, как хранить факт окончательного удаления URL.

Возможные варианты:

  • отдельная сущность GoneRoute / RemovedRoute;
  • расширение существующей системы SiteRoute;
  • расширение redirect rules новым типом действия;
  • tombstone-запись для удаленной сущности.

Важно: после физического удаления основной сущности информация о старом URI не должна исчезать.

Минимально нужно хранить:

  • старый URI;
  • дату удаления;
  • тип исходной сущности;
  • при необходимости публичное сообщение/причину;
  • кто выполнил удаление;
  • опционально ссылку на родительский раздел или рекомендуемую альтернативу.

2. HTTP-поведение

Для зарегистрированного permanently removed URI возвращать:

410 Gone

а не обычный 404.

При этом неизвестные URL, которые никогда не существовали, должны продолжать возвращать 404.

3. UI страницы

Показывать нормальную страницу-заглушку, например:

Страница удалена навсегда

Этот материал больше недоступен.

Можно добавить:

  • ссылку на родительский раздел;
  • поиск;
  • главную страницу;
  • предлагаемую замену, если она задана.

Это не должна быть техническая error page со stack trace или пустым экраном.

4. SEO

Механика важна для корректного управления индексом.

410 Gone дает поисковым системам более точный сигнал, чем 404: ресурс удален намеренно и его не следует продолжать считать временно отсутствующим.

Это полезно для:

  • ускорения удаления ненужных страниц из поискового индекса;
  • уменьшения количества мусорных URL в индексе;
  • предотвращения повторного обхода заведомо удаленного контента;
  • сохранения чистой структуры сайта после массовых миграций/чисток;
  • различения настоящих битых ссылок (404) и намеренно удаленных документов (410).

Важно: если у удаленной страницы есть полноценная замена с тем же смыслом, вместо 410 правильнее использовать 301 на новый canonical URL. 410 нужен именно когда ресурс удаляется без эквивалентной замены.

5. Удаление сущности

Нужно определить административный flow:

  1. Администратор выбирает «Удалить навсегда».
  2. Перед удалением система сохраняет URI в tombstone/gone-route.
  3. Основная сущность удаляется или помечается удаленной — в зависимости от выбранной архитектуры.
  4. Старый URI начинает отвечать 410.
  5. Повторное создание другой сущности с тем же URI должно быть явно контролируемым действием, а не происходить случайно.

6. Взаимодействие с redirect rules

Определить приоритеты:

  • если URI имеет 301 на существующую замену — redirect должен работать;
  • если URI объявлен permanently gone — возвращать 410;
  • правила не должны конфликтовать или давать неоднозначный результат.

Нужен единый порядок обработки route rules.

Первый практический кейс

На conceptica.world сейчас есть три случайно созданных концепта про лепку. Удалять их пока не стоит именно из-за риска превратить существующие публичные URL в обычные 404.

После появления механики 410 Gone их можно будет использовать как первый реальный кейс окончательного удаления страниц.

Критерии приемки

  • Определена модель хранения permanently removed URI.
  • Администратор может удалить публичную сущность с сохранением tombstone старого URL.
  • Старый URL возвращает HTTP 410 Gone.
  • Неизвестные URL по-прежнему возвращают 404.
  • Для 410 есть пользовательская страница «Страница удалена навсегда».
  • Определен приоритет между 301, 410 и обычным 404.
  • URI удаленной страницы не может быть случайно переиспользован без явного решения.
  • Добавлены тесты на 301, 410, 404 и конфликт правил.
  • Проверено SEO-поведение: deleted page не содержит canonical на саму себя и не индексируется как действующий документ.
  • После реализации механику можно применить к случайным концептам conceptica.world.