搜索抓取

蜘蛛找不到的 URL,往往不是没写链接,而是走不到

站内明明放了链接,日志里却查不到蜘蛛来访,问题多半出在抓取路径上。本文从可达图的角度拆解三类常见的“走不到”——链接藏在交互之后、被规则挡住、路径太深,并给出用日志和首屏 HTML 复核的方法,以及让内链路径更顺畅的几条实操建议。

搜索抓取

蜘蛛找不到的 URL,往往不是没写链接,而是走不到

做站内运营时,经常遇到一种情况:页面明明已经上线,链接也放在站内,但翻服务器日志却找不到蜘蛛来过的记录。多数人的第一反应是“是不是内容质量不行”,但更常见的原因其实更朴素——蜘蛛从入口出发,沿着一层层的链接往前走,它没有走到那个页面。

抓取路径的本质是一张可达图

对蜘蛛来说,站点不是一份文件列表,而是一张有向图:首页是起点,链接是边,URL 是节点。一个页面要被抓到,前提是从起点出发存在一条连续不断的边。任何一条边断掉——链接是 JS 生成的、被规则挡住、指向了错误的地址——后面整条分支都会消失在蜘蛛的视野里。

所以判断一个 URL 能不能被发现,不该问“我有没有放链接”,而该问“从首页出发,沿着纯 HTML 里的链接,几步能到”。

三类最常见的“走不到”

1. 链接藏在交互之后

折叠菜单、点击加载更多、鼠标悬停才出现的导航,这些在浏览器里很自然,但在 HTML 源码里可能什么都没有。蜘蛛拿到的是首屏源码,它不点击、不滚动。如果链接只在脚本执行后才注入,能到达的机会就取决于渲染环节是否顺利,稳定性远不如直接写在 HTML 里。

2. 链接被规则挡住

nofollow、robots.txt 的 Disallow、meta robots 的各种组合,都会改变这条边是否存在。尤其要留意:nofollow 不影响页面自身的处理,但会影响链接被跟随;一个栏目页如果整站加了 nofollow,它下面的详情页可能就少了主要入口。

3. 路径太深或太窄

一个页面从首页要经过六层才到,平时又很少被点击,蜘蛛自然很少走这条线。路径越深,越依赖上层页面的回访频率,实际到达时间会被拉得很长。

怎么确认一个 URL 到底能不能被走到

  1. 在服务器日志里搜这个 URL,看是否有任何一次访问记录,以及 UA 是否来自搜索蜘蛛。
  2. 取页面首屏 HTML(不是渲染后的 DOM),在里面搜链接,看目标地址是否真实存在于源码中。
  3. 从首页出发手工点一条最短路径,记录经过的层数,超过四到五层就要考虑加一条捷径。
  4. 检查中间层页面是否被 noindex、被 robots 拦、或者只能靠参数跳转才能到。

让路径更顺的几种做法

  • 重要页面在 HTML 里保留至少一条静态链接,别只靠脚本或接口注入。
  • 用栏目页、聚合页、相关推荐缩短层级,把深页面往上提。
  • Sitemap 可以补充发现路径,但要把它当补充,而不是内链的替代品。
  • 面包屑和分类导航保证每个详情页都能被上一级指回。
  • 链接用可解析的 a 标签 href,不要用 onclick 跳转。
抓取路径断掉的时候,页面不会报错,服务器也不会有异常日志——它只是安静地待在蜘蛛看不到的地方。

可达性需要定期复核

模板改版、导航重构、专题页下线,都可能悄悄剪断某条边。建议在大的改动之后,按上面四步抽查几个重点栏目,确认从首页到详情页的路径仍然连通。这件事不难,但需要有人定期做,而不是等流量掉了才回头看。