3 горизонтальные линии, бургер
3 горизонтальные линии, бургер
3 горизонтальные линии, бургер
3 горизонтальные линии, бургер

3 горизонтальные линии, бургер
Удалить все
ЗАГРУЗКА ...

Содержание



    Как сгенерировать карту сайта (sitemap) используя Django

    Часы
    17.04.2025
    /
    Часы
    01.10.2025
    /
    Часы
    3 минуты
    Глазик
    699
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0

    Вступление

    Карта сайта или sitemap, неотъемлемый компонент любого сайта. Несмотря даже на то, что сегодня уже существуют такие технологии мгновенной индексации как IndexNow, sitemap помогает поисковым движкам узнать о структуре твоего сайта и тех страницах, которые было бы неплохо проиндексировать.
    У тебя есть два варианта, того как можно было бы добавить карту на сайт. Первый, написать в ручную (Не рекомендую). Второй, сгенерировать при помощи Django-встроенных утилит. Второй способ, в отличие от первого, предполагает, что ты, один раз написав, больше никогда не вспомнишь об этом. Вот.

    Пишем sitemap

    Первое, что надо сделать, это создать файл sitemap.py в любом, подходящем месте. В моём случае, обычно, я создаю его в Backend приложении. Полагаю, это имеет смысл. Дальше будем работать только в sitemap.py. По традиции, сначала вывалю весь код сразу, а объяснение потом:
    from django.urls import reverse from django.core import paginator from django.contrib.sitemaps import Sitemap from .models import Article, LanguageType from Frontend.views import HomeView class ArticleSitemap(Sitemap): def items(self): articles = Article.objects.filter(is_published=True).order_by('-time_published') return articles def lastmod(self, obj): return obj.time_updated def location(self, obj): return f"/{obj.lang_type}/{obj.slug}" class ArticlePaginationSitemap(Sitemap): def items(self): items = [] types = [] for member in dir(LanguageType): if member.startswith('LANG_TYPE_'): types.append(member) for type in types: articles = Article.objects.filter(is_published=True).filter(lang_type=LanguageType[type]).order_by('-time_published') pagi = paginator.Paginator(articles, per_page=HomeView.page_size) for page in pagi.page_range: items.append({ "page": page, "lang": LanguageType[type] }) return items def location(self, item): if item["page"] == 1: return f"/{item["lang"]}/" else: return f"/{item["lang"]}/?page={item["page"]}" class StaticSitemap(Sitemap): i18n = True def items(self): return ["o-proekte"] def location(self, item): return reverse(item)
    Здесь представлены 3 случая использования карт сайта. Первый, ArticleSitemap, запихивает в sitemap статьи на сайте. Второй, ArticlePaginationSitemap, работает со страницами пагинации.
    Конечно, не все SEO специалисты согласны с тем, что такие страницы вообще стоит пихать в поисковой индекс, но как по мне стоит и по этому некоторые из них будут в карте сайта.
    И третий класс, StaticSitemap работает со статическими страницами. То есть страницами, которые не меняются и не генерируются сотнями. Я о страницах контактов, об авторе и домашней, в общем, единичных и уникальных страницах.
    У класса Sitemap есть 3 основных(но есть и другие), как по мне, метода, которые могут пригодиться каждому:
    1. items - определяет, то что вернётся и сколько элементов вернётся в списке.
    2. location - возвращает, какой путь вернуть
    3. 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:
    from django.contrib.sitemaps.views import sitemap from Backend.sitemaps import ArticleSitemap, ArticlePaginationSitemap, StaticSitemap sitemaps = { "articles": ArticleSitemap, "static": StaticSitemap, "pagination": ArticlePaginationSitemap } urlpatterns = [ path('admin/', admin.site.urls), path('captcha/', include('captcha.urls')), path( "sitemap.xml", sitemap, {"sitemaps": sitemaps}, name="django.contrib.sitemaps.views.sitemap", ), ]
    Файл settings.py:
    INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sitemaps', ]
    Мы импортируем созданные ранее классы Sitemap, плюс представление для наших карт сайта. После, создаём словарь для всех созданных классов и подключаем к urlpatterns. Да, подключаем мы их не в urlpatterns = + i18n_patterns, ибо по заветам поисковиков, карты сайта должны быть в корневой директории.
    Не забудь добавить ссылку на sitemap в robots.txt:
    User-agent: * Disallow: /some_admin/* Host: https://website.com Sitemap: https://website.com/sitemap.xml

    Заключение

    Хотелось бы добавить, что возможности генерации карт сайта этим не ограничиваются. Можно генерировать сразу несколько, и объединять их в индексную карту сайта. Или можно сгенерировать robots.txt в django и уже без ручного вмешательства объединять с картой сайта. В любом случае для более глубокого ознакомления с темой, рекомендую почитать официальную документацию.


    Не забудь поделиться, лайкнуть и оставить комментарий)

    Комментарии

    (0)

    captcha
    Отправить
    ЗАГРУЗКА ...
    Сейчас тут пусто. Буть первым (o゚v゚)ノ

    Другое

    Похожие статьи


    Как добавить форму обратной связи на Django/Python и HTMx

    Часы
    11.04.2025
    /
    Часы
    01.10.2025
    Глазик
    666
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    В этой статье, я опишу как добавить на ваш Django-сайт форму обратной связи используя HTMx и немного DaisyUI, в качестве UI-библиотеки. Всё будет сделано на примере моего нового сайта. Но …

    Как добавить свою 404, 500 страницу в Django

    Часы
    12.04.2025
    /
    Часы
    01.10.2025
    Глазик
    792
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    В этой статье я опишу процесс создания страниц ошибок 404 и 500. Я покажу два основных способа как это сделать и то как можно быстро и легко настроить сервер для …

    Использованные термины