Sitemap 的定位:清单,不是通道
很多运营把 Sitemap 当成“提交了就收录”的按钮,实际不是。它更像一份交给蜘蛛的地址清单,作用是补充内链可能漏掉的 URL,而不是替代抓取路径。站点的主发现路径仍然是内链:蜘蛛沿着链接一层层走,判断哪些页面值得继续走。Sitemap 的价值在于把那些点击深度过深、内链稀少甚至暂时没有入口的页面,直接摆到蜘蛛面前。
理解这一点之后,分片和索引文件的设计思路就清楚了:它要解决的是“清单太大、一次给不完”的工程问题,而不是“怎么让排名变好”。
一个文件装不下时,用索引文件拆开
单个 Sitemap 文件有明确的容量上限:一般不超过 50000 条 URL,未压缩体积不超过 50MB。超过之后,多出来的部分不会被读取或容易被截断,等于白写。这时候需要用索引文件(sitemap index)把多个分片串起来。
索引文件的结构很简单:外层是 sitemapindex,里面每一条 sitemap 记录给出一个分片文件的绝对地址,可选带上该分片自己的 lastmod。蜘蛛读到索引文件,再逐个去取分片,整个流程和普通抓取一样占用抓取预算,所以分片不是越多越好。
分片怎么切更省事
- 按栏目或目录切:和站内结构对齐,某个栏目增删时只动对应分片,维护成本最低。
- 按内容类型切:文章、商品、活动页各一个分片,便于分别判断哪些类型值得提交。
- 按时间切:更新频繁的站点可以按周或按月切片,最新的单独一个文件,方便蜘蛛优先取。
不建议按字母表或随机数量机械切分。分片文件的地址应当稳定,频繁改名会让蜘蛛反复废弃旧地址、重新发现新地址,白白消耗抓取次数。
分片里放什么,不放什么
清单的质量比数量重要。往分片里塞进一堆无效地址,只会稀释这个清单的可信度。
- 放:返回 200、允许索引、且是规范版本(canonical 指向自身)的页面地址。
- 不放:301/302 跳转地址、404 与软 404 地址、被 robots.txt 屏蔽或带 noindex 的页面。
- 慎放:带大量参数的筛选页、分页翻到很深的页码、站内搜索结果页。这类页面通常是重复内容或低价值页面,放进去反而占用抓取预算。
分页的处理上有个折中做法:只放第一页,后续页码靠内链的“下一页”自然串联。这样清单更干净,蜘蛛也能顺着链接走。
lastmod、changefreq、priority 的现实
这三个字段里,只有 lastmod 还有实际参考价值,前提是它真实。如果每次生成 Sitemap 都把 lastmod 刷成当前时间,蜘蛛很快会学会忽略它;如果 lastmod 准确反映内容实际修改时间,回访时就有机会跳过没变的页面。
changefreq 和 priority 早已被主流搜索引擎确认不作为排序或抓取依据,写或不写影响不大。与其在 priority 上纠结,不如把资源放在修正 lastmod 上。
让蜘蛛真正读到这份清单
- 在 robots.txt 里用 Sitemap 指令声明索引文件的绝对地址,这是最省事的发现方式。
- 在站点后台的站长工具里提交索引文件,便于后续查看抓取与处理情况。
- 索引文件本身要能被正常访问,别放在需要登录或返回 403 的目录下。
- 分片文件如果做了 gzip 压缩,确认压缩包完整、编码无 BOM 头,否则解析会失败。
更新与监控的几个细节
分片更新的频率不必和内容发布频率一致。内容站可以每天或每周重建受影响的分片,低频更新的站点按需重建即可。索引文件的 lastmod 可以跟着分片变更同步。
监控时重点看两件事:一是各分片是否都处于可正常访问状态,二是站长工具里“已提交”和“已编入索引”的数量差距。这个差距本身是正常的,它反映的是筛选结果,不是失败率,不要拿它当收录率来考核。
一份干净、真实、分批维护的 URL 清单,比一份塞满全站地址的巨型文件更有用。
小结
Sitemap 解决的是“让蜘蛛知道有这些地址”,不解决“蜘蛛愿不愿意抓、要不要收录”。分片与索引文件把清单规模问题拆开处理,真正的抓取路径依然要靠内链结构搭好。清单给得干净,路径铺得通畅,两者配合才有意义。