先分清 nofollow 出現在哪里
很多人说 nofollow,其實说的是三個位置不同的東西:連結上的 rel=nofollow、頁面响應头里的 X-Robots-Tag: nofollow、以及 robots.txt 里對某個路径的 Disallow。這三者的作用范围完全不一样。連結級的 rel=nofollow 只针對那一條連結,不影响同頁其他連結;响應头里的 nofollow 针對整頁所有連結;robots.txt 則是直接不让抓某個路径。
蜘蛛池入口頁遇到的問题,绝大多數是第一種:目标 URL 明明放上去了,但模板里带着 nofollow,或者從別處複製連結时把 nofollow 一起粘了過来,自己却没注意。
加了 nofollow,搜尋蜘蛛還會不會抓
早期 nofollow 的含义比較硬,是提示搜尋引擎不要跟随這個連結。後来主流搜尋引擎把它改成了一種提示信号,意思是它會參考這個信号,但不再保證绝對不抓。也就是说,带 nofollow 的連結被偶尔抓取是有可能發生的,可這既不受你控制,也不代表這條通道有效。
不要把日誌里偶尔出現的一次抓取,理解成 nofollow 也能用来做 URL 發現。那次抓取可能来自別處:目标 URL 本身已经在其他頁面出現過、sitemap 里有记錄、其他站点有外鏈,或者爬虫只是顺手排進了队列。
更准确的说法是:加 nofollow 不等于百分百不抓,但它明确削弱了這條連結作為發現通道的作用。如果你的目的是让搜尋蜘蛛顺着入口頁走到目标 URL,那就不该把希望寄托在一條被标了 nofollow 的連結上。
對蜘蛛池入口頁意味着什么
入口頁的價值在于让爬虫在有限的抓取预算里看到並走向目标 URL。如果整頁連結都挂着 nofollow:
- 入口頁對目标 URL 的發現贡献會大幅下降,等于把這條路自己封上了;
- 爬虫来抓入口頁本身不受影响,但進来之後的收益變小,長期看這個入口頁的抓取優先級也难提升;
- 如果問题出在响應头,整頁所有連結都受影响,比單條連結加属性更麻烦,而且頁面源碼里看不出来。
還有一種常见誤會:以為 nofollow 能节省抓取预算,让爬虫把時間花在別的地方。在以發現為目的的入口頁上,這個逻辑基本不成立——你把連結放上去,本来就是為了让它走。
什么情况下才考虑加 nofollow
nofollow 有它正当的用途,只是和加速發現不是一回事:
- 頁面上有用戶生成内容、广告位、赞助或付費連結,這些地方加 nofollow 是常規做法;
- 某些連結指向與站点主题完全無關、你也不希望權重流過去的位置;
- 頁面里大量重复指向同一目标时,可以只保留一條正常的連結,其余删掉,而不是全部加上 nofollow。
如果目标是让自己站内的 URL 被發現、被抓取,入口頁上的目标連結用普通的 a 标簽加 href、不加 nofollow,是更符合逻辑的做法。
更實际的排查與做法
- 打開入口頁源碼,搜尋 nofollow,確認没有從模板或複製粘贴中带進来的属性。
- 检查响應头里有没有 X-Robots-Tag 中的 nofollow,這一項容易被忽略,因為頁面源碼里看不到。
- 目标連結尽量用可抓取的 a 标簽和 href,不要靠脚本拼接後再插入。
- 想控制抓取节奏,用 robots.txt、抓取频率、入口頁數量来調,而不是靠 nofollow。
- 用服務器日誌確認目标 URL 是被哪一次抓取带出来的,別只看有没有被抓過。
最後提醒一句:nofollow 只是众多信号之一,去掉它也不會让搜尋蜘蛛立刻来、立刻抓。它解决的是別自己给自己添堵的問题,而不是保證有效的問题。