robots.txt 经常被当成"收錄開關",但它真正约束的是抓取行為。把它理解成一份寫给蜘蛛的路径說明,比理解成拦截器更贴近實际效果。
它管的是抓取范围,不是收錄结果
一個 URL 被 Disallow 之後,蜘蛛通常不會去請求它。但如果這個地址有外部連結指向,它仍然可能出現在搜尋结果里,只是缺少标题和摘要這類来自頁面的信息。反過来,没有被 Disallow 的頁面也不等于一定被抓取、一定被收錄,還要看連結、站点權重和抓取资源。
所以配置之前先想清楚目的:是為了省下抓取资源,還是為了阻止某個頁面出現在结果里。後者更适合用頁面級的 noindex,而且要注意——如果一個頁面既被 Disallow 又寫了 noindex,蜘蛛讀不到 noindex,這個标簽就形同虚设。
基础寫法與几個容易忽略的規則
- 文件必须放在站点根目錄,路径固定為 /robots.txt,子目錄下的同名文件不會被讀取。
- 規則按 User-agent 分组,组與组之間用空行隔開,同一组内可以寫多條 Disallow 和 Allow。
- Disallow 和 Allow 都是前缀匹配,寫 /admin 會同时命中 /admin、/admin/、/administrator,需要精确时用结尾符号。
- 两條規則都匹配时,取匹配字符串更長的那條,這就是用 Allow 做局部放行的原理。
- 星号表示任意字符,美元符号表示结尾,例如 /*?page= 只拦截带參數的翻頁地址。
Sitemap 寫在 robots.txt 里,利弊各一半
在 robots.txt 末尾加一行 Sitemap 地址,是一個成本很低的补充手段,但它不是萬能入口。
- Sitemap 行不属于任何 User-agent 分组,寫在哪一组後面都可以被讀到,但為了可讀性一般單獨放在文件末尾。
- 必须寫完整的绝對地址,包括协议和域名,相對路径無效。
- 可以声明多個 Sitemap,也可以在 Sitemap 索引文件里再组织一层。
- 並非所有抓取方都會讀取這一行,它更像提示,而不是提交動作。搜尋後台里的主動提交仍然值得保留。
三類常见的誤屏蔽
连 CSS、JS 一起屏蔽
為了降低抓取压力,有人會直接屏蔽静態资源目錄。结果蜘蛛打開頁面时看不到样式和脚本执行後的内容,對頁面结构和正文位置的判断會受影响。需要控制抓取量的话,優先限制的是無價值的參數頁和搜尋頁,而不是渲染必需的资源。
把分頁和篩選參數一刀切
用一條带星号的規則拦掉所有带問号的地址,看起来干净,實际會连正常的翻頁、排序、地区篩選一起挡掉。這些地址往往是發現深层内容的重要通路。更稳妥的做法是先看日誌,確認哪些參數组合确實在制造大量重复請求,再针對具体參數放行或屏蔽。
整站 Disallow 之後指望 Sitemap 兜底
整站禁止抓取,再提交 Sitemap,這两件事是相互抵消的。Sitemap 里的地址被規則挡住,蜘蛛不會去請求,提交也就失去了意义。測試环境需要完全隔离时,整站屏蔽没問题,但要清楚這是"暂时不让抓",而不是"換條路抓"。
改完怎么確認确實生效
- 直接用請求工具訪問 /robots.txt,確認返回 200、内容是最新版本,並且没有被 CDN 或缓存节点保留舊副本。
- 用搜尋引擎提供的抓取測試工具,把几個關键 URL 逐一测一遍,看是允许還是被拦截,比對着規則自己推演更可靠。
- 翻服務器日誌,看被屏蔽路径的請求量是否在几天内明顯下降。規則是逐步生效的,不會立刻归零。
- 在搜尋後台查看抓取統計和 Sitemap 报告,確認没有出現大面积的抓取失敗或讀取異常。
小结
robots.txt 的價值在于把抓取资源引導到真正有價值的地址上,而不是把問题頁面藏起来。寫完規則之後,至少做一次實测:確認该放行的没被挡住,该挡住的确實没有蜘蛛再来。規則越简單,越不容易在几個月後變成谁也说不清的歷史遗留。