Cat

Django 23. Добавляем sitemap и счётчики

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

Все статьи

Icon Link

Дополнительные материалы

Icon Link

Реклама

Icon Link
Сайт на Django proDream 06 Сентябрь 2023 Просмотров: 1203

Как и для любого сайта, аналитика посещений очень важна. Как и индексирование сайта в поисковых системах.

В этом посте опишу, как удобно встроить счётчики Яндекс.Метрики и 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"}),

 

На этом всё. Осталось добавить файлы в отслеживание поисковых систем.

Автор

    Нет комментариев

    Реклама