搜尋抓取

搜尋蜘蛛URL發現:JS跳轉與空锚点造成的内鏈入口丢失與修复

站内連結点击正常却不被蜘蛛發現,多半是 href 為空或由 JavaScript 接管了跳轉。本文梳理空锚点、button 跳轉、事件委托、前端路由等常见形態,给出禁用 JS 測試、抓取日誌核對、真實 href 改造與 Sitemap 兜底的具体做法,並說明服務器稳定性對抓取恢复的影响。

搜尋抓取

搜尋蜘蛛URL發現:JS跳轉與空锚点造成的内鏈入口丢失與修复

点击正常,不等于入口存在

站内很多連結在浏览器里点得動,但對搜尋蜘蛛来说並不算入口。典型情况是 <a> 标簽没有 href,或 href 寫成了 #、javascript:void(0),真正的跳轉由 onclick 或事件委托完成。蜘蛛解析 HTML 时取不到目标 URL,自然不會把该地址排進抓取队列。

容易踩到的几種形態

  • 空 href 與占位符:href="#"、href="javascript:;",点击後由脚本改地址。
  • 按钮或 div 充当連結:用 button、span、div 绑点击事件,元素本身不携带 URL。
  • 事件委托统一拦截:列表容器绑定一次点击,靠 data-url 属性取地址。
  • 表單跳轉:篩選、排序、翻頁通過表單提交實現,蜘蛛通常不會主動提交。
  • 前端路由:history.pushState 或 hash 變化,服務端没有對應的可抓取 HTML。

排查顺序

  1. 禁用 JavaScript 打開頁面,看目标地址是否還存在于 HTML 源碼中。
  2. 對比原始 HTML 與渲染後的 DOM,確認 href 是否執行时才寫入。
  3. 在抓取日誌里搜尋目标路径,如果長期没有請求记錄,基本可以判断入口缺失。
  4. 检查 Sitemap 是否覆盖這些 URL,確認兜底入口是否正常。

修复的方向

核心是让需要被發現的内容,都有一段服務端輸出的真實 href。JavaScript 用来增强体驗,而不是作為唯一跳轉方式。

  • 把 data-url 還原成真實連結,脚本只负责拦截和视觉反馈。
  • 篩選、排序參數尽量用連結承载,或保留一個可抓取的基础列表頁。
  • 分頁不要只留“加载更多”按钮,保留 page=2 這類可直接訪問的地址。
  • 前端路由頁面,考虑提供對應的服務端渲染或静態入口。

Sitemap 是补充,不是替代

Sitemap 能补入口,但替代不了内鏈。内鏈同时承担层級表達和權重传递,Sitemap 更像是一份發現清單。两者指向同一批 URL 时,抓取路径會更稳定。

抓取路径上的连带影响

如果導航和列表頁大量依赖脚本跳轉,蜘蛛能顺着的真實連結會變得很少,抓取容易集中在首頁和一級栏目。把關键入口改成真實 href,再配合扁平的内鏈结构,深层頁面被發現的概率才會提高。

服務器稳定性同样影响恢复

入口修好後如果長期没有訪問,要检查服務器响應。超时、5xx、连接重置都會让抓取中断,蜘蛛會降低後續訪問频率。先把响應時間和错誤率控制在正常区間,再观察入口是否逐步被發現。

連結形態修复後,抓取恢复通常需要一段時間,不要因為一两天没有變化就反复調整站点结构。

驗證與長期维護

改動上线後,用抓取日誌按路径統計請求量,對比修改前後。也可以定期在無 JS 环境下抽查關键入口。把“每個可点击項是否對應真實 URL”寫進前端评审清單,比事後排查更省力。

最後提醒一句:不要用 nofollow 或 robots 去遮盖失效入口,那只是隐藏症状。真正要解决的是服務端輸出里没有可解析的連結地址。