常见問题

目标 URL 只寫在 form action、纯文本或 data 属性里,搜尋蜘蛛還會去抓吗

入口頁里寫目标 URL 的方式,直接影响搜尋蜘蛛能不能發現它。表單 action、正文纯文本、data-* 属性、资源地址這些位置,浏览器里点得動,抓取器却未必当成連結。本文說明哪些寫法才算有效的連結入口、哪些容易被忽略,並给出可操作的源碼自检步骤和排查顺序。

常见問题

目标 URL 只寫在 form action、纯文本或 data 属性里,搜尋蜘蛛還會去抓吗

做蜘蛛池或站内运营时,為了让搜尋蜘蛛發現目标 URL,很多人會尝试各種寫法:有的把地址塞進表單的 action,有的直接寫成正文里的纯文本,有的藏在 data-* 属性或 JS 變量里。這些寫法在浏览器里可能点得動、跳得過去,但對搜尋引擎的 URL 發現来说,效果差別很大。

先区分两件事:用戶能跳轉,不等于蜘蛛能發現

浏览器和抓取器的行為逻辑不同。浏览器可以执行 JS、提交表單、点击绑定了事件的元素;抓取器主要依據 HTML 源碼里的标准連結结构,来判断“這里有一個新 URL”。一個地址只要没進入抓取器認可的連結入口,就很难排進待抓取队列。

通常會被当作連結處理的寫法

  • <a href>:最标准,正文里的普通連結是 URL 發現的主力。
  • sitemap 與 HTTP Link 响應头:属于主動声明,抓取器會讀取。
  • 301/302 的 Location:跳轉目标會被记錄下来。
  • link rel 系列标簽:canonical、alternate 等會传递 URL 信息,但用途不同,別把它当導航用。

這几類可以理解為“正式入口”。除此之外的寫法,大多需要額外條件才生效。

容易被漏掉的几種寫法

form 的 action

表單 action 指向的地址,一般不會被当作可發現的頁面連結。它更像功能入口,抓取器缺少“提交之後會發生什么”的上下文。如果目标 URL 只出現在這里,被發現的概率很低。

正文里的纯文本 URL

把地址直接寫在段落里、不加 a 标簽,多數情况下不會被自動轉成跟踪連結。少數工具會做识別,但不能当可靠方案,也無法控制它出現在哪個頁面、什么位置。

img、script、link 等资源地址

這些位置會触發资源抓取,但抓取器把它們当资源處理,未必會作為 HTML 頁面進入頁面發現流程。用图片去带目标頁,效果遠不如正文里的 a 标簽。

data-* 属性與 JS 變量里的字符串

把 URL 寫進 data-url 或脚本變量,需要渲染执行後才會生成真實連結。是否被發現,取决于抓取器是否渲染、渲染後連結是否進入可抓路径。稳定性差,出問题时排查成本也高。

area 元素

带 href 的 area 属于标准超連結,理论上可被识別,但實际使用少、坐标和路径容易配错,也是常见的漏網位置。能用 a 标簽就別用 area。

相對路径與 base 标簽

連結寫成相對路径时,解析结果受頁面地址和 base 标簽影响。如果 base 指到別的目錄,本来有效的連結可能被解析成错誤 URL,抓取器訪問到的就是 404。批量生成的入口頁尤其容易踩這個坑。

怎么自检入口頁有没有把連結“寫對”

  1. 查看頁面源碼,確認目标 URL 以 href 形式出現在 HTML 里,而不是只存在于脚本中。
  2. 用抓取模拟工具,或在禁用 JS 的情况下請求入口頁,看返回源碼里是否還有目标連結。
  3. 在搜尋资源平台的 URL 检查工具里,查看入口頁的渲染结果和识別到的連結列表。
  4. 翻服務器日誌,確認搜尋蜘蛛請求過入口頁,之後有没有繼續請求目标 URL。
  5. 如果是批量模板生成的入口頁,随机抽几個頁面核對,不要只看首頁那一個样本。

實務上的做法

連結發現這件事,越接近标准 HTML 越省事。把目标 URL 放在正文的 a 标簽里,保證它在未渲染的源碼中就存在,再配合 sitemap 声明,是相對可控的组合。表單、纯文本、属性里藏地址這些做法,可以当补充,但不要作為主要依赖。

連結能被發現,只是進入抓取队列的第一步。是否抓取、抓取频率、最终是否收錄,還受站点质量、抓取配額、内容重复度等多重因素影响。任何寫法都不保證收錄或排名,能做的只是减少技術层面的漏發現。