识别配置互相冲突,不能只靠“看哪个文件写了什么”,而要先明确你期望的交付结果:某个URL应当被抓取、被索引、能在站内被正常访问。然后倒推这个结果需要哪些配置同时成立,再逐项检查它们是否给出相反指令。凡是同一URL在不同位置得到“允许”与“禁止”两种结论,就是冲突。
从结果倒推,至少需要以下资料,缺一项就可能把冲突误判为“没收录”:
robots.txt中针对该路径的规则,以及页面上的<meta name="robots">。noindex,以及规范链接<link rel="canonical">指向哪里。这四类资料分别对应“能不能抓”“让不让留”“算哪个地址”“能不能到”。冲突往往出现在其中两层给出相反答案。
把每个URL的期望结果写成一列,实际配置写成另一列,逐项比对。假设某商品页希望被收录:
robots.txt写Disallow: /product/,但该页面meta robots是index,follow——抓取被禁止,索引指令无法被可靠读取,属于冲突。robots.txt允许抓取,页面却是noindex——抓取允许但明确要求不索引,不算配置错误,但和“希望收录”的交付结果冲突。canonical指向另一个URL——索引信号被转移到别处,本页可能不作为独立结果出现。200但站内没有任何链接指向它,只能靠站点地图发现——可达性弱,收录不稳定,但不等同于指令冲突。判断规则很简单:同一层内自相矛盾,或层与层之间目标相反,就是冲突;只是“信号弱”而不是“信号相反”的,归为可达性问题,不要混为一谈。
发现冲突后,通常有两种处理路径,选择依据是“谁更接近你的真实意图”。
方案一:改抓取层,保留索引意图。适用于页面确实要被收录,只是robots.txt误屏蔽。做法是放开对应路径,再让页面meta robots与canonical保持一致。验收标准是:抓取层允许、页面无noindex、规范链接指向自身或正确的目标地址。
方案二:改索引层,接受不收录。适用于页面本就不该出现在结果里,例如内部筛选参数页。做法是保留robots.txt限制,或改用noindex。这里要注意:robots.txt的抓取限制不等于可靠的索引移除,被禁止抓取的URL仍可能因外部链接而被收录;要真正阻止索引,应让页面可被抓取并返回noindex。两种手段的适用条件不同,不能互相替代。
改完后不要只确认“文件已经改了”,要回到交付结果验收:
robots.txt对该路径的规则与页面meta robots不矛盾。canonical指向的地址就是你想让它出现的地址。站点地图可以作为发现渠道,但它不保证收录;提交了站点地图而页面仍带noindex,就是典型的“资料齐全但结果相反”。
挑一个你希望被收录但查询不到的具体URL,按上面的四类资料各查一遍,先判断它属于“指令冲突”还是“可达性弱”,再决定改抓取层还是改索引层。