搜索抓取

链接写不对,蜘蛛走不到:a 标签、JS 跳转与表单按钮的抓取差异

蜘蛛发现 URL 主要靠页面上的链接。但 onclick、表单按钮、iframe 和 JS 路由里的地址,往往不是蜘蛛能直接识别的链接。本文整理几种常见写法的差异,以及如何用 a 标签和内链结构,让重要页面有更短的抓取路径。

搜索抓取

链接写不对,蜘蛛走不到:a 标签、JS 跳转与表单按钮的抓取差异

蜘蛛发现新 URL 的路径,大多数时候不是靠主动提交,而是顺着页面上已有的链接一路走。链接的写法决定了蜘蛛能不能把这条路径接上。很多“页面没被抓”的问题,追到最后不是服务器慢,也不是内容差,而是链接在 HTML 里根本不是一个可识别的链接。

蜘蛛最认的链接:带 href 的 a 标签

在 HTML 里,最直接、最稳定的链接形式就是 <a href="...">。只要 href 指向一个可访问的 URL,蜘蛛解析到这一段就能把它加入待抓队列。相反,如果地址被写在 JavaScript 里、按钮上、图片的 onclick 里,蜘蛛需要额外执行脚本才能看到,发现效率会明显下降。

容易被漏掉的几种写法

onclick 和 JavaScript 跳转

常见写法是给 div、span 或按钮绑定 onclick,点击后执行 location.href 跳转。对用户来说能点,对蜘蛛来说它只是一段脚本。除非渲染能力完整执行了这段逻辑,否则这个 URL 很难进入抓取路径。

更稳妥的做法是保留一个真实的 a 标签作为兜底,再用脚本增强交互。例如列表项外层是 a 标签,内部再用 JS 处理筛选或统计。

表单按钮和下拉菜单

用 button 提交表单、用 select 切换栏目,这类入口不会自动变成链接。蜘蛛不会主动去填表单、选下拉项。如果你希望分类页、筛选页被看到,至少要在页面上给一个可点击的 a 标签入口,而不是只靠表单控件。

iframe 和框架嵌套

iframe 里的链接和内容,抓取路径会被切断一层。蜘蛛可能抓到 iframe 的地址,但不一定会继续深入里面的链接。重要导航和内容尽量放在主文档里,iframe 只用于必要的第三方模块。

相对路径与协议问题

相对路径本身没问题,但要注意基准地址。如果页面里有 <base> 标签,或者链接写成 //example.com/page 这种协议相对形式,蜘蛛解析出的绝对地址可能和你想的不一样。建议在关键导航中使用完整路径,至少保证根路径明确。

内链结构:让重要页面被短路径走到

链接能被识别只是第一步,蜘蛛还要决定走哪条路。首页、栏目页、详情页之间的内链层级越清晰,重要页面被发现的路径就越短。可以从这几个习惯入手:

  • 主导航覆盖主要栏目,不要只放在 JS 下拉里。
  • 列表页给每个条目一个真实的 a 标签,指向详情页。
  • 详情页用面包屑回到栏目,同时给相关推荐的内链。
  • 分页链接写成可抓取的 a 标签,而不是“加载更多”按钮。
  • 避免把大量链接塞进页脚同一区域,权重和路径都会变散。

Sitemap 是补充,不是链接的替代品

Sitemap 能帮助蜘蛛发现 URL,但它不负责传递内链关系,也不保证每个地址都会被优先抓取。内链仍然是蜘蛛理解站点结构的主要依据。比较稳的组合是:重要页面有清晰的内链入口,Sitemap 作为全量清单提交,日志里再核对哪些 URL 实际被访问过。

如果某个页面只能从 Sitemap 进入,站内没有任何链接指向它,那它在抓取路径上就接近孤岛。蜘蛛即使抓了一次,后续重访的概率也低。

日常检查的简单顺序

  1. 查看页面源代码,搜索目标 URL,确认它出现在 a 标签的 href 里。
  2. 禁用 JavaScript 后再看一遍,重要链接是否还能看到。
  3. 用站点抓取工具或日志,看蜘蛛实际访问了哪些链接。
  4. 对重要页面,确认从首页出发的点击层级没有过深。

链接写法不是玄学,它决定了蜘蛛能不能顺着路走过来。把入口做成标准链接,把重要页面放在浅层内链里,剩下的交给抓取节奏和时间。