站点上线後,很多人第一反應是去 robots.txt 寫几行 Disallow,或者给頁面加個 noindex,然後以為問题解决了。但搜尋蜘蛛對不同指令的遵守方式並不一样:有的指令让它不要来抓,有的指令让它抓了但別收錄,還有的只是给連結一個提示。搞混這三者,常常會出現“URL 被禁止抓取,却仍然出現在结果里”或者“想屏蔽的頁面還是被訪問”的情况。
Disallow 只是“別抓”,不是“別收錄”
robots.txt 里的 Disallow 作用范围是抓取行為本身。蜘蛛讀到這段規則後,通常不會再去請求匹配的 URL。但這里有個關键点:如果這個 URL 已经通過外鏈、Sitemap 或其他頁面被蜘蛛發現,它仍然可能作為一個“已知地址”存在于索引判断中。因為没有抓取頁面内容,蜘蛛無法讀到頁面里的 noindex,也無法確認頁面現在長什么样。
所以,一個只靠 Disallow 屏蔽的頁面,结果可能是:不抓取内容,但地址仍可能被展示,甚至标题和摘要来自外部連結的锚文本。要真正让它登出索引,通常需要先允许抓取、让蜘蛛讀到 noindex,等確認生效後再考虑是否恢复 Disallow。
noindex 要能被讀到才有意义
meta robots 的 noindex 和 HTTP 头里的 X-Robots-Tag 都是頁面級指令,它們必须被成功抓取之後才能生效。這就带来一個很實际的顺序問题:
- 如果 robots.txt 禁止了抓取,蜘蛛讀不到 noindex;
- 如果頁面返回 404、503 或登入跳轉,蜘蛛也可能讀不到 noindex;
- 如果 noindex 只寫在 JavaScript 渲染後的 DOM 里,蜘蛛不一定能等到那一步。
因此,屏蔽一個頁面时,較稳妥的做法通常是:先确保頁面可以被正常抓取,同时返回 noindex;確認索引狀態變化後,再决定是否用 robots.txt 减少無意义的抓取。顺序反了,往往两头都不生效。
nofollow、ugc、sponsored 改的是“發現路径”
連結属性不是刪除連結,它更像一個提示:這個連結是否值得蜘蛛繼續走下去。nofollow 表示不保證传递權重,但蜘蛛仍可能出于發現新 URL 的目的去訪問;ugc 和 sponsored 分別對應用戶生成内容和付費連結,主要用于标注連結性质。
對抓取路径来说,带有這些属性的連結仍然可能被遍歷,尤其在站内導航、评论区、聚合頁里。它們不會自動帮你节省抓取预算,也不能当作屏蔽手段使用。真正想让某個地址不被發現,更直接的方式是去掉連結、加 noindex,或者用 robots.txt 控制抓取。
抓取节奏:Crawl-delay 與服務器承受力
robots.txt 里的 Crawl-delay 是给蜘蛛的抓取間隔建议,但不同搜尋引擎的支持程度不一样。與其依赖某一條指令,不如從服務器侧观察:当蜘蛛集中訪問时,响應時間是否明顯變長,5xx 是否增多。如果服務器開始吃力,更有效的做法通常是優化慢查询、加缓存、限制單 IP 並發,而不是只寫一個 Crawl-delay。
蜘蛛的抓取节奏,本质上是站点响應能力和内容更新频率共同作用的结果,不是一條規則就能單方面决定的。
上线前後的检查顺序
- 確認要屏蔽的 URL 目前返回什么狀態碼,是否可正常抓取;
- 需要登出索引的頁面,優先用 noindex 或 X-Robots-Tag;
- 确實不需要被抓取的目錄,再用 robots.txt 的 Disallow 减少請求;
- 检查站内連結属性,確認重要 URL 没有被 nofollow 誤伤;
- 观察抓取日誌里被禁止的 URL 是否還在被請求,以及 5xx 和响應時間變化。
這些指令各自解决不同层面的問题。把它們当成一套组合来用,比單獨依赖某一個規則更接近實际效果。上线後定期回看抓取日誌和索引狀態,才能知道蜘蛛到底走了哪條路。