搜尋抓取

連結寫不對,蜘蛛走不到:a 标簽、JS 跳轉與表單按钮的抓取差异

蜘蛛發現 URL 主要靠頁面上的連結。但 onclick、表單按钮、iframe 和 JS 路由里的地址,往往不是蜘蛛能直接识別的連結。本文整理几種常见寫法的差异,以及如何用 a 标簽和内鏈结构,让重要頁面有更短的抓取路径。

搜尋抓取

連結寫不對,蜘蛛走不到:a 标簽、JS 跳轉與表單按钮的抓取差异

蜘蛛發現新 URL 的路径,大多數时候不是靠主動提交,而是顺着頁面上已有的連結一路走。連結的寫法决定了蜘蛛能不能把這條路径接上。很多“頁面没被抓”的問题,追到最後不是服務器慢,也不是内容差,而是連結在 HTML 里根本不是一個可识別的連結。

蜘蛛最認的連結:带 href 的 a 标簽

在 HTML 里,最直接、最稳定的連結形式就是 <a href="...">。只要 href 指向一個可訪問的 URL,蜘蛛解析到這一段就能把它加入待抓队列。相反,如果地址被寫在 JavaScript 里、按钮上、图片的 onclick 里,蜘蛛需要額外执行脚本才能看到,發現效率會明顯下降。

容易被漏掉的几種寫法

onclick 和 JavaScript 跳轉

常见寫法是给 div、span 或按钮绑定 onclick,点击後执行 location.href 跳轉。對用戶来说能点,對蜘蛛来说它只是一段脚本。除非渲染能力完整执行了這段逻辑,否則這個 URL 很难進入抓取路径。

更稳妥的做法是保留一個真實的 a 标簽作為兜底,再用脚本增强交互。例如列表項外层是 a 标簽,内部再用 JS 處理篩選或統計。

表單按钮和下拉菜單

用 button 提交表單、用 select 切換栏目,這類入口不會自動變成連結。蜘蛛不會主動去填表單、選下拉項。如果你希望分類頁、篩選頁被看到,至少要在頁面上给一個可点击的 a 标簽入口,而不是只靠表單控件。

iframe 和框架嵌套

iframe 里的連結和内容,抓取路径會被切断一层。蜘蛛可能抓到 iframe 的地址,但不一定會繼續深入里面的連結。重要導航和内容尽量放在主文档里,iframe 只用于必要的第三方模块。

相對路径與协议問题

相對路径本身没問题,但要注意基准地址。如果頁面里有 <base> 标簽,或者連結寫成 //example.com/page 這種协议相對形式,蜘蛛解析出的绝對地址可能和你想的不一样。建议在關键導航中使用完整路径,至少保證根路径明确。

内鏈结构:让重要頁面被短路径走到

連結能被识別只是第一步,蜘蛛還要决定走哪條路。首頁、栏目頁、詳情頁之間的内鏈层級越清晰,重要頁面被發現的路径就越短。可以從這几個习惯入手:

  • 主導航覆盖主要栏目,不要只放在 JS 下拉里。
  • 列表頁给每個條目一個真實的 a 标簽,指向詳情頁。
  • 詳情頁用面包屑回到栏目,同时给相關推荐的内鏈。
  • 分頁連結寫成可抓取的 a 标簽,而不是“加载更多”按钮。
  • 避免把大量連結塞進頁脚同一区域,權重和路径都會變散。

Sitemap 是补充,不是連結的替代品

Sitemap 能帮助蜘蛛發現 URL,但它不负责传递内鏈關系,也不保證每個地址都會被優先抓取。内鏈仍然是蜘蛛理解站点结构的主要依據。比較稳的组合是:重要頁面有清晰的内鏈入口,Sitemap 作為全量清單提交,日誌里再核對哪些 URL 實际被訪問過。

如果某個頁面只能從 Sitemap 進入,站内没有任何連結指向它,那它在抓取路径上就接近孤岛。蜘蛛即使抓了一次,後續重訪的概率也低。

日常检查的简單顺序

  1. 查看頁面源代碼,搜尋目标 URL,確認它出現在 a 标簽的 href 里。
  2. 禁用 JavaScript 後再看一遍,重要連結是否還能看到。
  3. 用站点抓取工具或日誌,看蜘蛛實际訪問了哪些連結。
  4. 對重要頁面,確認從首頁出發的点击层級没有過深。

連結寫法不是玄学,它决定了蜘蛛能不能顺着路走過来。把入口做成标准連結,把重要頁面放在浅层内鏈里,剩下的交给抓取节奏和時間。