在蜘蛛池和站点运营的日常排查里,经常會遇到一種情况:入口頁放了不少目标連結,但目标 URL 迟迟没有抓取记錄。顺着排查下去,發現目标 URL 的 robots.txt 里寫了一條 Disallow。于是問题来了——入口頁里的連結還能不能被搜尋蜘蛛發現?下面把這件事拆開讲。
發現連結和抓取頁面是两件事
搜尋蜘蛛處理一個 URL 通常分两步:先從入口頁、sitemap 或其他来源發現這個 URL,把它放進待抓取队列;然後在真正抓取时才去讀取 robots.txt,决定允不允许取回内容。robots.txt 管的是第二步,不是第一步。
也就是说,目标 URL 被 Disallow 之後,搜尋蜘蛛依然可能在入口頁里看见它,但通常不會再正常抓取頁面内容。這两件事不要混在一起判断,否則很容易在入口頁上做無意义的調整。
robots.txt 屏蔽之後,常见的结果
- 連結能被發現,URL 可能出現在索引里,但缺少标题和摘要,或者只顯示一條說明無法提供描述的提示;
- 不會讀取頁面正文,也就不會通過這個頁面繼續發現里面的新連結;
- 如果之前已经抓取並收錄過,内容可能逐渐從索引里淡出,但不同搜尋引擎的處理节奏不一样;
- 屏蔽不等于刪除,也不等于永久不出現,搜尋引擎調整規則或你改動 robots.txt 後,表現會變化。
這几種结果都不是绝對的,不同搜尋引擎、不同時間点的處理會有差异,不要把它当成一個可以精确開關的功能。
几種容易出問题的 robots.txt 寫法
路径寫得太宽或太窄
Disallow: / 會挡掉整站;Disallow: /news 則會同时挡掉 /news、/news/1、/newsletter 這類前缀相同的路径。想只挡某一類目錄,注意末尾斜杠和路径层級,別让前缀匹配誤伤到別的文件。
通配符和結束符用错
通配符和結束符的语义在主流搜尋引擎里基本一致,但滥用容易誤伤。比如想挡參數頁却寫成宽泛的匹配,结果把带問号的正常頁面也一起挡了,排查时很难第一時間想到。
robots.txt 文件本身返回異常
如果 robots.txt 返回 5xx,搜尋蜘蛛通常會保守處理,可能暫停對该站点的抓取;返回 404 則一般视為没有限制。用服務器日誌或抓取測試工具確認它返回的是 200,且内容就是你以為的那一份。缓存、CDN 和反向代理也可能让它返回一份舊版本。
想控制收錄,noindex 往往更合适
如果你的目的是「不希望這個頁面出現在搜尋结果里」,而不是「节约抓取资源」,那 robots.txt 並不是首選。
- 先允许搜尋蜘蛛抓取頁面;
- 在頁面 head 里加上 noindex 的 meta robots 标簽,或返回對應的 X-Robots-Tag 响應头;
- 用抓取測試工具確認搜尋蜘蛛看到的是 noindex,而不是被 Disallow 挡在外面;
- 等頁面從索引中消失後,再考虑是否需要額外處理。
原因很简單:被 Disallow 的頁面,搜尋蜘蛛讀不到 noindex,也就無法確認你的意图,收錄狀態可能長期保持原样。
蜘蛛池运营里更稳妥的几條习惯
- 目标 URL 預設允许抓取,除非确有敏感目錄需要屏蔽;
- 入口頁和目标 URL 的 robots.txt 分開检查,不要只看一邊;
- 新增目标 URL 後,用抓取測試工具或服務器日誌確認搜尋蜘蛛是否真的来過;
- 不要把 robots.txt 当作清理收錄的工具,它更像是抓取范围的控制阀。
提醒:robots.txt 是一種抓取约定,不是安全机制,也不保證任何索引结果。真正的收錄還會受到内容质量、連結结构、站点整体表現等多方面影响。
回到最初的問题:入口頁里的連結在被屏蔽的情况下,仍有可能被發現,但後續的抓取和收錄會受限。如果你希望目标 URL 正常參與抓取,先把 robots.txt 里的誤屏蔽處理掉,再去看入口頁和連結结构,排查顺序會清楚很多。