在蜘蛛池入口頁的優化里,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 影响發現时的排查顺序
- 先看渲染後的 HTML。用浏览器“查看網頁源代碼”,而不是開發者工具里的 DOM,確認 rel 属性确實輸出在源碼中。
- 检查 head 里是否存在 meta name="robots" content="nofollow",以及响應头里是否有 X-Robots-Tag,两者可能同时存在。
- 回到服務器日誌里找搜尋蜘蛛记錄。如果入口頁本身被抓了,但目标 URL 從来没被訪問過,問题可能不在 nofollow,而在連結是否真實可见、是否靠 JS 渲染、中間是否夹了跳轉。
- 確認是不是中間层自動加的属性。部分 CMS 或安全插件會给所有站外連結自動补上 rel="nofollow noopener",如果入口頁是批量生成的,很容易中招。
几個常见誤区
第一,把 nofollow 当成“防止蜘蛛發現”的手段。真正會阻止抓取的是 robots.txt 的 Disallow 和頁面級的 noindex,nofollow 不在這個层級。第二,認為加了 nofollow 就一定不會被抓,抓取决策還取决于入口頁自身的權重、抓取配額以及目标 URL 的歷史质量。第三,频繁在加與不加之間来回切換,導致日誌里的行為难以對比,反而增加排查成本。
更稳妥的做法是先明确這個入口頁的目标是“被發現”還是“控權重”,再决定連結属性怎么寫。目标是發現,就保持連結可以被正常解析;只是不想传递信任,就只對特定連結做處理,而不是整頁處理。