搜索抓取

搜索蜘蛛抓取:链接不以 a href 呈现造成的入口不可发现排查

页面在浏览器里点得通,不代表搜索蜘蛛能发现入口。当导航、列表或分页用 button、onclick、javascript 伪协议承载跳转时,HTML 源码中往往没有可解析的 href。本文按抓取日志、源码比对、Sitemap 兜底的顺序梳理核对方法,并给出把链接还原为真实 a 标签的改造建议。

搜索抓取

搜索蜘蛛抓取:链接不以 a href 呈现造成的入口不可发现排查

很多站点会出现一种反差:栏目页在浏览器里点击顺畅,用户能从首页一路点到详情页,但搜索蜘蛛的抓取记录里,这些深层地址几乎没出现过。排查时容易先怀疑权重、抓取预算或服务器,其实更常见的原因是:链接在 HTML 源码里根本不存在。搜索蜘蛛发现 URL 的主要依据是解析页面中 a 标签的 href 属性,由脚本拼出来、藏在事件里的跳转,对解析器来说等于没有入口。

为什么“看得见”的链接抓不到

浏览器渲染后展示的 DOM,和服务器返回的原始 HTML 是两回事。蜘蛛拿到 HTML 后先做链接提取,再决定是否执行脚本渲染。如果跳转逻辑写在 onclick、addEventListener 或第三方框架的运行时里,第一阶段提取不到链接,入口就会缺失。部分渲染能力更强的抓取程序可以补上,但渲染有成本,也不是所有路径都会走到那一步。

常见的不可发现链接形态

  • javascript 伪协议占位:href 写成 javascript:void(0),真实地址放在 data-href 或自定义属性里,由脚本读取后跳转。
  • button 或 div 承载跳转:用 button、div、span 加点击事件模拟链接,视觉上像链接,源码里没有 href。
  • 列表项整块点击:卡片外层绑定事件,内部只有标题、图片,没有任何可解析的地址。
  • 表单提交:筛选、翻页用 POST 表单提交,蜘蛛一般不会主动构造表单请求,列表下一页就此断裂。
  • iframe 与嵌套容器:导航或内容放在 iframe、Shadow DOM 中,提取范围容易漏掉。
  • 动态插入的导航:菜单、相关推荐在首屏之后由接口返回再渲染,初始 HTML 中为空。
  • nofollow 与 robots 误用:链接本身正常,但被全站批量加上 nofollow,或所在路径被 robots.txt 屏蔽,入口实质被切断。

核对顺序

  1. 先从服务器日志或抓取日志里筛出目标目录的访问记录,确认是“完全没来过”还是“来过但没继续深入”。
  2. 用关闭脚本的方式或直接查看源码,在返回的 HTML 里检索目标地址,确认链接是否存在。
  3. 与浏览器渲染后的链接清单做对比,找出只在渲染后才出现的入口。
  4. 检查 Sitemap 是否覆盖这些地址,以及分页、筛选页是否被遗漏。
  5. 确认路径没有被 robots.txt、meta robots 或响应头规则屏蔽。
  6. 核对是否因链接层级过深、入口稀疏,导致短期内没有被优先发现。

可行的改造方向

  • 把跳转还原为真实的 a 标签:href 写正常地址,脚本只做拦截与局部刷新(例如阻止默认行为后走前端路由),这样即使脚本不执行,链接依然可解析。
  • 关键导航与列表的链接尽量服务端输出或在构建期生成,减少对运行时接口的依赖。
  • 用 Sitemap 作为兜底入口,把重要的分类、分页、详情页按层级整理,避免完全依赖点击路径。
  • 在正文中补充面包屑、上下篇、相关阅读等常规内链,为孤立地址提供额外入口。
  • 谨慎使用 nofollow,只在确实不需要传递信任的链接上使用,不要全站批量添加。

服务器稳定性对入口的影响

链接形态正确,也不代表入口一定有效。如果目标路径所在节点长期超时、返回 5xx,或不同节点返回的内容与状态码不一致,蜘蛛在有限次重试后可能降低该路径的访问频率,表现为入口“事实不可达”。因此核对链接问题时,最好同时观察一段时间的响应状态码分布,把链接形态与响应质量分开确认,避免把两种问题混在一起排查。

提示:链接改造上线后,观察周期通常需要数周。日志里入口出现频次上升,只能说明可发现性有所改善,并不代表一定被收录或获得排名,不要据此下结论。

把“页面上有链接”和“源码里有链接”区分开,是排查这类问题的关键。先确认入口是否可被解析,再考虑抓取频率、预算与内容质量,排查顺序会清晰很多。