蜘蛛断线,通常断在两个地方
排查抓取问题时,第一反应往往是看服务器、看 robots.txt、看有没有被拦截。这些确实要查,但更常见的情况是:服务器一切正常,蜘蛛也来过,只是它在某个页面停下了,或者压根没能走到那个页面。孤岛页和死胡同,就是站内链接结构里最常见的两种断点。
孤岛页指的是这样一个 URL:它能被访问、能返回 200,但站内没有任何一个正常渲染的链接指向它。蜘蛛要发现它,只能依赖外部来源——别人给的链接、Sitemap 里的登记,或者手动提交。死胡同则相反:蜘蛛进来了,页面上却没有可继续前进的站内链接,走到这里线索就断了。
孤岛页的几种常见成因
- 链接写在了脚本里。点击能跳转,是因为页面运行时生成了链接;但如果链接不是以 a 标签出现在 HTML 中,蜘蛛读到的就只是一段没有目标的脚本。
- 只能从站内搜索结果进。搜索页对用户是入口,对蜘蛛往往不是,这类 URL 通常是参数拼接出来的,不会被当作稳定入口。
- 只在筛选、日历、排序等交互后才出现。列表页的默认状态里没有这些链接,蜘蛛看到的第一层自然也不会有。
- 只在登录后、只在表单提交后才能进入。这类页面基本无法顺着链接抵达,只能靠 Sitemap 或主动提交。
- 改版或换模板时漏掉。导航、面包屑、相关推荐在改版中少了一两条,页面就悄悄变成了孤岛。
死胡同的几种形态
- 页面上挂的全是出站链接,站内一个也没有。
- 正文很长,但相关推荐、上下篇、分类入口都没有渲染出来。
- 无限滚动的列表:向下滚动才加载更多,而 HTML 里没有可点进下一页的链接。
- 页面里大量链接指向 404,或者统统跳转到同一个地址,蜘蛛跟着走几步就回到了原点。
- 目录层级过深,中间层缺失,只剩从首页一路点到底的那一条路,而这条路本身又常常不够稳定。
怎么确认问题出在链接结构,而不是别处
- 先看服务器日志或抓取统计里,这个 URL 到底有没有被抓过。从来没出现过,和抓到了却不被采用,是两件不同的事。
- 再查有没有真实内链指向它。把全站的 a 标签抓下来按目标 URL 归并,看这个地址能数出几条。
- 观察蜘蛛是从哪个页面走到它的。如果入口总是同一条、而且那条路径本身很浅,可以试着换一条更稳的路径重新引过去。
- 最后再排除 robots、noindex、状态码、WAF 这些因素。顺序反了容易白折腾。
孤岛页和死胡同有个共同点:从日志上看,往往不是没抓,就是抓了就停。两者都指向同一件事——入口不足。
修复顺序:先补入口,再补出口
补入口的目标是让蜘蛛能顺着普通链接走到页面。最有效的做法通常不是新加一个专门的蜘蛛入口,而是把链接放回用户本来就会用到的地方:分类导航、面包屑、正文里的自然引用、相关推荐、上一篇下一篇。这些位置同时服务用户和蜘蛛,改动成本也最低。
Sitemap 可以作为一个补充入口,对登录后页面、深层页面和数量较多的页面尤其有用。但它更像登记,而不是路径——蜘蛛不会因为 Sitemap 里列了某个 URL,就把它当成常规抓取对象。
补出口则是给页面留几条继续向前的路。哪怕只是底部放上分类入口和相关阅读,也比一个只有正文、点到头就结束的页面好很多。分页列表如果要靠滚动加载,至少在 HTML 里保留可点下一页的链接。
一个务实的检查节奏
不用每次改版都全站重审。把这几件事固定下来就够了:新页面上线时确认它至少有一条普通内链指着它;改版后抽查导航和面包屑是否还在 HTML 里;每隔一段时间跑一次内链审计,看有没有 URL 的入链数掉到零。剩下的交给正常的内容更新节奏,不必为了抓取去刻意堆砌链接。