sitemap.xml 的 lastmod 怎么写才有效?官方判定标准与常见错误
Google 只采信 consistently and verifiably accurate 的 lastmod。本文整理官方抓取预算文档的要求、常见生成器陷阱,以及一套不造假的落地写法。
一、官方怎么说
抓取预算文档在「Keep your sitemaps up to date」一节写:
Google reads your sitemap regularly, so be sure to include all the content that you want Google to crawl. If your site includes updated content, we recommend including the <lastmod> tag.
注意两点:官方确实建议用 lastmod,但没有承诺它会保证重新抓取或提高抓取频率。
sitemap 文档对取值的表述更严格:只有在值 consistently and verifiably accurate(持续且可验证地准确)时才会被采信。正文、结构化数据或链接的实质变化算更新;改一个版权年份不算。
二、最常见的三个坑
| 坑 | 后果 |
|---|---|
生成器每次构建都写 new Date() | 首次抓取就被判定不可信,此后连诚实的值也一起被忽略 |
| 用发布时间冒充修改时间 | 与页面可见日期、JSON-LD 不一致,日期信号整体失效 |
| 把草稿、参数 URL、分页重复项塞进 sitemap | 浪费抓取预算,产生大量「已发现 - 尚未编入索引」 |
三、一套不造假的写法
- 文档表固定保存
published_at与modified_at两个字段; - 只有标题、摘要、正文或 FAQ 实质变化时才更新
modified_at; - sitemap 的
<lastmod>直接取modified_at,用gmdate('Y-m-d\TH:i:s\Z')输出; - 页面可见日期、JSON-LD
datePublished/dateModified、sitemaplastmod三者同源; - 超过 5000 条时分片,索引文件里每片的
lastmod取该片最大修改时间。
$changed = !$old
|| $old['title'] !== $title
|| $old['body_md'] !== $bodyMd;
$modified = $changed ? date('c') : $old['modified_at'];
四、和抓取预算的关系
官方把站点速度、5xx、429 归入 crawl capacity limit(能抓多少),把流行度、更新频率、页面质量、URL 清单质量归入 crawl demand(想抓多少)。sitemap 的主要作用是让 URL 清单保持干净、及时,减少 Google 把时间浪费在重复或无效 URL 上,而不是「催」它来抓。
另外官方文档特别提醒:不要为了省抓取预算用 noindex 或 robots.txt 屏蔽页面,Google 会先抓到页面再丢弃,反而更浪费。
常见问题
lastmod 写今天会更快收录吗
不会。全站统一写构建时间会被判定不可信并整体忽略。
lastmod 必须用完整时间吗
官方要求 ISO 8601、真实反映最后一次实质修改。
sitemap 能保证收录吗
不能,官方只说 Google 会定期读取它。
数据来源与原创说明
依据 Google Search Central《Managing your crawl budget for large sites》与 sitemap 官方文档;配合本站 sitemap 分片实现说明。