蜘蛛池里让爬虫发现新入口页,最常用的办法是互链和外围链接。但链接能不能被跟着抓,取决于爬虫愿不愿意爬到那个位置、愿意爬多深。sitemap 提供的是另一条通道:直接把 URL 清单摆到爬虫面前。它不保证抓取,也不保证收录,但在池子里作为一种补充手段,成本低、配置简单,值得顺手做对。
先摆正位置:它是补充,不是主力
蜘蛛池的入口页数量常常在几千到几万的量级,纯靠链接传递,爬虫需要一层层往下走,总有一些页面长期走不到。sitemap 的作用是把这批 URL 一次性列出来,减少这种“爬不到”的情况。
但有两件事要有预期:一是搜索引擎对 sitemap 的采信程度,和站点整体情况有关,池子域名本身没有积累时,sitemap 更多只是提示;二是 sitemap 里的 URL 之后仍要经过抓取、内容判断等一整套流程,和通过链接发现走的是同一套后续逻辑,不会因为来源不同就被特殊对待。
格式与硬性限制
- 单个 sitemap 文件最多 50,000 条 URL,未压缩体积不超过 50MB;
- 超过这个量级要用 sitemap 索引文件,把多个子 sitemap 串起来;
- 只允许放同一主机下的 URL,跨域混放基本无效;
- lastmod 用规范日期时间格式,写错会导致整条记录被忽略;
- changefreq 和 priority 主流搜索引擎已基本不再参考,不必花时间精细调整。
放在哪、怎么声明
常规做法是把 sitemap.xml 放在域名根目录,再在 robots.txt 里加一行 Sitemap 指令指向完整地址。爬虫抓取 robots.txt 时就能顺带看到,不用额外找。
如果池子里每个入口页域名各自独立,那就每个域名配一份自己的 sitemap。不要把 A 域名下的 URL 写进 B 域名的 sitemap,这类跨域条目通常会被直接跳过,写了也白写。
和入口页互链怎么配合
两者并不冲突。互链负责“爬虫已经在池子里时,从 A 页走到 B 页”;sitemap 负责“爬虫刚进池子、还不知道有哪些页时,给一份清单”。比较稳的组合是:入口页保持少量、结构清晰的互链,同时用 sitemap 把那些链接深度较深、不容易被走到的页面补进去。
但不要把 sitemap 当成万能补漏。如果某个 URL 只能靠 sitemap 被发现,站内没有任何链接指向它,这类页面在爬虫眼里通常优先级偏低,塞进去也很难有起色。
几个常见误区
- 以为提交 sitemap 就会抓。它只是告知,抓不抓仍由爬虫决定;
- 反复调用早已废弃的 ping 接口,浪费时间且没有效果;
- 把目标站的页面 URL 直接塞进入口页域名的 sitemap,跨域条目会被忽略;
- sitemap 里混入大量 404、410、跳转或加了 noindex 的地址,白白消耗抓取预算,还可能拉低整份清单的可信度;
- 只写 URL 不写 lastmod,内容更新后爬虫没有理由优先回来。
怎么判断它有没有起作用
最直接的是看访问日志:日志里有没有对 /sitemap.xml 的请求、频率如何、抓完之后有没有顺着里面的 URL 继续抓页面。如果 sitemap 被频繁抓取,但清单里的 URL 几乎没人访问,说明这些页面在爬虫看来优先级不够,问题多半出在内容或整体信号上,而不是 sitemap 本身。
sitemap 解决的是“告知”,不是“说服”。告知之后爬虫来不来,取决于页面本身值不值得抓。
一份可用的检查清单
- 每个入口页域名是否都有可访问的 /sitemap.xml,并正常返回 200;
- robots.txt 里是否声明了正确的 sitemap 地址;
- 清单里的 URL 是否都在同域内,是否清掉了参数混乱和重复的地址;
- 条数是否超过 50,000,超过时是否用了索引文件;
- lastmod 格式是否正确,内容变更时是否同步更新;
- 有没有把 404、跳转、noindex 的 URL 混进去;
- 日志里能否看到 sitemap 被抓取,以及后续页面抓取是否跟上。
sitemap 在蜘蛛池里是个便宜好用的补充手段,但要摆正位置:它只负责把 URL 递到爬虫面前,后面的抓取、判断、收录都不是它能决定的。把清单维护干净、格式写对、和互链配合使用,比反复纠结“提交了为什么没反应”更有意义。