Update sitemap.py

pull/10/head
plhw57tbe 4 months ago
parent bc5e04c973
commit bce979ce7e

@ -1,59 +1,88 @@
# 导入 Django 内置站点地图基类:用于快速实现标准化 sitemap.xml
from django.contrib.sitemaps import Sitemap
# 导入 URL 反向解析工具:生成页面的绝对 URL适配路由命名
from django.urls import reverse
# 导入博客核心模型:用于生成动态内容(文章、分类、标签)的站点地图
from blog.models import Article, Category, Tag
# 静态页面站点地图类:处理无数据库关联的静态页面(如博客首页)
class StaticViewSitemap(Sitemap):
# 优先级0.5(取值 0.0-1.0,值越高搜索引擎越优先抓取,静态页优先级中等)
priority = 0.5
# 更新频率daily每天更新适合内容相对稳定但可能微调的静态页
changefreq = 'daily'
# 定义要包含的静态页面:返回路由名称列表(对应 urls.py 中命名的路由)
def items(self):
return ['blog:index', ]
return ['blog:index', ] # 此处仅包含博客首页(路由名为 'blog:index'
# 生成静态页面的 URL通过路由名称反向解析为绝对路径
def location(self, item):
return reverse(item)
return reverse(item) # item 为 items() 返回的路由名称,如 'blog:index'
# 文章站点地图类处理博客文章的动态页面核心内容SEO 关键)
class ArticleSiteMap(Sitemap):
# 更新频率monthly每月更新适合文章发布后较少修改的场景
changefreq = "monthly"
# 优先级0.6(高于静态页和分类/标签,文章是站点核心内容,优先抓取)
priority = "0.6"
# 定义要包含的文章:仅筛选“已发布”状态的文章(排除草稿、私有文章)
def items(self):
return Article.objects.filter(status='p')
# 文章最后更新时间:用于搜索引擎判断内容是否更新,提升抓取效率
def lastmod(self, obj):
return obj.last_modify_time
return obj.last_modify_time # 引用文章模型的“最后修改时间”字段
# 分类站点地图类:处理文章分类页面(聚合类内容,辅助 SEO
class CategorySiteMap(Sitemap):
# 更新频率Weekly每周更新分类内容更新频率低于文章
changefreq = "Weekly"
# 优先级0.6(与文章同级,分类页是重要的内容聚合入口)
priority = "0.6"
# 定义要包含的分类:获取所有分类(无论是否有文章,确保分类页被收录)
def items(self):
return Category.objects.all()
# 分类最后更新时间:判断分类下内容是否有变化(如新增/修改文章)
def lastmod(self, obj):
return obj.last_modify_time
return obj.last_modify_time # 引用分类模型的“最后修改时间”字段
# 标签站点地图类:处理文章标签页面(细分内容聚合,补充 SEO 覆盖)
class TagSiteMap(Sitemap):
# 更新频率Weekly每周更新标签内容更新频率与分类一致
changefreq = "Weekly"
# 优先级0.3(低于文章和分类,标签页是辅助导航入口,优先级较低)
priority = "0.3"
# 定义要包含的标签:获取所有标签(确保所有标签页被搜索引擎收录)
def items(self):
return Tag.objects.all()
# 标签最后更新时间:判断标签下内容是否有变化
def lastmod(self, obj):
return obj.last_modify_time
return obj.last_modify_time # 引用标签模型的“最后修改时间”字段
# 用户站点地图类:处理文章作者页面(展示用户发布的所有文章,提升作者页曝光)
class UserSiteMap(Sitemap):
# 更新频率Weekly每周更新用户发布文章频率通常较低
changefreq = "Weekly"
# 优先级0.3(与标签同级,作者页是辅助内容入口)
priority = "0.3"
# 定义要包含的用户:获取所有发布过文章的作者(去重,避免重复收录同一用户)
def items(self):
# 1. 从所有文章中提取作者字段 → 2. 转集合去重 → 3. 转列表返回
return list(set(map(lambda x: x.author, Article.objects.all())))
# 用户页面最后更新时间:用用户“注册时间”替代(简化逻辑,也可改为用户最新文章发布时间)
def lastmod(self, obj):
return obj.date_joined
return obj.date_joined # 引用用户模型的“注册时间”字段
Loading…
Cancel
Save