
Django 23. Добавляем sitemap и счётчики
В этом посте мы добавим формирование файлов sitemap.xml и robots.txt для поисковых систем и настроим счётчики статистики посещений.
Все статьи

- 30 Январь 2025 Django 45. Оглавление статьи, кнопка "Вернуться наверх" и "Поделиться" Комментарии к посту
- 25 Июль 2024 Django 44. Отправка электронной почты в фоновом режиме Комментарии к посту
- 18 Июль 2024 Django 43. Подключаем Celery и Redis для фоновой отправки почты Комментарии к посту
- 06 Июнь 2024 Django 42. Запуск Django-проекта на VPS Комментарии к посту
- 03 Апрель 2024 Django 41. Комментарии к постам Комментарии к посту
- 25 Январь 2024 Django 40. Собственные страницы ошибок Комментарии к посту
- 09 Январь 2024 Django 39. Капча и подтверждение регистрации по email Комментарии к посту
- 19 Декабрь 2023 Django 38.2. Добавление, редактирование, удаление поста Комментарии к посту
- 14 Декабрь 2023 Django 38.1. Кабинет и все посты автора Комментарии к посту
- 28 Ноябрь 2023 Django 37. Две формы - добавление категории и файла Комментарии к посту
- 13 Ноябрь 2023 Django 36. Добавление постов пользователем Комментарии к посту
- 31 Октябрь 2023 Django 35.2. Расширенный профиль пользователя - форма и шаблон Комментарии к посту
- 29 Октябрь 2023 Django 35.1. Расширенный профиль пользователя - модель и сигналы Комментарии к посту
- 25 Октябрь 2023 Django 34.2. Простой профиль пользователя - страница настроек Комментарии к посту
- 23 Октябрь 2023 Django 34.1. Простой профиль пользователя - страница профиля Комментарии к посту
- 20 Октябрь 2023 Django 33. Сброс пароля пользователя Комментарии к посту
- 12 Октябрь 2023 Django 32. Форма регистрации Комментарии к посту
- 09 Октябрь 2023 Django 31. Форма авторизации и кнопка выхода Комментарии к посту
- 29 Сентябрь 2023 Django 30. Рефакторинг и допущенные ошибки Комментарии к посту
- 16 Сентябрь 2023 Django 29.2 Добавляем поиск на сайт, продолжение Комментарии к посту
- 14 Сентябрь 2023 Django 29.1 Добавляем поиск на сайт Комментарии к посту
- 08 Сентябрь 2023 Django 28. Добавляем пагинацию на сайт Комментарии к посту
- 06 Сентябрь 2023 Django 27.2 Представления на основе классов - Практика Комментарии к посту
- 06 Сентябрь 2023 Django 27.1 Представления на основе классов Комментарии к посту
- 06 Сентябрь 2023 Django 26. Контекстные процессоры Комментарии к посту
- 06 Сентябрь 2023 Django 25. Добавляем теги к постам Комментарии к посту
- 06 Сентябрь 2023 Django 24. Связь модели файла и поста Комментарии к посту
- 06 Сентябрь 2023 Django 23. Добавляем sitemap и счётчики Комментарии к посту
- 06 Сентябрь 2023 Django 22. Представление для страницы поста Комментарии к посту
- 05 Сентябрь 2023 Django 21. Регистрация модели поста Комментарии к посту
- 05 Сентябрь 2023 Django 20. Модель поста Комментарии к посту
- 05 Сентябрь 2023 Django 19. Визуальный редактор CKEditor5 Комментарии к посту
- 05 Сентябрь 2023 Django 18. Представление для главной и категорий Комментарии к посту
- 05 Сентябрь 2023 Django 17. Разделение шаблонов Комментарии к посту
- 05 Сентябрь 2023 Django 16. Модель категорий Комментарии к посту
- 05 Сентябрь 2023 Django 15. Пишем API - Добавление пользователя Комментарии к посту
- 05 Сентябрь 2023 Django 14. Модель пользователя бота Комментарии к посту
- 02 Сентябрь 2023 Django 13. Сброс пароля Комментарии к посту
- 02 Сентябрь 2023 Django 12. Настройка отправки почты Комментарии к посту
- 10 Август 2023 Django 11. Пишем API - Обработчик запросов Комментарии к посту
- 10 Август 2023 Django 10. Пишем API - Сериализатор Комментарии к посту
- 08 Август 2023 Django 9. Регистрация модели Комментарии к посту
- 08 Август 2023 Django 8. Первая модель Комментарии к посту
- 03 Август 2023 Django 7. Первое представление Комментарии к посту
- 03 Август 2023 Django 6. Базовый шаблон Комментарии к посту
- 30 Июль 2023 Django 5. Инициализация приложения блога Комментарии к посту
- 27 Июль 2023 Django 4. Суперпользователь и первый запуск Комментарии к посту
- 26 Июль 2023 Django 3. Базовая конфигурация Комментарии к посту
- 26 Июль 2023 Django 2. Создание проекта Комментарии к посту
- 23 Июль 2023 Django 1. Установка Django Комментарии к посту
Дополнительные материалы

