网站的 sitemap 该多久更新一次:别搞太勤

· zblog · 阅读 7
摘要

有人把 sitemap 做成了实时生成,每次访问都重新跑一遍数据库。这不但没必要,还有风险。合理的频率每天更新内容的站:sitemap 每天生成一次足够每周更新:每周一次长期不更新:不用改太勤的问题数据库压力大,尤其文章上千的站蜘蛛来抓时如

这个问题我被问过不止一次,而且问的人往往已经做了个定时任务,每小时生成一次 sitemap。我问为什么这么勤,回答基本都是「让搜索引擎更快发现新内容」。

这个想法本身没错,但执行方式有问题。

先说搜索引擎怎么看 sitemap

sitemap 不是「推送工具」,它是「发现工具」。搜索引擎抓你的 sitemap,是为了知道「你站上还有这些地址我没见过」,而不是「你更新了我就立刻来」。

也就是说,sitemap 更新再频繁,也不能让蜘蛛提前来。蜘蛛什么时候来,取决于它对你这站的抓取预算——这个预算跟站点权重、更新稳定性、服务器响应速度都有关系,跟 sitemap 文件的修改时间几乎无关。

频繁更新的三个副作用

第一,浪费抓取预算。蜘蛛每次抓 sitemap 都要花时间。你一小时改一次,它如果每次都来,一天就是 24 次抓取额度花在一个文件上。这些额度本来可以用在真正的文章页上。

第二,让「更新」这个信号贬值。sitemap 里的 lastmod 字段本来是个有用的提示。如果你每天都在全量刷新 lastmod,蜘蛛会逐渐发现「这站的 lastmod 不准」,之后就忽略这个字段了。等到你真的有重要更新时,它已经不信了。

第三,容易出技术故障。定时任务越频繁,出错概率越高。生成到一半服务器卡了,得到的就是个残缺的 sitemap。搜索引擎抓到残缺版本,可能直接判定文件无效。

比较合理的频率

看你的更新节奏:

  • 每天更新 1-5 篇:sitemap 每天生成一次足够,甚至两天一次都行。
  • 每周更新几篇:每周生成一次,或者干脆每次发完文章手动触发一次。
  • 更新很不规律:不建议定时,改成「文章发布后触发」。Z-Blog 有发布相关的钩子,可以挂在里面,发文时才重建 sitemap。这样 lastmod 是真准的。

lastmod 怎么写才对

很多人把 sitemap 里所有 URL 的 lastmod 都写成当前时间,这是典型的错误。lastmod 应该是「这个页面最后一次实质性修改的时间」。

只改了排版、加了个标点,严格来说不算实质修改。但实际很难区分,所以一个实用标准是:只有正文内容有增删改,才更新 lastmod。改模板、改侧栏这些全局变动,不应该影响单个页面的 lastmod。

Z-Blog 的具体做法

Z-Blog 自带 sitemap 生成,在后台的应用或者插件里能找到。默认是跟着文章发布自动更新的,这个行为挺合理,不建议改成高频定时。

如果你装了第三方 sitemap 插件,注意看一下它是不是每次访问都实时生成。实时生成对服务器是个负担,文章多了之后打开 sitemap.xml 会明显变慢,严重的还会超时。这种情况改成「生成静态文件 + 发布时重建」会稳很多。

最后提一句:sitemap 提交到百度、谷歌之后,在各自的站长平台里能看到抓取记录。如果记录显示蜘蛛很少来抓 sitemap,那问题不在更新频率上,得去看站点整体健康状况了。