sitemap 不是“站点所有路由的清单”,而是“希望搜索引擎当作文档来抓的清单”。把两者混为一谈,会往索引里灌进一堆“每次抓都是不同空页”的噪音。
该进的:内容页
有独立信息价值、参数无关、稳定可重现的页面:文章详情、项目、标签、系列、工具页、关于。它们的判据是——同一个 URL 任何时候抓取,内容基本一致,且对用户有意义。
不该进的第一类:参数化结果页
一次真实修复:/subscribe/status/ 被收录进 sitemap,但它本质是“订阅操作的结果回跳页”——内容完全由查询参数决定,无参数的抓取永远得到“链接无效”(见踩坑《“查看状态页”点进去永远显示链接无效》)。爬虫每抓一次都是一个不同的错误页,白白消耗抓取预算、还可能把“链接无效”当成正文索引。
判据:去掉参数就没有意义的 URL 不进 sitemap。若这类页确实需要存在(确认/退订回跳),给它 noindex,或只在有参数时返回正常、无参数时返回引导态。
不该进的第二类:借数据但无独立价值的 SSR 路由
有一类路由技术上能访问,但对读者零价值:健康检查、内部预览、管理入口。它们要么 noindex,要么本就不在 sitemap 里。能访问 ≠ 该收录。
本项目处理过一例:/weekly-digest(周报预览)本属后台工具,早期挂在公开路由,既无公开入口、又链向一个受保护的接口(访客点开得到裸 401 JSON),还带着大量工程术语——典型的“误当作公开页”。最终整体迁入 /admin/ 加会话守卫,公开路径改 404,noindex 也不再需要(整页不再是公开文档)。
noindex 与 sitemap 的分工
- 不想被收录:
<meta name="robots" content="noindex, nofollow">(告诉爬虫别索引); - 主动告诉爬虫哪些值得来:sitemap(
<url><loc>列表)。
两者要一致:一个页面既 noindex 又出现在 sitemap 里是自相矛盾的信号(等于一边说“别收我”一边递名片)。健康检查页、结果回跳页若确需 noindex,就要同时从 sitemap 移除。
一个务实的 sitemap 卫生清单
- 只列内容页与真正公开的工具页
- 排除:带参才有意义的结果页、健康检查、管理预览、内部 JSON/接口
- 每个静态路由都对应一个真实可渲染页面(无参数访问不报错)
-
noindex集合与 sitemap 集合无交集 - 详情类条目带
lastmod(内容更新触发重抓) - 死链扫描纳入 release 门禁——sitemap 指向的每条都要 200
抓取预算:个人站也会踩
小站谈不上“预算耗尽”,但把无意义参数页喂给爬虫,换来的是一堆“低质/重复内容”抓取记录,稀释真正内容页的抓取频率,极端情况下让搜索引擎觉得站点信号混乱。卫生的 sitemap 是一种礼貌:你把“值得看的页”划清楚,爬虫就把力气花在那儿。
小结
sitemap 的每个条目都是一句“这个 URL 值得被当作文档对待”。参数化结果页、借数据路由、后台预览——它们要么不该收、要么该先“去参数化才有意义”的结构问题。判断口诀:能脱离查询参数独立成立、且对读者有信息价值的页面,才配进 sitemap。