正在进入ing...

Django 给站点增加sitemap.xml 对搜索引擎更加友好

发布时间:2021-04-01 浏览量: 1372 文章分类: python

Django 开发站点的时候,一般都会说给站点最好增加sitemap.xml,这样方便搜索引擎抓取和识别。

首先不用太担心,即使你是一个Django新手,跟着我的方法来也肯定是可以的。我会说的细致一些。

认知

一般来说sitemap主要是为了给站点经常更新或发布的资源类似增加了一个索引,方便搜索引擎快速的知道我们更新了什么内容,从而进行抓取。

Django的准备工作

先在项目的settings中引入'django.contrib.sites''django.contrib.sitemaps'这2个中间件。同时增加一个配置SITE_ID = 1,接下来就开始同步一下数据库。Django会自动同步并生成2个表。这些基本都是固定的,没有什么需要我们设置的。

开发工作

其实与其说是开发工作,也相当于是按部就班的照着写就可以了。 先在项目中创建一个sitemap.py文件。 * 假设我想将网站的新闻同步到sitemap.xml

# sitemap.py
from django.contrib.sitemaps import Sitemap
from models import NewsModels  # NewsModels 是我自己创建的新闻类

class NewsSiteMap(Sitemap):
    changefreq = 'weekly'
    priority = 0.9
    def items(self):
        return news_models.NewsModels.objects.all()

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

我的新闻数据库表如下

# models.py
class NewsModels(models.Model):
    title = models.CharField(max_length=100,verbose_name='新闻标题')
    ification = models.ForeignKey(NewsClassification, on_delete=models.CASCADE, verbose_name='新闻分类', db_index=True)
    desc = models.CharField(max_length=180, verbose_name='新闻描述', help_text='用于SEO相关')
    tags = models.CharField(max_length=120,verbose_name='文章关键词',null=True,blank=True,help_text='新闻关键词SEO相关')
    create_time = models.DateTimeField(verbose_name='发布时间', auto_now_add=True)
    update_time = models.DateTimeField(verbose_name='修改时间', auto_now=True)
    content = models.TextField(verbose_name='新闻内容')
    looks = models.BigIntegerField(default=0,verbose_name='浏览次数')
    create_user = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='发布人')
    is_news = models.BooleanField(default=True,verbose_name='是否新闻',help_text='选择为否的话可以不在新闻列表,需要用链接引用')
    push_date = models.DateTimeField(verbose_name='提交日期',null=True,blank=True)

    def __str__(self):
        return self.title
    class Meta:
        verbose_name = '新闻明细'
        ordering = ('-id',)

    def get_absolute_url(self):
        return 'news-info/' + str(self.id) + '/'

这里主要注意一下,在models的模型类下面要增加一个get_absolute_url,它是用来生成sitemap.xml中的url的。具体要根据你页面的url规则设置一下。

URL配置

这一步也比较简单

# urls.py
from django.contrib.sitemaps.views import sitemap # 网站地图
from web import sitemaps # 新闻的网站地图

sitemaps = {
    'news':sitemaps.NewsSiteMap,
}

urlpatterns = [
    ... # 原本你设置的urlpath
    path('sitemap.xml',sitemap,{'sitemaps':sitemaps},name='django.contrib.sitemaps.views.sitemap'),
]

然后重启项目,正常情况就基本都OK了。

具体的一些释义问题

以上面的例子为主,这里主要讲一下 NewsSiteMap这个类的含义 首先sitemap中包含的种类比较多,但是我们主要用的其实就只要loclastmodchangefreqpriority 具体的释义如下

代码 解释
urlset 定义.xml的命名空间
url 具体某个链接地址
loc 页面永久链接地址
lastmod 页面最后修改时间
changefreq 页面内容更新频率
priority 重要性 0~1

changefreq

可用值 解释
always 经常
hourly 小时为单位更新
daily 天为单位更新
weekly 周为单位更新
monthly 月为单位更新
yearly 年为单位更新
  • 首页就可以使用always,很久不更新的 就可以使用yearly,这块具体的逻辑如果需要的话,就要自己在完善类。

priority

设置页面的权重值比例,取值范围是 0.0~1.0之间,值越大,表示此链接的优先级越高。

可能会出现的错误

如果不是代码的问题,请先不要着急,优先登陆一下admin管理后台,然后在里面多了一个站点,请确认一下是否有内容,如果没有内容的话,请添加添加一下站点名称和地址,然后在看看。