搜尋抓取

按钮、图片與脚本連結:非标准入口里的 URL 能被發現到什么程度

連結能不能被發現,取决于它是否以可解析的形式出現在 HTML 里,而不是用戶能不能点。本文梳理按钮跳轉、onclick、图片热区、表單提交、iframe 與异步加载這些常见寫法在 URL 發現上的實际表現,並给出一份可以照着核對的清單及改造建议。

搜尋抓取

按钮、图片與脚本連結:非标准入口里的 URL 能被發現到什么程度

發現的前提是連結可解析

搜尋蜘蛛發現 URL 的路径,最终還是落在 HTML 里能被解析出来的連結上。它不需要真的去点击,只需要從文档中提取出目标地址。所以問题不是用戶能不能点,而是這個地址有没有以它能讀到的形式出現在頁面代碼里。同一次跳轉,寫成 a 标簽加 href,還是寫成按钮加一段脚本,對用戶几乎没有区別,對發現却完全不同。

最稳的寫法:a 标簽加 href

只要目标地址出現在 a 标簽的 href 属性里,並且這個 a 标簽存在于初始 HTML 中,就属于最容易被發現的寫法。有两点需要注意:一是 href 要寫完整、可訪問的地址,不要用井号或 javascript 前缀之類的占位;二是如果地址是靠脚本在点击时才拼出来的,那么初始 HTML 里並没有它,發現就會推迟到渲染阶段,甚至完全不發生。

常见非标准入口的實际情况

按钮與 onclick

用 button 或 div 加 onclick 做跳轉的寫法,抓取端通常看不到目标地址,除非脚本同时設定了 href,或者服務端渲染时已经把連結輸出了。比較省事的做法是在按钮外层再放一個真實的 a 标簽,或者让服務端把目标地址寫進 href 里,脚本只负责交互效果。

图片、图标與热区

图片本身不是連結,只有当它被 a 标簽包住、且 href 指向目标頁面时才有發現價值。图片的 src 只代表素材地址,不會被当成頁面入口。热区(map、area)里的 href 一般可以被解析,但维護成本高、出错後不容易排查,能用普通連結就別用热区。

表單與 GET 提交

表單提交产生的地址通常不會被主動發現,抓取端不會替你去填表。如果篩選、排序這類结果頁确實值得被發現,更好的做法是同时提供静態連結,把常用组合寫成 a 标簽,而不是只留一個下拉框。這样既方便抓取,也方便用戶直接分享。

iframe 與异步加载

iframe 内部的連結,以及通過接口請求後再插入 DOM 的連結,在初始 HTML 中都不存在。前者依赖渲染,後者還要看抓取端是否执行脚本以及执行到什么程度。對于必须被發現的頁面,尽量不要让它們只存在于這两種位置,至少在服務端先輸出一份連結清單。

锚文本顺带说一句

锚文本不影响連結是否被提取,但會影响抓取端對目标頁面主题的初步判断。寫清楚比寫“点击這里”“更多”要友好一些,尤其在栏目入口這類位置,锚文本本身就是一份简短的說明。

一份可以照着核對的清單

  1. 栏目頁、列表頁、詳情頁這些關键入口,是否都有 a 标簽加可訪問的 href。
  2. 翻頁、篩選、排序是否有静態連結,而不是纯脚本按钮。
  3. 图片和图标按钮是否被 a 标簽包裹,href 是否指向真實頁面。
  4. 依赖脚本生成的連結,服務端能否先輸出一份可解析的版本。
  5. 重要入口是否被随手加上了 nofollow 属性,確認這是有意的選擇。
  6. 用抓取日誌里的 Referer 核對,從首頁出發能否把主要栏目都带出来。

哪些情况不必過度處理

不是所有連結都必须可被發現。登入後頁面、购物车内頁面、一次性操作结果頁,本来就不需要被抓取,用脚本或表單處理反而更合适。判断标准很简單:這個地址出現在搜尋结果里有没有價值。有,就给它一條可解析的連結;没有,就不必為了所谓的規范再增加一個入口。

改造成本與收益

把脚本跳轉改成真實連結,通常只是模板里改一處标簽,改動量不大,但影响的是整類頁面的發現通道。上线後观察抓取日誌中這些地址的首次出現時間與来源,比凭感觉判断更可靠,也更容易發現遗漏的位置。

能被發現的連結,不是用戶点得動的連結,而是代碼里寫得清楚的連結。