Для скачивания материалов необходимо войти или зарегистрироваться
Файлы также можно получить в Telegram-боте по коду: 276141
Реклама

Как и для любого сайта, аналитика посещений очень важна. Как и индексирование сайта в поисковых системах.
В этом посте опишу, как удобно встроить счётчики Яндекс.Метрики и Google Analytics в шаблон сайта, как создать файлы sitemap.xml
и robots.txt
.
Начнём с аналитики и счётчиков.
Дабы не засорять код базового шаблона длинными скриптами со счётчиками Яндекса и Google, установим пакет pip install django-analytical
. Пропишем его в requirements.txt
и добавим analytical
в INSTALLED_APPS
.
В этом же файле пропишите ваши номера счётчиков:
# Статистика
YANDEX_METRICA_COUNTER_ID = ''
GOOGLE_ANALYTICS_GTAG_PROPERTY_ID = ''
Все доступные виды счётчиков, можно найти в официальной документации: https://django-analytical.readthedocs.io/en/latest/
Добавление счётчиков в шаблон.
Затем перейдём в файл base.html
. Нам необходимо вставить теги аналитики.
В самом верху файла, после тега подключения статики, добавьте тег {% load analytical %}
.
Затем, в блоке <head>
добавьте два тега. Один в самое начало блока, второй в самый конец:
{% analytical_head_top %}
{% analytical_head_bottom %}
Точно также и со следующими двумя тегами, но уже в блок <body>
:
{% analytical_body_top %}
{% analytical_body_bottom %}
На этом всё. В скором времени, на странице счётчика начнёт появляться статистика.
Теперь займёмся настройкой файла sitemap.xml
.
Перейдём в файл settings.py
и в INSTALLED_APPS
добавим следующие модули:
'django.contrib.sites',
'django.contrib.sitemaps',
И добавим переменную SITE_ID = 1
в начало файла, после переменной BASE_DIR
.
Модуль django.contrib.sites
добавляет поддержку нескольких сайтов, это нам не нужно, однако это необходимо модулю django.contrib.sitemaps
.
Выполним миграции python manage.py migrate
.
Запустите Django и перейдите в панель администратора. Там будет новый пункт меню Сайты
.
Откройте его. В списке увидите сайт example.com
. Нажмите на него, что бы перейти к редактированию.
На открывшейся странице введите адрес вашего сайта, если он всё ещё на локальной машине, то введите 127.0.0.1
Формирование файла.
В директории приложения создадим файл sitemap.py
.
Создадим класс PostSitemap
унаследованный от Sitemap
.
В теле класса пропишем пять методов(для класса категории, их будет четыре):
items
- метод, возвращающий все объекты модели. В нашем случае, все опубликованные постыlastmod
- метод, возвращающий дату обновления поста. Данный метод не нужен для класса с категориями, поскольку у нас нет поля изменения категорииpriority
- метод, возвращающий приоритет для объектов модели. Приоритет определяется от 0.0(наименьший), до 1.0(наивысший).changefreq
- метод, возвращающий периодичность обновления постов. Доступные варианты: "always", "hourly", "daily", "weekly", "monthly", "yearly", "never".location
- метод, возвращающий URL-адрес объекта. Обратите внимание на то, что он заполняется также, как и методget_absolute_url
.
Код:
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
from . import models
class PostSitemap(Sitemap):
def items(self):
return models.PostModel.objects.filter(status=models.PostModel.Status.PUBLISHED)
def lastmod(self, obj):
return obj.updated
def priority(self, obj):
return 0.8
def changefreq(self, obj):
return "weekly"
def location(self, obj):
return reverse('blog:post_page', args=[obj.pk, obj.slug])
По аналогии создайте классы для других моделей, которые необходимо внести в файл sitemap.xml
, например, модель категории.
URL-паттерн для карты сайта.
Перейдём в файл urls.py
в директории проекта.
Создадим словарь, в котором перечислим наши классы из файла sitemap.py
и в конец urlpatterns
добавим строку для доступа к файлу:
from django.contrib.sitemaps.views import sitemap
from blog.sitemap import PostSitemap, CategorySitemap
sitemaps = {
'PostSitemap': PostSitemap,
'CategorySitemap': CategorySitemap,
}
urlpatterns = [
# ...
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
]
Создание robots.txt
.
Для создания файла robots.txt
, достаточно сделать всего два действия.
Первое, что необходимо сделать - это создать сам файл. Перейдём в директорию static
и в корне создадим файл robots.txt
.
В нём пропишите необходимые разрешения или запреты для поисковых роботов, например, самый простой вариант:
User-agent: *
Disallow: /admin/
Второе, что необходимо сделать - это прописать URL-паттерн для доступа к файлу.
Откроем файл urls.py
в директории проекта и в конец urlpatterns
добавим следующую строку:
from django.urls import path, include, re_path
from django.views.static import serve
re_path(r'.txt$', serve, {'document_root': settings.STATIC_ROOT, 'path': "robots.txt"}),
На этом всё. Осталось добавить файлы в отслеживание поисковых систем.
Комментарии
-
-
9 февраля 2025 г. 20:14
Не понимаю претензии. Открыв ссылку с документацией прямо на главной странице есть перечень всех поддерживаемых счётчиков, выбираешь нужный и читаешь подробности работы с ним.
-
-
9 февраля 2025 г. 16:58
Лучше писать в каком файле ты работаешь, а то не все могут понять что INSTALLED_APPS находится в settings.py. При этом в коде ниже ты таки пишешь что работаешь в settings.py. То есть не сразу начинаешь об этом писать.
-
9 февраля 2025 г. 20:15
Этот пост не отдельный гайд, а 23-й по счёту пост в серии, которые подразумеваются единым курсом.
-
-
9 февраля 2025 г. 19:58
На этом всё. Осталось добавить файлы в отслеживание поисковых систем.(с) - что ты здесь имеешь ввиду?
-
9 февраля 2025 г. 20:16
Что необходимо пойти в панель управления поисковой системы и прикрепить там свой robots.txt и sitemap.xml, сами они их если и найдут, то к следующей зиме 2077-го года.
-
-
9 февраля 2025 г. 20:01
127.0.0.1 - есть ли смысл его писать для локальной машины если аналитика и метрики проверяют урл от прода? Локально что-то вообще работает интересно (чисто для теста вопрос)
-
9 февраля 2025 г. 20:18
Локально тоже отслеживается при установленном номере счётчика, чтобы этого не было, можно в настройках поисковой системы выставить отслеживание только конкретного домена, а не любого, где есть счётчик.
-
9 февраля 2025 г. 20:35
Вот тут интересная инфа я этого не знал.
-
Arduinum628
9 февраля 2025 г. 16:31
По счётчикам не совсем удобно. Я бы дал ссылку на нужные счётчики в статье, а не на всю документацию библиотеки аналитики для джанго.
Войдите чтобы добавить комментарий.