From b348c8fe81694c34097e6960ab4d4b28766b35b9 Mon Sep 17 00:00:00 2001 From: erjemin Date: Sat, 18 Apr 2026 13:28:15 +0300 Subject: [PATCH] mod: rework sitemap generation and seo coverage --- .env.sample | 6 + oknardia/oknardia/settings.py | 11 +- oknardia/oknardia/urls.py | 2 - oknardia/templates/service/index.html | 1 - oknardia/web/management/__init__.py | 2 + oknardia/web/management/commands/__init__.py | 2 + .../management/commands/generate_sitemaps.py | 612 ++++++++++++++++++ oknardia/web/service.py | 183 ------ public/robots.txt | 5 +- 9 files changed, 633 insertions(+), 191 deletions(-) create mode 100644 oknardia/web/management/__init__.py create mode 100644 oknardia/web/management/commands/__init__.py create mode 100644 oknardia/web/management/commands/generate_sitemaps.py diff --git a/.env.sample b/.env.sample index 9515621..ef144b7 100644 --- a/.env.sample +++ b/.env.sample @@ -16,6 +16,9 @@ DEBUG=False # Допустимые хосты (разделены запятой без пробелов) ALLOWED_HOSTS=localhost,127.0.0.1,yourdomain.com +# Базовый публичный URL сайта (используется для абсолютных URL в sitemap.xml) +SITE_BASE_URL=https://yourdomain.com + # Админы для email-оповещений Django (формат: Имя:email,Имя2:email2) ADMINS=Admin:admin@example.com @@ -40,6 +43,9 @@ DATABASE_NAME=oknadria.sqlite3 # Пути вычисляются автоматически внутри settings.py от PROJECT_ROOT TOUCH_RELOAD=/app/logs/touch-reload.txt +# Подкаталог в MEDIA_ROOT, где хранится кеш sitemap-файлов +SITEMAP_SUBDIR=_serv_sitemap + # ============================================================================ # EMAIL # ============================================================================ diff --git a/oknardia/oknardia/settings.py b/oknardia/oknardia/settings.py index c5303e7..bd24a5f 100644 --- a/oknardia/oknardia/settings.py +++ b/oknardia/oknardia/settings.py @@ -68,7 +68,7 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'django.contrib.humanize', - # 'django.contrib.sitemaps', + 'django.contrib.sitemaps', 'oknardia.apps.OknardiaConfig', 'web.apps.WebConfig', @@ -146,7 +146,14 @@ MEDIA_URL = '/media/' MEDIA_ROOT = str(PUBLIC_ROOT / 'media') # STATIC_ROOT отделен от исходной статики, чтобы избежать staticfiles.E002. STATIC_ROOT = str(PUBLIC_ROOT / 'static_collected') -SITEMAP_ROOT = str(PUBLIC_ROOT) + +# Базовый URL сайта нужен для абсолютных URL в sitemap.xml. +SITE_BASE_URL = env('SITE_BASE_URL', default='https://oknardia.ru').rstrip('/') +# Файлы sitemap храним в media-volume, чтобы переживали пересоздание контейнера. +SITEMAP_SUBDIR = env('SITEMAP_SUBDIR', default='_serv_sitemap').strip('/ ') +SITEMAP_ROOT = str(Path(MEDIA_ROOT) / SITEMAP_SUBDIR) +SITEMAP_URL_PREFIX = f"{MEDIA_URL.rstrip('/')}/{SITEMAP_SUBDIR}" +SITEMAP_INDEX_URL = f"{SITE_BASE_URL}{SITEMAP_URL_PREFIX}/sitemap.xml" # Каталоги, откуда Django читает исходную статику в DEBUG-режиме. STATICFILES_DIRS = [ diff --git a/oknardia/oknardia/urls.py b/oknardia/oknardia/urls.py index 611008f..9397347 100644 --- a/oknardia/oknardia/urls.py +++ b/oknardia/oknardia/urls.py @@ -96,8 +96,6 @@ urlpatterns = [ re_path(r'^service/tmp[/*]$', service.tmp), # --- страничка "нет доступа" re_path(r'^service/not-denice[/*]$', service.not_denice), - # --- создание файлов sitemap.xml - re_path(r'^service/make_sitemaps[/*]$', service.make_site_maps), re_path(r'^service/make_rating[/*]$', service.make_rating), ] diff --git a/oknardia/templates/service/index.html b/oknardia/templates/service/index.html index 0eb9103..94ac955 100755 --- a/oknardia/templates/service/index.html +++ b/oknardia/templates/service/index.html @@ -12,7 +12,6 @@