在蜘蛛池的入口页体系里,sitemap 常被当成一张“提交就有人来”的通行证。实际用下来会发现,它更像一份可选的导航清单:爬虫读不读、读了之后走不走,最终还是由入口页本身的状态决定。把它的位置摆正,能省掉不少无效动作。
sitemap 能解决什么,不能解决什么
它最直接的价值是缩短 URL 的发现路径。当一个蜘蛛池里入口页数量多、层级深、彼此链接稀疏时,光靠爬虫顺着链子一格格往下走,很多页面可能长期进不了队列。sitemap 相当于把这些 URL 集中列出来,给爬虫一份现成的清单。
但它不解决抓取预算的分配,也不决定是否收录。爬虫读到一条 URL 之后,仍然要综合这个域名过去的响应质量、页面内容、链接关系来判断值不值得爬。把 sitemap 当成“提交即抓取”的开关,通常会失望。
索引型 sitemap 与单文件的取舍
入口页数量不多时,一个文件就够了。到了几百上千条,更稳妥的做法是用索引文件指向多个子 sitemap,按批次或按主题拆分。
- 拆分之后,每次新增只改对应子文件,不必整体重写
- 单文件控制在几万条 URL、未压缩 50MB 以内,是通行做法
- 某个批次整体失效时,可以直接撤掉整个子文件,而不是逐条删
批次划分尽量和入口页的实际更新节奏对齐。如果一批入口页是同一时间上线、同一时间退役,放在同一个子文件里维护成本最低。
哪些 URL 该写进去
判断标准可以简化成一句话:爬虫点进来之后,能看到一个正常的、有内容的页面吗。
- 返回 200、内容可读的入口页,可以放
- 返回 404、410 的,及时移除
- 中间隔着多次跳转才能到终点的,先理顺链路再写
- 参数组合成百上千的页面,只保留有代表性的那几条
- 需要登录、需要交互才出现内容的,放进去意义不大
lastmod 字段也一样。全部标成同一秒,或者每次抓取都刷新,会让这个字段失去参考价值。按实际改动时间填写,长期看更划算。
几个常见的做法偏差
第一个是把所有入口页不分状态一股脑塞进一个文件。短期看省事,长期会出现大量失效 URL,爬虫对这份清单的信任度会下降。
第二个是只用 sitemap,不做站内链接。清单能帮爬虫发现 URL,但页面之间的链接关系才是它判断权重和重要性的主要依据。两者是互补,不是替代。
第三个是提交完就不管了。入口页会失效、会改地址、会调整结构,一份半年没动过的清单,里面能用的比例通常已经不高。
把 sitemap 当成一份需要定期维护的资产,而不是一次性的提交动作,心态上会更接近它实际的作用。
落地时的几条建议
- 先确保入口页本身可访问、内容完整,再考虑要不要挂 sitemap
- 在 robots.txt 里声明位置,减少爬虫找它的成本
- 按批次拆分,控制单文件规模,方便单独下线和替换
- lastmod 如实填写,不做批量伪造
- 定期比对清单与实际入口页状态,清掉失效项
- 和入口页之间的内链配合使用,不要指望清单单独扛下发现任务
做完这些,sitemap 大致能稳定发挥它该有的那部分作用。剩下的,还是要回到入口页的响应速度、内容厚度和链接结构上去。