Sitemap 文件里除了 URL,通常還有 lastmod、changefreq、priority 三個字段。很多人习惯把它們一次性填满,觉得寫得越详细蜘蛛越重视。實际情况往往相反:字段寫得不准,反而會让抓取調度參考到错誤的信息。
這三個字段目前各自的作用
先分清現状。changefreq 和 priority 目前主流搜尋引擎已经明确表示不再使用,寫不寫對抓取基本没有影响,寫错也不會带来額外惩罚,只是增加维護成本。lastmod 仍然會被參考,用来判断某個 URL 自上次抓取後是否發生了變化,從而决定要不要重新安排一次抓取。
換句话说,Sitemap 里真正值得花心思维護的只有 lastmod,另外两個字段更多是歷史遗留。
lastmod 寫错的几種典型情况
- 每次生成 Sitemap 都刷新成目前時間。這是最常见的問题。定时任務每次跑都把 lastmod 寫成今天,蜘蛛看到同一批 URL 反复“刚刚更新”,几次之後這個字段的可信度就没了。
- 时区不寫或寫错。完整寫法應带时区,例如 2024-06-01T09:30:00+08:00;如果只寫日期或漏掉时区,解析结果可能出現偏差。
- 栏目頁、聚合頁的 lastmod 跟着内容一起變。栏目頁只要有一條新内容就刷新時間,會让蜘蛛频繁回来抓一個變化不大的頁面。
- 内容改過但 lastmod 没同步。時間長期不動本身没問题,問题是正文已经調整却没有更新,等于给了蜘蛛一個過期的更新信号。
怎么维護比較省事
按資料来源分類處理,不必追求全站统一:
- 内容頁:直接取正文的發布時間或最後編輯時間,這是最可靠的来源。
- 列表頁、栏目頁:可以取该列表内最新一條内容的時間,也可以干脆不寫 lastmod,让蜘蛛按自己的节奏回訪。
- 纯静態頁與工具頁:内容不常改就別硬填時間,留空比填错好。
如果站点系統里根本没有可靠的修改時間字段,宁可不寫 lastmod,也不要统一填目前時間。缺字段只是少了一個參考,填错字段會让這個參考長期失真。
字段之外更影响抓取的東西
Sitemap 只是 URL 發現的入口之一,它告诉蜘蛛“有這么個地址”,但實际抓取仍然要靠内鏈和服務器响應。同一條 URL 如果在内鏈里完全没有入口、頁面又响應缓慢,Sitemap 寫得再细,抓取频率也不會因此提高。
把 Sitemap 当成一份准确的地址清單来维護就够了,不需要把它当成調度開關。
可以定期抽查:随机取一些 URL,對比 Sitemap 里的 lastmod 和頁面實际更新時間。差异比例如果偏高,說明生成逻辑需要检查,而不是去調整字段寫法。
另外,Sitemap 文件本身的更新時間也要留意。文件長期不更新,蜘蛛會降低回訪该文件的频率,新 URL 的發現自然就慢。對于更新频繁的站点,把 Sitemap 拆成索引加子文件、按内容類型分別更新,通常比在一個大文件里反复刷時間更有用。
一個简單的检查习惯
每次調整生成逻辑後,用浏览器或命令行打開 Sitemap,看看時間格式是否统一、是否存在明顯不合理的“全站同一秒更新”。這個检查花不了几分钟,但能避免字段長期失效。