Создание сайта на Django: Урок 43, создание sitemap.xml в Django для SEO
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Руководства «Django»
Комментариев: 0

И так, для добавления карты сайта, нам необходимо добавить в settings.py встроенный модуль в Django - django.contrib.sitemaps:

backend/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sites',
    'django.contrib.sitemaps',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'mptt',
    'debug_toolbar',
    'taggit',
    'captcha',
    'django_ckeditor_5',
    'modules.blog.apps.BlogConfig',
    'modules.system.apps.SystemConfig',
]

Если вы зашли сюда в первый раз не читая другие уроки до, не пугайтесь, это просто уроки шаг за шагом по созданию сайта, просто делайте те же шаги, добавляя лишь одно приложение django.contrib.sitemaps

На всякий случай проведем миграции:

(venv) PS C:\Users\Razilator\Desktop\Courses\App\backend> python manage.py makemigrations
No changes detected
(venv) PS C:\Users\Razilator\Desktop\Courses\App\backend> python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, blog, contenttypes, sessions, sites, system, taggit
Running migrations:
  No migrations to apply.
(venv) PS C:\Users\Razilator\Desktop\Courses\App\backend> 

Далее нам необходимо создать файл sitemaps.py, я его создам в нашем модуле blog.

modules/blog/sitemaps.py

from django.contrib.sitemaps import Sitemap

from modules.blog.models import Article


class ArticleSitemap(Sitemap):
    """
    Sitemap for articles
    """
    changefreq = 'monthly'
    priority = 0.9

	protocol = 'https'

    def items(self):
        return Article.objects.all()

    def lastmod(self, obj):
        return obj.created_at

Пояснения:

  • items - наши статьи.
  • lastmod - время создания статьи.
  • changefreq - изменение статьи, я поставил как monthly (раз в месяц)
  • priority - приоритет индексации, по умолчанию 0.9
  • protocol - протокол https, если вы подключили для домена ssl сертификат. 

А теперь добавим sitemap в urls.py 

backend/urls.py

from django.contrib import admin
from django.urls import path, include
from django.contrib.sitemaps.views import sitemap

from django.conf.urls.static import static
from backend import settings
from modules.blog.sitemaps import ArticleSitemap

sitemaps = {
    'articles': ArticleSitemap,
}

urlpatterns = [
    path('ckeditor5/', include('django_ckeditor_5.urls')),
    path('admin/', admin.site.urls),
    path('s/', include('modules.system.urls')),
    path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
    path('', include('modules.blog.urls')),
]

if settings.DEBUG:
    urlpatterns = [path('__debug__/', include('debug_toolbar.urls'))] + urlpatterns
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Пояснение:

  • Добавил path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap') импортировав from modules.blog.sitemaps import ArticleSitemap и from django.contrib.sitemaps.views import sitemap

Давайте теперь проверим наш sitemap.xml

Отлично. У Вас все получилось!

Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)