robots.txt 是蜘蛛進站先讀的文件,它不决定收錄,但决定蜘蛛能不能讀到入口頁上的連結。很多池子搭好之後長時間没動静,問题往往不在連結结构,而在 robots.txt 里一行寫错的 Disallow。
robots.txt 的邊界:它能做和不能做的事
這個文件是爬虫协议,不是訪問控制。它只對同一 host 下的路径生效,子域、其他域名各自獨立;它挡不住普通訪客,也挡不住不守規矩的采集程序。想把某些頁面排除在索引之外,正确做法是让頁面可被抓取、再返回 noindex,而不是用 Disallow 把它藏起来。反過来,如果 URL 被 Disallow 了,蜘蛛讀不到頁面上的 noindex 标簽,頁面仍有可能留在索引里,只是没有摘要。
入口頁鏈路要一路放行
池子的作用是让蜘蛛顺着入口頁走到目标頁,所以從首頁到目标頁之間的每一环都不该被拦。检查时至少覆盖這几類路径:
- 入口頁所在的目錄和首頁
- 列表、分頁、归档、标簽頁等聚合頁
- XML 站点地图文件及其所在目錄
- CSS、JS、字体等静態资源,蜘蛛渲染頁面时會取用
- 目标頁本身,以及通往目标頁的跳轉路径
如果入口頁用了參數翻頁,要特別注意別用 Disallow: /*? 這類一刀切的規則,它會把带參數的列表頁和入口頁一起屏蔽掉。
哪些路径适合收紧
收紧的目的是减少無效 URL 的暴露、把抓取频次留给有價值的頁面,而不是把蜘蛛赶走。常见的合理對象包括:站内搜尋结果頁、用戶中心與後台、測試目錄、临时生成的重复參數頁、批量下载目錄。這些頁面本身没有引導價值,被反复抓取只會稀释入口頁的抓取频次。
抓取频率:crawl-delay 別指望太多
crawl-delay 的遵守情况各家不同,主流搜尋引擎對它的支持程度有限,實际限速更依赖服務器並發能力和响應時間。與其在 robots.txt 里寫一個數字,不如把 TTFB 压下来、把動態頁做缓存。真正需要控制的往往是非搜尋引擎的采集類爬虫,可以按 User-agent 在服務器层做限流,這属于运维范畴;而對搜尋引擎返回不同内容、隐藏真實頁面則属于违規做法,不建议尝试。
几個容易踩的坑
- 整站 Disallow。一行 Disallow: / 會让池子彻底失去作用,蜘蛛不来,入口頁上的連結也没人看见。
- Disallow 和 noindex 混用。前文提過,被屏蔽的 URL 無法讀取 noindex,容易長期滞留在索引里。
- robots.txt 返回 5xx 或 403。搜尋引擎通常會把這種情况视為临时故障並暂缓抓取;返回 4xx 則可能被理解為站点没有限制,規則反而失效。
- robots.txt 返回 HTML。域名没配好时,任意路径都返回 200 加一段 HTML,爬虫解析失敗,等于没有規則。
- 通配符支持差异。* 和 $ 的匹配規則在 Google、Bing 上支持較好,百度等引擎對复杂匹配的兼容度有限,規則寫得太花容易失效。
- 多站点池只配了一個。每個域名、每個子域都要有自己的 robots.txt,漏配的站点等于没有约束。
- 改得太频繁。爬虫會缓存 robots.txt,規則變更不會立刻生效,来回改動反而让行為难以预期。
维護上的几個建议
- 上线前用搜尋引擎的抓取測試工具跑一遍關键 URL,確認入口頁和目标頁都是“允许抓取”。
- 把 robots.txt 当成配置文件管理,改動留记錄,方便回滚。
- 定期翻服務器日誌,如果發現被 Disallow 的路径仍有蜘蛛請求,說明規則缓存未更新或有爬虫不遵守。
- 每隔一段時間复查一次,尤其是新增目錄、改版、換域名之後。
一句话總结
robots.txt 不产生收錄,也不产生排名,它只是把通道让開或者關上。對蜘蛛池来说,判断标准很简單:從首頁到目标頁,蜘蛛能不能一路讀過去。能,就尽量少寫規則;不能,先修路径,再考虑收紧。