前言
sitemap虽然对SEO来说,不一定有加分的效果。但是sitemap还是能帮助搜寻引擎对你的网站进行索引
Django就自带了相关的套件来帮助快速製作sitemap,使用该套件可以自动处理分页问题,也不用另外在写方法去跟资料库交互,真的很方便
配置
需要配置'django.contrib.sitemaps'到settings.py中的INSTALLED_APPS中套用这个配置不会额外安装任何资料表,只是为了要让Loader()能找到初始模板需要确保在settings.py中Temaplates配置的APP_DIRS为True有的网站还有提到需要添加django.contrib.sites等配置,除非同一个专案下有不同domain要调控或是其他因素才要设置,我自己是没用到,我理解错误的话可以在下方纠正我~
步骤
在跟settings.py同级的目录下新建sitemap.py档
在sitemap.py引入django.contrib.sitemaps.Sitemap以及你要用的model
在sitemap.py档中建立Sitemap的子类
其中属性的chagefreq跟priority去看参考资料里面给的文档,另外如果网站是https要加上protocol
该类的方法只有items是一定要的,lastmod跟location不是必须,其他还有很多不同的方法可以去看官方文档
以下稍微说一下我使用的三个方法:
items
是必须的,将你要筛选的资料选出来,返回对象的sequence或QuerySet方法
loaction
可选项,返回对象的绝对路径,所以如果对象本身没有get_absolute_url()会报错
lastmod
可选项,返回datetime,可以自己设定或是对象的datetime属性
最后在底下写下字典sitemaps,方便urls.py去调用特定的类
接着去urls.py中设定好url
就可以在sitemap.xml路径下看到xml了
但是当今天需要为每个sitemap设置sitemap index时,我们就需要修改一下方法。至于sitemap index也就是将为每一个sitemap去製作索引,让浏览器知道要去看这个站点的所有sitemap应该怎么走
先在urls.py中引入django.contrib.sitemaps.views中的index方法from django.contrib.sitemaps.views import index接着修改路由配置

接着我们就可以看到结果啦~
首先去sitemap.xml
接着去sitemap-brand.xml
可以看到结果就如同预期一样~
参考
官方文档:https://docs.djangoproject.com/zh-hans/3.2/ref/contrib/sitemaps/
sitemap格式文档:https://www.sitemaps.org/protocol.html