搜索抓取

链接写法与 URL 发现:哪些链接蜘蛛读得到,哪些读不到

蜘蛛发现新 URL 主要靠链接,而链接能不能被读到,取决于它是否出现在 HTML 里、是否可解析、目标是否可访问。本文梳理 a 标签、JS 跳转、rel 属性以及导航、面包屑、分页等常见写法的差异,并给出一份可落地的自查清单,帮助站长把 URL 发现这条路走通。

搜索抓取

链接写法与 URL 发现:哪些链接蜘蛛读得到,哪些读不到

站点里的新页面,往往不是蜘蛛自己猜出来的,而是顺着某一条链接走到的。同一条目标地址,写在不同的位置、用不同的方式,被读到的概率并不一样。理解这些写法的差异,能解释不少“页面明明上线了,却迟迟没有抓取记录”的情况。

蜘蛛拿到 URL 的几条路

常见的入口大概有四类:外部网站指向你的链接、站内页面的链接、XML Sitemap,以及搜索引擎提供的提交接口。其中站内链接是持续性最强的一条——只要页面还在,蜘蛛每次来访都能重新走一遍。外链受制于人,Sitemap 是一份清单而不是一条路径,提交接口更适合作为补充。真正决定一个 URL 能不能被反复发现、反复回来的,通常是内链结构。

一条链接被读到,需要满足三个条件

  • 出现在 HTML 里:蜘蛛拿到的原始响应中就带有这个地址,而不是等脚本执行后才生成。
  • 能被解析:href 指向的是真实可访问的 URL,而不是 javascript:void(0)、单独的 # 号,或者依赖点击事件的占位写法。
  • 目标能返回正常内容:链接可以被跟随,跳转层级不长,目标返回 200。

标准 a 标签最稳

<a href="/path"> 这种写法没有额外条件,蜘蛛解析到 href 就能把地址放进待抓取队列。用 button 加 onclick 跳转、用 span 绑定 JS 事件跳转的写法,在原始 HTML 里看不到目标地址,需要等渲染,甚至根本读不到目标 URL——即便用户最终能点开,对 URL 发现来说也弱很多。

JS 生成链接的边界

如果列表内容由前端框架渲染,蜘蛛看到的第一段 HTML 可能只有一个空容器。渲染阶段确实有机会补上这些链接,但多一道工序就多一次失败的可能。能让关键导航和列表链接出现在服务端返回的 HTML 里,URL 发现会稳定不少。

rel 属性:被读到不等于被跟随

nofollow、sponsored、ugc 这类属性,表达的是“这条链接的关系”。在 URL 发现这件事上,最保险的做法仍然是:需要被发现的链接,用普通链接写在页面主体区域,而不是依赖带属性的写法去碰运气。

位置不同,发现效果不同

同一个 URL,放在主导航、面包屑、正文首屏,还是页脚深处,被走到的频率并不一样。导航和面包屑几乎每个页面都有,相当于给同一条路径做了多次重复;正文里的上下文链接,通常比页脚批量堆叠的链接更有参考价值。分页链接则是列表页能否被继续翻下去的关键:如果“下一页”只是一个按钮,而不是可跟随的链接,后面的条目就容易被漏掉。

一份简单的自查清单

  1. 关掉 JavaScript,或直接查看页面源代码,看关键链接是否已经存在。
  2. 抽查几个核心页面,确认 href 是完整可达的 URL,有没有多余的跳转。
  3. 检查导航、面包屑、分页按钮是否输出为 a 标签。
  4. 确认重要链接没有落在需要登录或需要交互才出现的区域。
  5. 把 Sitemap 里的 URL 与站内实际能走到的 URL 对一遍,找出只在清单里、没有任何内链指向的“孤岛页面”。
孤岛页面不是不能被抓取,而是缺少被反复发现的路径。给它补一条从相关页面出发的内链,通常比反复提交更有效。

小结

URL 发现的本质是路径问题:链接写得越接近标准 HTML,路径就越短,蜘蛛走到目标的确定性越高。把导航、面包屑、分页和正文链接写扎实,再让 Sitemap 与提交接口做补充,新页面被看到的速度和稳定性都会好一些。这不保证一定被收录,但至少不会因为写法问题,提前把路堵上。