配置互相冲突,指的是两条或多条规则对同一个URL给出相反指令,导致百度蜘蛛无法判断该抓取还是该放弃。识别方法不是凭感觉猜,而是把robots.txt、页面meta robots、HTTP响应头、canonical和站点地图逐项对照,找出对同一地址说法不一致的地方。
最常见的误解是:只要robots.txt里写了Disallow,就等于这个页面不会被收录。实际上robots.txt控制的是抓取,不是索引。如果页面已被抓取过,之后才加Disallow,百度仍可能保留已有索引;反过来,允许抓取也不代表一定收录。
因此判断冲突时,要把指令分成两类看:
<meta name="robots">、HTTP响应头中的X-Robots-Tag、canonical、noindex。冲突往往出现在跨类组合上。比如robots.txt允许抓取,但页面meta写了noindex,这不是矛盾,而是“可抓但不要索引”的正常组合;真正矛盾的是robots.txt禁止抓取,页面却写noindex——蜘蛛进不来,永远读不到noindex,索引状态可能长期不变。
找冲突最直接的办法是拿百度搜索资源平台里的抓取诊断或抓取频次记录,对照服务器访问日志。具体步骤:
如果诊断显示“抓取失败”但日志里根本没有这次请求,可能是防火墙拦截或DNS解析到了错误节点;如果诊断成功但页面内容与预期不同,则更可能是缓存或渲染层冲突。
下面每组都要用同一URL去验证,不能拿A页面的规则去推断B页面:
注意:HTTPS本身不保证安全无漏洞,也不保证排名提升,它只是协议层的一个变量,不要把它当成解决收录问题的万能项。
假设某站点robots.txt内容为:
User-agent: Baiduspider<br>Disallow: /tmp/<br>Allow: /tmp/help.html
同时该页面的HTML里写了<meta name="robots" content="noindex">。这里Allow与Disallow针对同一路径前缀,具体哪条生效取决于百度对规则的匹配方式,而noindex又要求蜘蛛必须抓到页面才能读到。判断结果的方法是:先用抓取诊断确认蜘蛛是否真的取到了这个页面,再在日志中确认返回码。如果取不到,noindex就是空指令,需要先放开抓取;如果取到了却仍不收录,再排查canonical和内容质量。
找到矛盾后,按影响面从大到小改:先统一协议与域名版本(301),再修正robots.txt中误伤的路径,然后清理页面级noindex与canonical的冲突,最后同步站点地图。每次只改一类,改完用抓取诊断复验同一个URL,并记录改动前后的状态码与抓取时间。如果一次改多项,出现新问题时无法判断是哪一项引起的。
下一步:挑一个当前收录异常的URL,把它的robots.txt匹配结果、HTTP状态码、meta robots、canonical四项写在一张表里,逐项标注是否一致,先找出第一处矛盾再动手修改。