Nə üçün sayt xəritəsi və lent

Axtarış robotu yalnız keçidlərlə gedə bilir. Dərin və ya yeni səhifələr gec tapılır. sitemap.xml isə URL-lərin açıq siyahısıdır. RSS/Atom lenti isə eyni məzmunu maşın oxuya bilən formada paylayır. Django bunların hamısını django.contrib ilə verir.

Robot robots.txt vasitəsilə sitemap.xml tapır
Robot robots.txt vasitəsilə sitemap.xml tapır
AlətÜnvanKimin üçün
Sitemap/sitemap.xmlaxtarış robotları
Feed/feeds/rss/oxucu proqramlar
robots.txt/robots.txtbütün robotlar

Quraşdırma

INSTALLED_APPS-a django.contrib.sites, django.contrib.sitemaps və django.contrib.syndication əlavə edin. SITE_ID = 1 təyin edin. sites olmasa Django cari sorğunun hostunu işlədir, amma sites ilə domen bir yerdə saxlanılır.

python
# settings.py
INSTALLED_APPS = [
    # ...
    "django.contrib.sites",
    "django.contrib.sitemaps",
    "django.contrib.syndication",
    "blog",
]

SITE_ID = 1

⚠️ migrate-dən sonra standart Site yazısı example.com-dur. Admin-də və ya shell-də onu real domenə dəyişin: Site.objects.update(domain="example.org", name="Example").

Sitemap sinfi

Model get_absolute_url() metoduna malik olmalıdır. Sitemap-in items() metodu obyektləri verir, lastmod() dəyişmə tarixini.

python
# blog/models.py
from django.db import models
from django.urls import reverse

class Post(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(unique=True)
    body = models.TextField()
    published = models.BooleanField(default=False)
    published_at = models.DateTimeField(null=True, blank=True)
    updated_at = models.DateTimeField(auto_now=True)

    def get_absolute_url(self):
        return reverse("blog:post-detail", kwargs={"slug": self.slug})
python
# blog/sitemaps.py
from django.contrib.sitemaps import Sitemap
from django.urls import reverse

from .models import Post

class PostSitemap(Sitemap):
    changefreq = "weekly"
    priority = 0.8
    protocol = "https"