Django 23. Добавляем sitemap и счётчики
В этом посте мы добавим формирование файлов sitemap.xml и robots.txt для поисковых систем и настроим счётчики статистики посещений.
Дополнительные материалы
Для скачивания материалов необходимо войти или зарегистрироваться
Файлы также можно получить в 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"}),
На этом всё. Осталось добавить файлы в отслеживание поисковых систем.
Все статьи