很多人把 sitemap 当成“提交即收录”的开关:文件放到根目录、在后台点一下提交,然后每天看收录数有没有涨。实际情况是,sitemap 只做一件事——把一批 URL 摆到搜索引擎面前,让它知道“这些地址存在”。至于要不要抓、抓了算不算数,取决于这些 URL 自身的状态。下面这几类地址,写进 sitemap 基本等于白写。
一、先明确 sitemap 的作用边界
sitemap 提供的是发现线索,不是抓取指令,也不是收录保证。它能帮新页面、内链稀少的孤立页面更快进入待抓队列,但它覆盖不了 robots.txt 的规则,也推翻不了页面上的 noindex。当一份 sitemap 里大部分 URL 都被别的规则否掉时,蜘蛛对这份文件的信任度会下降,后续新加的地址可能被一起忽略。
二、写了也不会被处理的几类 URL
1. 被 robots.txt 禁抓的目录
最常见的一类。为了省资源,把 /search/ 或 /tag/ 整段 Disallow,同时又把这些地址放进了 sitemap。蜘蛛读到地址后去请求,被 robots.txt 拦住,只能放弃这一次。如果页面本身没有索引需求,就从 sitemap 里删掉;如果希望被收录,要先把对应的 Disallow 解开,而不是反复提交。
2. 页面自带 noindex 的
有些站点在测试环境或某些模板页面上留了 noindex,上线时忘了摘;也有人以为“先 noindex 再放进 sitemap,蜘蛛抓一次就能看到内容”。noindex 的含义就是不要收录,和 sitemap 的目标正好相反。这类 URL 出现在 sitemap 里,除了浪费一次抓取额度和一条记录,没有别的效果。
3. 会跳转或直接报错的地址
已经 301 到别处的旧地址、返回 404 或 410 的失效地址、跳转链超过两三跳的地址,都不适合放在 sitemap 里。sitemap 应该只列最终可访问的规范地址。跳转本身不是问题,问题在于把跳转的起点当成终点提交,蜘蛛每次都得多绕一圈,还可能拿到不一致的信号。
4. canonical 指向别处的页面
页面 A 的 canonical 写着页面 B,而 sitemap 里同时列了 A 和 B。这时 A 的信号会被合并到 B,A 自己不太可能单独保留一条索引记录。把 A 继续留在 sitemap 里,只会让“到底该提交哪些地址”这件事变得更模糊。
5. 参数变体和重复地址
?sort=、?page=、?utm_source= 这类变体如果全部机械地写进 sitemap,等于把同一批内容重复提交很多次。结果是抓取被摊薄,真正的新页面排得更靠后。通常只保留基础地址,以及确实有独立内容的分页地址即可。
三、格式和写法上的坑
- 地址要写完整,包含协议和域名,相对路径不会被正确解析。
- 大小写、尾斜杠要和线上实际地址一致,否则会平白多出一次跳转。
- 中文或特殊字符的地址需要转义,直接贴原始字符容易解析失败。
- 文件本身要能正常访问,返回 200 且为 XML 内容类型;被防火墙或登录墙挡住就无效。
- 单文件有数量和体积上限,超出部分要拆成多个 sitemap,再用索引文件串起来。
- lastmod 写得不准确,比如每次生成都刷成当前时间,会削弱这个字段的可信度。
四、提交之后怎么自查
- 在服务器日志里筛出蜘蛛对 sitemap 文件的请求,看它是否定期来取、是否取到了完整内容。
- 抽一批文件里的地址,逐个确认状态码、canonical、meta robots 是否一致。
- 把 sitemap 地址和站点实际可访问页面做一次对账,找出只存在于一边的地址。
- 把长期没有被访问的老地址清出去,让文件保持精简,重点放在真正需要的页面上。
把 sitemap 当成“待办清单”而不是“收录清单”,很多困惑会简单很多:它只负责让蜘蛛知道地址存在,剩下的由页面自己的状态决定。
五、小结
sitemap 的价值在于减少“这个页面没人知道”的情况,它解决不了“页面不想被收录”或者“页面本身有问题”的情况。定期清理无效行、保持提交地址与线上一致,比反复提交同一份文件更有意义。