robots.txt 是站点與搜尋引擎蜘蛛之間的第一道沟通文件。它不复杂,但正因為简單,很多站点在上线、改版、迁移时随手改一行,就可能让蜘蛛停止抓取整站或某個栏目。等到發現新内容迟迟不被發現,才回头检查,往往已经過去几周。
這篇文章不谈玄学,只围绕一個目标:把 robots.txt 的常见誤配找出来,並给出可重复执行的检查流程。需要先明确一点,robots.txt 是抓取指令,不是訪問控制。它不能保護隐私,也不能阻止恶意抓取,敏感目錄應该用登入權限或服務器規則来隔离。
為什么 robots.txt 容易出错
它有几個特点:文件小、改動快、影响面大、生效不直观。很多 CMS 或框架會預設生成一份 robots.txt,运营人員可能從未完整看過;測試站和生产站共用模板时,也容易把測試环境的禁止規則带到线上。
更麻烦的是,不同搜尋引擎對通配符、Allow 規則、Crawl-delay 的支持程度並不完全一致。你以為只挡住了一個參數頁,實际可能连栏目列表一起挡了。
常见誤配清單
- Disallow: /:最嚴重的一行。它表示禁止抓取整站。常见于測試站複製到生产,或临时關閉抓取後忘记刪除。
- 路径寫错大小寫:robots.txt 中的路径通常区分大小寫。你寫 /News/,實际目錄是 /news/,規則可能不生效或誤伤。
- 通配符誤伤:Disallow: /*? 想挡參數頁,却可能把带查询參數的正常分頁、篩選頁一並挡掉。
- 挡住 CSS、JS、图片:如果禁止抓取静態资源,蜘蛛渲染頁面时可能看不到完整内容,影响對頁面质量的判断。
- Allow 與 Disallow 冲突:多數搜尋引擎采用最長匹配優先,而不是简單按顺序。規則越多,越难靠肉眼判断。
- Sitemap 地址寫错:协议、域名、路径任一错誤,都會让声明失效。Sitemap 應使用完整绝對地址。
- Crawl-delay 設定過大:部分蜘蛛不支持该指令;即使支持,過大的延迟也會减少單位時間内的抓取量。
- 多份 robots.txt 並存:例如根目錄一份、子目錄一份,容易互相矛盾。蜘蛛通常只讀取根目錄的那一份。
可执行的自查步骤
- 直接訪問文件:在浏览器打開 https://你的域名/robots.txt,確認返回 200,内容是最新版本。注意不要被 CDN 或缓存返回舊文件。
- 检查 User-agent 分组:確認针對 * 和主要搜尋引擎蜘蛛的規則是否符合预期。不要留下空分组或拼错的 User-agent。
- 逐條讀 Disallow 與 Allow:對每條規則,問一句“這條會挡住我想让蜘蛛抓的 URL 吗”。尤其注意根路径、栏目路径和參數通配符。
- 用官方測試工具模拟:主流搜尋引擎都提供 robots.txt 測試工具。輸入具体 URL,看结果是允许還是禁止。不要只凭肉眼判断。
- 核對 Sitemap 声明:確認地址可訪問、内容有效,並且與站点地图文件實际位置一致。
- 结合服務器日誌驗證:改動後观察蜘蛛對目标目錄的訪問量。如果關键目錄的抓取請求明顯减少,需要复查規則。
- 纳入上线检查清單:每次改版、迁移、新增子站时,把 robots.txt 列為必查項,避免模板差异導致誤封。
和 URL 發現、蜘蛛池的關系
蜘蛛池、外鏈引導、Sitemap 提交等做的是“让蜘蛛知道 URL 存在”,而 robots.txt 决定“蜘蛛能不能抓”。如果 robots.txt 把目标目錄挡住,前面做的 URL 發現工作就會卡在门口:蜘蛛可能知道地址,但不會抓取内容,新頁面自然难以進入後續流程。
因此,在做 URL 發現和抓取引導之前,先確認 robots.txt 没有誤封,是更省力的顺序。否則你可能會把問题誤判為“蜘蛛不来”,實际是“来了但被挡”。
把 robots.txt 当成一份需要定期审查的配置文件,而不是一次性寫完就忘的装饰文件。
總结
robots.txt 的自查不需要高深技術,但需要耐心和固定流程。重点检查全站禁止、路径大小寫、通配符誤伤、静態资源被挡、Sitemap 声明和多份文件冲突。每次改動後,用官方工具模拟關键 URL,再结合日誌观察抓取變化。這样可以在問题扩大前發現並修正,让蜘蛛的来訪真正落到有價值的頁面上。