搜尋抓取

蜘蛛能看懂哪些連結:a 标簽之外的 URL 發現方式

蜘蛛發現 URL 主要靠解析頁面里的連結,而連結寫成什么形態,直接决定它能不能走通。本文讲清 a 标簽、图片連結、JS 跳轉、iframe 之間的差別,以及 nofollow、robots、canonical 這几层過滤,並给出几條可操作的检查步骤。

搜尋抓取

蜘蛛能看懂哪些連結:a 标簽之外的 URL 發現方式

做站内連結时,很多人預設只要頁面上出現了那個 URL,蜘蛛就能顺着走過来。實际情形要细一些:蜘蛛讀的是 HTML 里的連結元素,不是人眼看到的可点区域。同一個跳轉,前端做得再顺滑,如果連結形態不對,路径就断在那一頁。

蜘蛛走的是連結元素,不是你看到的可点区域

蜘蛛發現新 URL 的渠道有限,主要靠解析頁面里带 href 的連結,以及 Sitemap、提交接口這類外部輸入。所以問题往往不是“有没有放連結”,而是“放的是不是蜘蛛能讀的那種連結”。

最不容易出問题的寫法

  • 用原生 a 标簽,href 寫完整地址或可解析的相對路径,不要用按钮加事件代替。
  • 锚文本寫清楚目标頁讲什么。蜘蛛靠它判断上下文,用戶也靠它决定点不点。
  • 同一個目标頁尽量用统一 URL,带參數的變体容易把抓取分散到多個地址上。
  • 图片跳轉要把图片包在 a 标簽里,光给图片加 alt 不能当連結用。

几種常见的“蜘蛛看不见”的連結寫法

用脚本监听点击跳轉

把跳轉寫成按钮绑定事件,或者寫成 javascript:void(0),蜘蛛在原始 HTML 里看不到目标地址。即使渲染能力較强,也依赖脚本执行和等待時間,能拿到和稳定拿到是两件事。如果必须用前端路由,至少保證服務器返回的 HTML 里有一份對應的 a 标簽,或者在頁面底部放一份可被解析的連結列表。

图片、图标與热区地图

導航用图标、正文用图片跳轉很常见。图片本身不带地址,必须由 a 标簽承载。图片作為連結时,alt 描述的是图片内容,無法完全替代锚文本,目标頁會少一份上下文說明。热区地图的寫法蜘蛛通常识別不了,重要入口別只放热区。

下拉菜單、Tab 與折叠面板

如果菜單項在初始 HTML 里就存在,只是被 CSS 隐藏,一般不影响發現;如果要点開之後才由脚本插入 DOM,就要看渲染是否成功。判断方法很直接:在浏览器里禁用 JavaScript 刷新頁面,看連結還在不在。

iframe 與第三方组件

iframe 里的連結属于另一個文档,蜘蛛對它的處理不如主文档干脆。评论区、站内搜尋、外部挂件里的連結,不要当成主要的内鏈来源。

能發現,不等于能被抓

連結可讀只是第一步,後面還有几层過滤要看:

  • nofollow:連結還在頁面上,但發現信号會被削弱,适合用在确實不值得跟的地址上。
  • robots.txt:路径被剪掉後,蜘蛛不會去請求,頁面里連結再多也没用。
  • canonical:頁面上有連結,但規范地址指向別處,抓取和归属判断會跟着變。
  • 狀態碼:指向 404、410 的連結會白耗抓取次數,也會让蜘蛛少走這一支。

给蜘蛛留一條稳的路:可操作的检查顺序

  1. 新頁面發布後,確認至少有一個可被解析的 a 标簽指向它,最好来自一個已经被抓取的頁面。
  2. 禁用 JavaScript 再刷新一次,检查導航、列表、分頁里的連結是否仍然存在。
  3. 關键入口不用 onclick、不用纯图片、不用热区;次要入口可以,但要另给一條文本連結。
  4. 定期用服務器日誌對照,找出從没被請求過的 URL,回头看看它們有没有可解析的入鏈。
  5. 把 Sitemap 当作兜底手段:它不保證被抓,但能给缺少强内鏈的頁面一個被發現的机會。
連結的可發現性是地基,抓取與否還要叠加服務器响應、頁面体积和抓取预算等因素。地基修好,後面的問题才有得谈。

小结

與其反复纠结蜘蛛為什么不来,不如先把連結寫回它最容易讀的形態。一個标准 a 标簽、一句说得清的锚文本,往往比一堆前端動效更能决定 URL 會不會進入抓取队列。