站点同时用 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。
这类问题的特点是隐蔽:文件都合法,冲突却实实在在。把两份文件放在同一张表里对照,通常比单独检查格式能更快定位。