蜘蛛发现一个 URL,主要靠两条通道:一条是顺着页面里的链接走,也就是内链;另一条是直接读你提交的清单,也就是 Sitemap。这两条通道经常被当成互相替代的方案,实际上它们解决的是不同问题。
内链通道:有上下文,也有边界
蜘蛛抓到一个页面,解析 HTML,把里面的链接放进待抓队列。这个过程带有明显的上下文:链接出现在什么位置、锚文本写了什么、周围是导航还是正文,都会影响蜘蛛对目标页面的判断。首页导航里的一条链接,和页脚深处的一条链接,被处理的顺序通常不一样。
内链的另一个特点是会受抓取路径深度的影响。蜘蛛从一个入口出发,一层一层往外走,层级越深,能分到的抓取机会越少。所以栏目页、聚合页、面包屑这些中间层如果断掉,后面的内容即使存在,也很难被稳定发现。
内链适合什么
- 需要持续更新的栏目和文章,靠列表页、相关推荐保持链接的新鲜度;
- 希望被反复抓取的核心页面,放在导航或首页可直达的位置;
- 需要传递上下文关系的页面,用锚文本说明它是什么。
Sitemap 通道:批量,但没有页面关系
Sitemap 是一份 URL 清单。蜘蛛读它的时候不经过任何页面,所以拿不到链接位置、锚文本这些信息。它的价值在于批量:站点有几千上万个 URL,靠内链一层层爬效率低,Sitemap 可以一次性把地址交出去。
清单里的 lastmod、changefreq、priority 这些字段,蜘蛛大多只作参考,部分字段甚至完全忽略。指望改一下 priority 就让某个页面优先被抓,通常不现实。Sitemap 更强的作用是让 URL 进入待抓队列,而不是决定谁先被抓。
Sitemap 适合什么
- 新上线、内链还没铺开的页面,先用清单告诉蜘蛛这里存在;
- 分页很深、历史归档这类内链不易触达的地址;
- 图片、视频等独立资源清单,用对应类型的 Sitemap 单独提交。
两条通道怎么配合
比较稳妥的做法是:内链负责主干,Sitemap 负责兜底。
- 核心栏目和内容,尽量保证从首页出发三到四次点击可达,且链接位置长期稳定;
- 新页面发布后,先通过列表页或相关推荐加上内链,再同步进 Sitemap;
- Sitemap 里只放返回 200、可索引的规范 URL,不要塞重定向和参数组合页;
- 定期用访问日志检查 Sitemap 里的 URL 是否真的被抓过,长期不抓的去排查原因。
如果只依赖 Sitemap,站点会变成清单驱动,页面之间的关联很弱,蜘蛛抓完一轮后缺少再次回访的理由;如果只依赖内链,深层页面和历史归档又容易长期沉底,迟迟等不到第一次抓取。
共同前提:服务器得稳定
不管走哪条通道,前提都是服务器能正常响应。Sitemap 取不到、页面频繁返回 5xx,蜘蛛都会降低对站点的抓取意愿,恢复起来往往比想象中慢。值得注意的是,间歇性抽风有时比持续慢一点更麻烦:蜘蛛拿到的结果忽好忽坏,抓取节奏会变得保守。
可以定期检查的几件事
- 访问日志里蜘蛛的抓取量和状态码分布,5xx 比例是否偏高;
- Sitemap 文件的抓取频率和返回状态;
- 重要页面距首页的点击深度是否变深;
- 是否存在只能从 Sitemap 发现、内链完全没有入口的页面。
内链决定蜘蛛走得多顺,Sitemap 决定蜘蛛知道多少。两者都做好,URL 发现的效率才稳定,而不是靠某一次提交或某一次调整。