搜索抓取

源码里的链接与渲染后的 DOM:蜘蛛从哪一步开始走

搜索蜘蛛抓取页面时,第一步拿到的是服务器返回的 HTML 源码,JS 渲染往往排在后一步。源码里有真实 href 的链接通常更早被发现,靠脚本注入的入口则可能延迟。本文梳理抓取与渲染的分工、渲染失败的常见原因,以及自查和调整的做法。

搜索抓取

源码里的链接与渲染后的 DOM:蜘蛛从哪一步开始走

很多站点把入口都放在 JavaScript 里:点击按钮加载列表、前端路由跳转、滚动到底部再请求下一页。从用户角度看没问题,但搜索蜘蛛的抓取管道分成两步,源码和渲染后的 DOM 之间可能存在时间差。

抓取管道:先拿源码,再排渲染

搜索引擎请求一个 URL 时,通常先拿到服务器直接返回的 HTML,这一步是抓取。如果页面关键内容或链接需要执行 JS 才出现,就进入渲染阶段。渲染比抓取消耗更多资源,队列也往往更长,所以两者之间存在延迟。

这意味着:链接写在源码里,通常当次抓取就能看到;靠脚本生成的链接,可能要等到渲染完成才被发现。渲染不是不会做,而是不一定和抓取同时发生。

链接在源码里和 JS 里,差别在哪

  • 源码中的普通链接(a 标签带 href 属性):蜘蛛解析 HTML 时即可提取,进入待抓队列。
  • 点击事件绑定:源码里往往没有可解析的地址,需要渲染并模拟交互才可能发现。
  • 前端路由切换:地址变化可能不产生新的服务器请求,蜘蛛未必把它当成新 URL。
  • 滚动加载、点击「加载更多」:后续内容不在首屏源码中,发现时间可能被推迟。

不是所有情况都坏,但入口越依赖脚本,进入抓取路径的时间就越不确定。

渲染阶段容易出问题的几处

  • 资源被挡:robots.txt 屏蔽了 JS 或 CSS 文件,渲染时页面可能拼不出来,链接和内容都看不到。
  • 接口依赖:渲染需要调用站内接口,如果接口需要登录、频繁超时或按 UA 拦截,渲染结果可能是空壳。
  • 脚本报错:一个未捕获的异常就可能中断后续渲染,导致本该出现的链接没有出现。
  • 内容放进框架或影子 DOM:解析和提取的难度更高,链接发现更慢。
  • 懒加载:图片、列表的懒加载在真实浏览器里会触发,但在渲染资源有限时不一定全部执行。

怎么确认蜘蛛看到的是哪一版

  1. 关闭浏览器 JS,直接访问关键页面,看导航和正文是否还在。
  2. 查看渲染后的 HTML(浏览器检查元素,或使用搜索平台提供的 URL 检查工具),对比源码里有没有链接。
  3. 看服务器日志:静态资源有没有被抓取记录,缺失说明渲染可能不完整。
  4. 用抓取模拟工具对比源码与渲染结果,找出只在渲染后才出现的链接。

让关键入口更早被看到

  • 主导航、面包屑、分页,尽量用真实 href 的链接,按钮只做补充。
  • 「下一页」要有可抓取的地址,别只留一个 JS 按钮。
  • 首屏内容尽量服务端渲染或预渲染,重要链接不要等脚本执行完才出现。
  • 保持 JS、CSS 可被抓取,不要用 robots.txt 一刀切屏蔽静态目录。
  • 用 Sitemap 给重要 URL 兜底,但它替代不了站内链接的发现作用。
  • 列表页分批输出,配合分页地址,避免全部塞进无限滚动。
把关键链接放回源码,是成本较低的 URL 发现手段。渲染可以锦上添花,但别把它当成唯一的入口。

最后提醒一句:抓取和渲染的节奏由搜索引擎决定,调整之后不要期待立刻见效。可以隔一段时间回看日志里静态资源的抓取记录,以及渲染后页面的链接情况,再判断是否改善。