常见問题

目标連結做成图片、按钮或表單,搜尋蜘蛛還能從入口頁發現它吗?

入口頁里的目标連結如果不用 a 标簽,而是做成图片、按钮或表單,被搜尋蜘蛛發現的概率會明顯下降。本文按元素類型拆開說明:哪些寫法仍可能被解析、哪些基本無效,以及怎么改、怎么用源碼和日誌驗證效果。

常见問题

目标連結做成图片、按钮或表單,搜尋蜘蛛還能從入口頁發現它吗?

先给结论:能不能發現,取决于它是不是真的“連結”

搜尋蜘蛛從入口頁發現 URL,靠的是解析 HTML 里的 a 标簽加 href 属性。凡是能還原成這個结构的寫法,都有被發現的机會;還原不出来的,基本不會被当成連結處理。图片、按钮、表單之所以让人困惑,是因為它們在浏览器里都能“点击跳轉”,但對解析器来说完全是另一回事。

图片連結:外面有 a 才有連結

  • 用 a 标簽包住 img,並且 a 的 href 指向目标 URL:href 是标准連結,和普通文字連結一样會被解析。
  • 只寫 img 的 src 指向目标 URL:這是引用图片资源,不是連結,蜘蛛不會把它当成頁面地址去跟進。
  • 用图片热区(map 加 area 的 href)做入口:href 属于連結,理论上可解析,但结构复杂,實际跟進情况通常不如普通 a 稳定。

按钮:button 不是連結

button 元素和 input type=button 都不是連結元素,即使绑定脚本里寫着跳轉地址,也不属于 HTML 解析阶段的連結發現范围。用 CSS 把 a 标簽做成按钮外观是可以的,因為底层還是 href;用真正的 button 元素再靠脚本跳轉,就回到了“連結由脚本生成”的老問题。

判断标准很简單:把頁面 HTML 抓下来,在源碼里搜尋目标 URL。搜不到,就不要指望搜尋蜘蛛從連結层面發現它。

表單:action 一般不算可跟進的連結

表單的 action 是提交地址,通常不作為普通連結跟進。GET 表單的 action URL 偶尔會被收錄,但這不是可依赖的机制,POST 表單更不會。把目标頁做成表單提交後的结果頁,等于把發現路径交给了用戶行為,而不是連結结构。

常见的“看起来能跳轉但抓不到”寫法

  1. 按钮用 onclick 跳轉:源碼里没有 href,只有脚本事件。
  2. 用 div 或 span 加点击事件:没有連結语义。
  3. 图片入口只给 img 的 src,外面没有 a 包裹。
  4. a 标簽的 href 寫成 javascript:void(0),真實地址藏在 data 属性里。
  5. 按钮提交表單後 302 到目标頁,中間隔了一层 POST 請求,蜘蛛一般不會主動去走。

想被稳定發現,可以怎么改

  • 優先用 a 标簽,href 寫完整地址,不要依赖脚本再拼接路径。
  • 需要按钮样式时,用 a 加 class 做外观,不要用 button 元素代替連結。
  • 图片入口保留外层 a,图片的 alt 寫清目标頁主题,便于人工核對。
  • 让服務端直接輸出連結,避免首屏 HTML 里没有、靠脚本补上。
  • 連結位置尽量靠近正文区域,頁脚堆叠、隐藏层或折叠面板里的連結,被發現的机會通常更低。

怎么驗證改完是否生效

不要在浏览器里点一下能跳轉就認為没問题,要看源碼和日誌:

  1. 查看頁面源代碼(不是右键检查元素後的 DOM),確認目标 URL 出現在 href 中。
  2. 關閉 JavaScript 後打開入口頁,看連結是否還存在于 HTML 里。
  3. 在服務器日誌里观察入口頁被抓之後,是否出現對目标 URL 的請求,注意两者時間可能相隔數小时到數天。
  4. 如果長期只有入口頁被抓、目标頁没有任何請求记錄,先回到連結寫法本身排查,而不是急着增加入口頁數量。

需要說明的是,連結寫法正确只解决了“可被發現”這一步。是否抓取、什么时候抓取、抓取後如何處理,仍由搜尋引擎自己决定,任何入口頁都無法保證结果。把结构寫規范,是為了不给自己制造無谓的障碍。