做蜘蛛池的人大多把精力放在入口页上,sitemap 往往只是顺手放一个文件,甚至完全不放。但在实际抓取中,sitemap 和入口页承担的功能并不一样,把两者的分工理清楚,有时比再多铺几百个入口更管用。
sitemap 与入口页解决的不是同一件事
入口页的核心作用是被爬到。蜘蛛顺着外链、导航或历史记录进入你的入口页,再从入口页的链接走下一跳。它依赖的是链接关系,蜘蛛必须先把页面抓下来,才知道里面指向哪里。
sitemap 的核心作用是被知道。它是一份声明式的清单,直接告诉搜索引擎有哪些 URL 存在,不需要蜘蛛先抓一个页面才能发现下一个。两者的关系更像是:sitemap 负责把 URL 交出去,入口页负责让这些 URL 有一条被抓取的路径。
蜘蛛池里 sitemap 的几种常见用法
作为入口页的补充发现通道
当入口页数量多、层级深,或者部分入口页本身很少被抓时,sitemap 可以作为一条平行的发现通道。把入口页 URL 和需要被发现的目标 URL 放进 sitemap,至少让发现这一步不依赖某条链接链是否通畅。
作为入口页的索引层
如果入口页是程序化生成、数量很大,可以用分片 sitemap 做索引:一个 sitemap index 指向多个子 sitemap,每个子文件控制在几千条以内。这样既方便滚动更新,也避免单个文件过大导致读取不全。
作为状态记录
sitemap 还有一个实际好处:它是一份可以自己维护的清单。哪些 URL 还在用、哪些已经退役、哪些返回 404,对照 sitemap 一眼能看出来,比翻日志快得多。
容易被忽略的细节
- sitemap 里的 URL 必须和实际可访问的 URL 完全一致,包括协议、大小写、结尾斜杠。
- 只放返回 200 的页面。404、多跳重定向、需要登录的页面放进去意义不大。
- lastmod 要如实写。长期不变的 lastmod 会给抓取调度提供错误信号。
- sitemap 文件本身要能被正常抓取,返回 200 且是 XML,不要被 WAF 或 CDN 拦掉。
- sitemap 的位置和 robots.txt 里的声明要对应,路径写错等于没写。
实操建议
- 入口页以链接发现为主,sitemap 作为兜底,两者都保留,不要只押一条。
- 目标页数量大时优先放进 sitemap,别指望靠入口页一跳一跳带过去。
- 定期清理 sitemap,退役的 URL 要么删掉,要么保留并如实反映其状态。
- 关注抓取日志里 sitemap 的抓取频率。如果长期不抓,先排查可访问性和 robots 声明。
sitemap 只是把 URL 递出去,递出去不等于被收录。它不能替代内容质量、站点稳定性和正常的链接结构,把它当成发现环节的补充手段就好。
回到蜘蛛池本身,入口页和 sitemap 的分工可以理解为:入口页负责给蜘蛛一条走得通的路,sitemap 负责给搜索引擎一份看得见的清单。两条腿都留着,比只押其中一条更稳。