Files
2018-lpon-site/_prj_blueprint/ROUTING.md
T

3.4 KiB
Raw Blame History

Архитектурные решения: Роутинг, SEO-редиректы

Дата и время создания: 02.08.2026 23:45
Проект: LPON.RU (Django 6.0+, Python 3.12)
Статус: Согласованная архитектура


1. Стратегия Роутинга и SEO

1.1. Плоский единый роутер из корня (/<slug>/)

  • Отказываемся от искусственных служебных префиксов в URL (например, /hub/<slug>/). Все статьи, хабы, музыкальные стили и категории живут на первом уровне: lpon.ru/vinyl/, lpon.ru/cassettes/, lpon.ru/about/.
  • В urls.py в самом конце списка роутов устанавливается универсальный Catch-All роут:
    path('<slug:slug>/', views.UniversalSlugView.as_view(), name='universal_slug')
    

1.2. Безопасная обработка отсутствующих слагов (HTTP 200 Заглушка)

  • Проблема 404: Если в шапке/подвале/каталоге есть ссылка на раздел (например, /vinyl/), но в базе данных соответствующая статья TbArticle со слагом vinyl ещё не создана, отдавать честную 404-ошибку вредно для SEO (поисковики штрафуют за битые ссылки с главных страниц).
  • Решение:
    1. Диспетчер ищет slug в TbArticle (и смежных справочниках).
    2. Если статья со слагом не найдена — вместо ответа 404 Not Found возвращается HTTP 200 OK со специальным шаблоном-заглушкой (hub_placeholder.html).
    3. Для обычного пользователя отображается аккуратная витрина: "Раздел находится в процессе наполнения".
    4. Для авторизованного администратора (request.user.is_staff) выводится специальное информационное сообщение: "Настрой, дубинушка, вот такой слаг (slug) в админке, и всё починится!".

1.3. SEO-оптимизация и 301 Permanent Redirects для специализированных разделов

  • Если страница найдена по общему роуту /<slug>/, но её l_article_type указывает на строго профильный раздел (например, l_article_type == 'blog' или l_article_type == 'item'), и у этой сущности есть свой канонический префиксный путь (например, /blog/<slug>/ или /item/<slug>/):
    • Сервер выполняет HTTP 301 Permanent Redirect с общего пути /<slug>/ на канонический адрес /blog/<slug>/.
  • Зачем это нужно:
    • Исключает появление дублей страниц в индексе поисковых систем (Яндекс / Google).
    • Чётко разграничивает контентные материалы (новости, статьи) и торговые предложения/хабы.