Вступление
Карта сайта или sitemap, неотъемлемый компонент любого сайта. Несмотря даже на то, что сегодня уже существуют такие технологии мгновенной индексации как IndexNow, sitemap помогает поисковым движкам узнать о структуре твоего сайта и тех страницах, которые было бы неплохо проиндексировать.
У тебя есть два варианта, того как можно было бы добавить карту на сайт. Первый, написать в ручную (Не рекомендую). Второй, сгенерировать при помощи Django-встроенных утилит. Второй способ, в отличие от первого, предполагает, что ты, один раз написав, больше никогда не вспомнишь об этом. Вот.
Пишем sitemap
Первое, что надо сделать, это создать файл sitemap.py в любом, подходящем месте. В моём случае, обычно, я создаю его в Backend приложении. Полагаю, это имеет смысл. Дальше будем работать только в sitemap.py. По традиции, сначала вывалю весь код сразу, а объяснение потом:
Здесь представлены 3 случая использования карт сайта. Первый, ArticleSitemap, запихивает в sitemap статьи на сайте. Второй, ArticlePaginationSitemap, работает со страницами пагинации.
И третий класс, StaticSitemap работает со статическими страницами. То есть страницами, которые не меняются и не генерируются сотнями. Я о страницах контактов, об авторе и домашней, в общем, единичных и уникальных страницах.
У класса Sitemap есть 3 основных(но есть и другие), как по мне, метода, которые могут пригодиться каждому:
- items - определяет, то что вернётся и сколько элементов вернётся в списке.
- location - возвращает, какой путь вернуть
- lastmod - возвращает дату последнего обновления контента, статьи, категории.
Так же, в StaticSitemap, я использую такой модификатор как i18n=True. Делаю я это потому, что у меня, данные страницы есть в нескольких вариантов перевода. Поэтому, например, вернётся не http://website.com/article1, но http://website.com/ru/article1 + http://website.com/en/article1.
Подключаем sitemap
После того как ты написал свои классы Sitemap, нужно будет ещё их подключить в главном urls.py, там где подключаются урлы приложений. А ещё подключить соответствующее django-приложение в settings.py. Файл urls.py:
Файл settings.py:
Мы импортируем созданные ранее классы Sitemap, плюс представление для наших карт сайта. После, создаём словарь для всех созданных классов и подключаем к urlpatterns. Да, подключаем мы их не в urlpatterns = + i18n_patterns, ибо по заветам поисковиков, карты сайта должны быть в корневой директории.
Не забудь добавить ссылку на sitemap в robots.txt:
Заключение
Хотелось бы добавить, что возможности генерации карт сайта этим не ограничиваются. Можно генерировать сразу несколько, и объединять их в индексную карту сайта. Или можно сгенерировать robots.txt в django и уже без ручного вмешательства объединять с картой сайта. В любом случае для более глубокого ознакомления с темой, рекомендую почитать официальную документацию.