点击正常,不等于入口存在
站内很多連結在浏览器里点得動,但對搜尋蜘蛛来说並不算入口。典型情况是 <a> 标簽没有 href,或 href 寫成了 #、javascript:void(0),真正的跳轉由 onclick 或事件委托完成。蜘蛛解析 HTML 时取不到目标 URL,自然不會把该地址排進抓取队列。
容易踩到的几種形態
- 空 href 與占位符:href="#"、href="javascript:;",点击後由脚本改地址。
- 按钮或 div 充当連結:用 button、span、div 绑点击事件,元素本身不携带 URL。
- 事件委托统一拦截:列表容器绑定一次点击,靠 data-url 属性取地址。
- 表單跳轉:篩選、排序、翻頁通過表單提交實現,蜘蛛通常不會主動提交。
- 前端路由:history.pushState 或 hash 變化,服務端没有對應的可抓取 HTML。
排查顺序
- 禁用 JavaScript 打開頁面,看目标地址是否還存在于 HTML 源碼中。
- 對比原始 HTML 與渲染後的 DOM,確認 href 是否執行时才寫入。
- 在抓取日誌里搜尋目标路径,如果長期没有請求记錄,基本可以判断入口缺失。
- 检查 Sitemap 是否覆盖這些 URL,確認兜底入口是否正常。
修复的方向
核心是让需要被發現的内容,都有一段服務端輸出的真實 href。JavaScript 用来增强体驗,而不是作為唯一跳轉方式。
- 把 data-url 還原成真實連結,脚本只负责拦截和视觉反馈。
- 篩選、排序參數尽量用連結承载,或保留一個可抓取的基础列表頁。
- 分頁不要只留“加载更多”按钮,保留 page=2 這類可直接訪問的地址。
- 前端路由頁面,考虑提供對應的服務端渲染或静態入口。
Sitemap 是补充,不是替代
Sitemap 能补入口,但替代不了内鏈。内鏈同时承担层級表達和權重传递,Sitemap 更像是一份發現清單。两者指向同一批 URL 时,抓取路径會更稳定。
抓取路径上的连带影响
如果導航和列表頁大量依赖脚本跳轉,蜘蛛能顺着的真實連結會變得很少,抓取容易集中在首頁和一級栏目。把關键入口改成真實 href,再配合扁平的内鏈结构,深层頁面被發現的概率才會提高。
服務器稳定性同样影响恢复
入口修好後如果長期没有訪問,要检查服務器响應。超时、5xx、连接重置都會让抓取中断,蜘蛛會降低後續訪問频率。先把响應時間和错誤率控制在正常区間,再观察入口是否逐步被發現。
連結形態修复後,抓取恢复通常需要一段時間,不要因為一两天没有變化就反复調整站点结构。
驗證與長期维護
改動上线後,用抓取日誌按路径統計請求量,對比修改前後。也可以定期在無 JS 环境下抽查關键入口。把“每個可点击項是否對應真實 URL”寫進前端评审清單,比事後排查更省力。
最後提醒一句:不要用 nofollow 或 robots 去遮盖失效入口,那只是隐藏症状。真正要解决的是服務端輸出里没有可解析的連結地址。