做蜘蛛池的人经常把 sitemap 当成一个“提交完就等结果”的按钮,也有人觉得入口页之间已经互链了,再挂个 sitemap 纯属多余。这两种想法都偏了。sitemap 和蜘蛛池入口页其实解决的是两个不同环节的问题:sitemap 负责把 URL 清单递到爬虫面前,入口页负责让爬虫愿意顺着链接继续走。把它们分开看,思路会清楚很多。
sitemap 解决的是“发现”,不是“抓取”
sitemap 的作用是告诉爬虫“这里有这些地址”,它不负责说服爬虫来读、也不保证抓取频次。爬虫拿到清单之后,仍然要按自己的调度逻辑决定什么时候来、来几次。很多人把 sitemap 当成收录保证,提交之后没动静就认为工具失效,其实是把两个环节混在一起了。真正影响抓取意愿的,是页面的响应速度、链接关系、内容是否有差异,这些恰恰是蜘蛛池入口页要做的事。
入口页和 sitemap 各自擅长什么
- 入口页:靠链接关系传递。爬虫是顺着链接走过来的,所以入口页之间的互链结构会直接影响爬取路径和停留深度,适合承载那些希望被反复访问、希望把权重往内页递的页面。
- sitemap:批量、结构化。它擅长覆盖链接结构里不好安放、或者层级较深、入口页一时照不到的页面,属于“补漏”的角色。
- 两者重叠不冲突,但不要把其中一个当成另一个的替代品。只铺入口页不写 sitemap,可能会有页面长期没人发现;只写 sitemap 不做入口页,清单递上去了也没人愿意往下走。
sitemap 里应该放什么 URL
这一步比写 sitemap 文件本身更重要。放进清单的地址,最好满足下面几条:
- 直接返回 200,不经过跳转链。把一个 301 的地址写进 sitemap,爬虫跑过去还要再跳一次,等于白费一次抓取。
- 页面本身是希望被看到的,不是参数组合出来的重复页。带一堆无意义参数的地址塞多了,清单的质量会被拉低。
- URL 干净、稳定,不要频繁改路径。清单里的地址换来换去,爬虫会重新判断,之前积累的判断也会归零。
- 同一内容只出现一次。入口页和 sitemap 里重复列同一个地址没意义,sitemap 内部自己重复更没必要。
分片与索引文件怎么组织
单个 sitemap 文件有条数上限,量大的站点要用 sitemap index 来分片。分片方式建议按目录或者按时间切,比如按栏目分、按批次分,而不是随机切割。这样做的好处是,某一片出问题时你能立刻定位到是哪批 URL 受影响,回滚或者重建都方便。分片文件本身也要能正常访问,否则索引文件指过去是空的。
lastmod 别乱写
常见做法是把全站所有页面的 lastmod 统一改成当天,图个“看起来新鲜”。但爬虫对这个字段是有判断的:如果每次来都发现所有页面都刚更新过,这个信号很快就失去参考价值。真实一点的做法是,页面确实改了才更新对应条目的 lastmod,没改的保持原值。哪怕更新频率低,也比全员刷时间要可信。
几个容易踩的误区
- 把 sitemap 当收录开关:提交了不等于会被抓,更不等于会被收录。
- 清单里混入大量低价值地址:分页、筛选、排序参数全塞进去,反而稀释了真正重要的 URL。
- 提交完就再也不管:入口页在增删,sitemap 却几个月不动,清单和站内实际情况会对不上。
- sitemap 里放已经失效的地址:删掉的页面要及时从清单里拿掉,否则每次抓取都是空跑。
怎么观察效果
不需要靠感觉判断。看日志里 sitemap 文件本身被访问的频次,看清单里的地址有多少真正被访问过,再看入口页的访问情况有没有跟着变化。如果 sitemap 被频繁读取,但清单里的地址几乎没人访问,说明问题不在清单本身,而在于页面质量或链接关系;反过来,如果 sitemap 极少被读取,那就先检查文件是否可访问、是否在 robots.txt 里声明、路径有没有写错。
sitemap 是路牌,入口页是路。路牌指得再清楚,路本身走不通也没用;路修得再好,没有路牌指路,一部分地址可能长期没人经过。两者配合着做,比单独押注任何一边都稳。
最后提醒一句:无论 sitemap 还是蜘蛛池入口页,做的都是让爬虫更容易发现和抓取,至于抓取之后怎么判断,那是另一回事。把该铺的路铺好、该更新的清单更新到位,剩下的交给时间和持续观察就够了。