常见問题

入口頁連結加了 rel=nofollow,搜尋蜘蛛還會顺着發現目标 URL 吗

nofollow 经常被当成抓取開關来用,其實它更多是一種信任声明。本文区分連結級、頁面級和响應头三種 nofollow 寫法,說明它們對 URL 發現的實际影响差异,並给出蜘蛛池入口頁在排查相關問题时較為可靠的检查顺序與取舍思路。

常见問题

入口頁連結加了 rel=nofollow,搜尋蜘蛛還會顺着發現目标 URL 吗

在蜘蛛池入口頁的優化里,rel="nofollow" 是最容易被当成“開關”来用的属性。有人觉得加上它就等于告诉搜尋蜘蛛“別抓這個連結”,也有人觉得加了也白加。這两種理解都不太准确,值得把邊界讲清楚。

nofollow 到底在表達什么

rel="nofollow" 最初的设計意图是“我不為這個連結背书”。它更接近一種信任声明,而不是抓取指令。搜尋引擎收到它之後,通常會降低對目标 URL 的信任传递,但這並不等于禁止發現该 URL。

現實中的處理方式因引擎而异,也随時間變化:有的引擎會完全忽略這類連結,有的仍然會把連結中的 URL 放進待發現队列,只是不传递權重或降低權重。把 nofollow 当成“抓取開關”来用,風險不小。

關键区別:發現 URL 和抓取 URL 是两件事。nofollow 主要影响的是連結的信任與權重语义,不是抓取權限。

三種容易混淆的 nofollow 寫法

1. 連結級 rel="nofollow"

寫在 a 标簽里,只作用于這一條連結。入口頁里通常只有部分連結會加。這種寫法對“是否被發現”的影响最小,不少引擎依舊會顺着連結走一遍,只是不给權重。

2. 頁面級 meta robots nofollow

寫在 head 里,作用于整頁所有連結,影响范围大得多,也更容易被引擎嚴格执行。如果在入口頁用了它,等于把這個頁面上的所有出鏈都做了降權處理。

3. 响應头 X-Robots-Tag: nofollow

效果與頁面級 meta 類似,但作用在 HTTP 层,對非 HTML 文件同样生效。做蜘蛛池时,如果由中間层(CDN、反向代理、框架中間件)统一加了這個头,很容易在模板源碼里看不到,却在日誌里發現蜘蛛来得很少。

蜘蛛池场景下怎么取舍

  • 目标是让搜尋蜘蛛發現目标 URL:入口頁的出鏈建议保持預設,不要加 nofollow。發現渠道本来就有限,再主動收窄没有好處。
  • 入口頁里存在大量指向站外、與主题無關的連結:可以只對這些連結加 nofollow,避免入口頁整体被当成連結农场式的頁面。
  • 不要把整站或整張入口頁设為 nofollow。這會让入口頁在發現层面失去大部分價值,也會让“入口頁翻倍但目标 URL 抓取量不涨”這類問题更难排查。

怀疑 nofollow 影响發現时的排查顺序

  1. 先看渲染後的 HTML。用浏览器“查看網頁源代碼”,而不是開發者工具里的 DOM,確認 rel 属性确實輸出在源碼中。
  2. 检查 head 里是否存在 meta name="robots" content="nofollow",以及响應头里是否有 X-Robots-Tag,两者可能同时存在。
  3. 回到服務器日誌里找搜尋蜘蛛记錄。如果入口頁本身被抓了,但目标 URL 從来没被訪問過,問题可能不在 nofollow,而在連結是否真實可见、是否靠 JS 渲染、中間是否夹了跳轉。
  4. 確認是不是中間层自動加的属性。部分 CMS 或安全插件會给所有站外連結自動补上 rel="nofollow noopener",如果入口頁是批量生成的,很容易中招。

几個常见誤区

第一,把 nofollow 当成“防止蜘蛛發現”的手段。真正會阻止抓取的是 robots.txt 的 Disallow 和頁面級的 noindex,nofollow 不在這個层級。第二,認為加了 nofollow 就一定不會被抓,抓取决策還取决于入口頁自身的權重、抓取配額以及目标 URL 的歷史质量。第三,频繁在加與不加之間来回切換,導致日誌里的行為难以對比,反而增加排查成本。

更稳妥的做法是先明确這個入口頁的目标是“被發現”還是“控權重”,再决定連結属性怎么寫。目标是發現,就保持連結可以被正常解析;只是不想传递信任,就只對特定連結做處理,而不是整頁處理。