搜尋抓取

搜尋蜘蛛抓取:連結不以 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,或不同节点返回的内容與狀態碼不一致,蜘蛛在有限次重试後可能降低该路径的訪問频率,表現為入口“事實不可達”。因此核對連結問题时,最好同时观察一段時間的响應狀態碼分布,把連結形態與响應质量分開確認,避免把两種問题混在一起排查。

提示:連結改造上线後,观察周期通常需要數周。日誌里入口出現频次上升,只能說明可發現性有所改善,並不代表一定被收錄或获得排名,不要據此下结论。

把“頁面上有連結”和“源碼里有連結”区分開,是排查這類問题的關键。先確認入口是否可被解析,再考虑抓取频率、预算與内容质量,排查顺序會清晰很多。