站点同时用 robots.txt 和 Sitemap 约束抓取入口时,两份文件如果各说各话,就會出現“頁面在 Sitemap 里提交了、却在 robots 里被挡掉”的情况。這類冲突不會报错,也不會在站点地图报告里直接点出来,往往要等到日誌里發現某些目錄長期没有蜘蛛請求,才會回头核對。
先分清两份文件的职责
robots.txt 管的是能不能抓,Sitemap 管的是有哪些 URL 值得發現。前者是门槛,後者是清單。门槛把清單里的地址拦住了,清單本身不會失效,但那份清單對抓取就没有實际意义了。核對时要把两份文件放在一起看,而不是各自检查格式是否合法。
常见的冲突形態
- Disallow 覆盖了 Sitemap 提交的目錄。例如 Sitemap 收錄了 /tag/ 下的全部列表頁,robots.txt 却寫了 Disallow: /tag/,两條規則同时生效,入口自然進不去。
- Allow 與 Disallow 顺序寫反。規則按最長匹配優先判定,長度相同时按先出現的為准。把 Allow 寫在後面、路径又更短,實际生效的往往還是 Disallow。
- 通配符與结尾锚点誤伤。寫成 Disallow: /*? 或 Disallow: /*.pdf$ 這類規則时,很容易连带挡掉正常的列表頁和内容頁。
- robots.txt 中的 Sitemap 行指错地址。寫成了測試域名、http 版或已经不存在的路径,蜘蛛顺着這行拿不到清單,等于白白浪費一條發現通道。
- 多协议、多子域各自為政。https 與 http、主域與 www 各自有一份 robots.txt,内容還不一样,抓取行為就會随入口不同而不同。
核對顺序
- 用蜘蛛的 User-Agent 抓取 robots.txt 原始内容,確認返回 200、内容類型正确,没有被 CDN 或 WAF 換成驗證頁。
- 從 Sitemap 里挑几個典型 URL,按 robots.txt 的規則逐條手動匹配一遍,看最终结论是允许還是拒绝。
- 检查規則顺序,把允许優先的規則放在更靠前的位置,並確認没有多余的通配符。
- 核對 Sitemap 行指向的地址,與浏览器地址栏里的實际域名、协议保持一致。
- 把各协议、各子域的 robots.txt 拉出来對比一遍,找出内容不一致的那几份。
用日誌做二次驗證
規則改完之後,光看文件對不對還不够,要回到服務器日誌里確認。重点看两類记錄:一是蜘蛛對 robots.txt 本身的請求频率和返回碼,二是那些原本應该被抓取的目錄,最近有没有出現請求记錄。如果 robots.txt 每天被反复請求,而目标目錄依然空白,說明拦住的可能不是 robots 規則,而是別的原因,比如内鏈压根没指向過去。
robots.txt 里的 Disallow 只影响抓取,不影响收錄移除。想让已经收錄的頁面登出,需要的是 noindex 或其它手段,別指望加一行 Disallow 就能顶替。
修正之後怎么观察
調整後不用急着下结论。先確認文件语法没有低級错誤,再留一段观察期,看日誌里目标路径的請求量是否逐步出現。同时留意 Sitemap 的提交狀態,避免清單長期停留在舊版本。若几周後仍無變化,優先回头检查内鏈结构,而不是繼續改 robots.txt。
這類問题的特点是隐蔽:文件都合法,冲突却實實在在。把两份文件放在同一張表里對照,通常比單獨检查格式能更快定位。