Django How to create Sitemaps for the blog application
sitemap is an XML file that informs search engines such as Google, the pages of your website, their relevance, and how frequently they are updated.
sitemap plays a crucial role in modern SEO (Search Engine Optimization).
In this article, we will learn how to create sitemaps for the blog application
Installation
Add 'django.contrib.sitemaps' in INSTALLED_APPS setting setting.py
INSTALLED_APPS += ( 'django.contrib.sitemaps',)
Part 1 : Django Build a blog application with bootstrap and Automatically Generate slugs
https://tutorial101.blogspot.com/2020/05/django-build-blog-application-with.html
Part 2 : Django Build a blog application Part 2 with WYSIWYG Editor Pagination and Comments
https://tutorial101.blogspot.com/2020/05/django-build-blog-application-part-2.html
#models.py from django.db import models from django.contrib.auth.models import User from django.utils.text import slugify STATUS = ( (0,"Draft"), (1,"Publish") ) class Post(models.Model): title = models.CharField(max_length=200, unique=True) slug = models.SlugField(max_length=200, unique=True) author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='myapp_post') updated_on = models.DateTimeField(auto_now= True) content = models.TextField() created_on = models.DateTimeField(auto_now_add=True) status = models.IntegerField(choices=STATUS, default=0) class Meta: ordering = ['-created_on'] def __str__(self): return self.title def get_absolute_url(self): from django.urls import reverse return reverse("post_detail", kwargs={"slug": str(self.slug)}) class Meta: db_table = "myapp_post" def save(self, *args, **kwargs): value = self.title self.slug = slugify(value, allow_unicode=True) super().save(*args, **kwargs)create a new file sitemaps.pyand add the following
#sitemaps.py from django.contrib.sitemaps import Sitemap from myapp.models import Post class PostSitemap(Sitemap): changefreq = "weekly" priority = 0.8 def items(self): return Post.objects.filter(status=1) def lastmod(self, obj): return obj.updated_onoptional changefreq and priority attributes indicate the change frequency of post
Possible values for changefreq, whether you use a method or attribute, are:
‘always’
‘hourly’
‘daily’
‘weekly’
‘monthly’
‘yearly’
‘never’
Sitemap.py
from django.contrib.sitemaps.views import sitemap
from myapp.sitemaps import PostSitemap
sitemaps = {
"posts": PostSitemap,
}
urlpatterns = [
..........
path("sitemap.xml", sitemap, {"sitemaps": sitemaps}, name="sitemap"),
.........
]
run the server and visit http://127.0.0.1:8000/sitemap.xml
To explore more visit – https://docs.djangoproject.com/en/3.0/ref/contrib/sitemaps/