Как и для любого сайта, аналитика посещений очень важна. Как и индексирование сайта в поисковых системах.
В этом посте опишу, как удобно встроить счётчики Яндекс.Метрики и 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"}),
На этом всё. Осталось добавить файлы в отслеживание поисковых систем.
Комментарии
Оставить комментарийВойдите, чтобы оставить комментарий.
По счётчикам не совсем удобно. Я бы дал ссылку на нужные счётчики в статье, а не на всю документацию библиотеки аналитики для джанго.
Не понимаю претензии. Открыв ссылку с документацией прямо на главной странице есть перечень всех поддерживаемых счётчиков, выбираешь нужный и читаешь подробности работы с ним.
Лучше писать в каком файле ты работаешь, а то не все могут понять что INSTALLED_APPS находится в settings.py. При этом в коде ниже ты таки пишешь что работаешь в settings.py. То есть не сразу начинаешь об этом писать.
Этот пост не отдельный гайд, а 23-й по счёту пост в серии, которые подразумеваются единым курсом.
На этом всё. Осталось добавить файлы в отслеживание поисковых систем.(с) - что ты здесь имеешь ввиду?
Что необходимо пойти в панель управления поисковой системы и прикрепить там свой robots.txt и sitemap.xml, сами они их если и найдут, то к следующей зиме 2077-го года.
127.0.0.1 - есть ли смысл его писать для локальной машины если аналитика и метрики проверяют урл от прода? Локально что-то вообще работает интересно (чисто для теста вопрос)
Локально тоже отслеживается при установленном номере счётчика, чтобы этого не было, можно в настройках поисковой системы выставить отслеживание только конкретного домена, а не любого, где есть счётчик.
Вот тут интересная инфа я этого не знал.