robots.txt写法 - 正常与异常结果怎样区分

📍 WDQWDWQD987AAAAA:216.73.216.220
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /f2a9fbee7609.html
📄

robots.txt写法 - 正常与异常结果怎样区分

判断robots.txt写法是否正常,关键不是看文件是否存在,而是看抓取工具读取后的实际行为是否符合预期:正常写法会让该放行的目录可抓取、该拦截的路径返回禁止抓取;异常写法则常表现为整站被误封、规则被忽略、路径匹配混乱或语法错误导致部分规则失效。下面按准备、实施、验证、维护四个阶段说明如何区分。

准备阶段:先明确要拦截还是放行

写robots.txt之前,先列出三类路径:必须禁止抓取的(如后台、搜索结果页、重复筛选参数页)、必须允许抓取的(如文章页、栏目页、静态资源)、以及无所谓的中性路径。正常写法一定是从“放行是默认状态”出发,只对需要限制的路径添加规则;异常写法的典型特征是习惯性写一条Disallow: /再逐条放行,一旦放行规则写错,整站就会从可抓取变成不可抓取。

准备阶段还要确认一件事:robots.txt只能控制抓取行为,不能可靠地阻止页面被索引。如果某页面已被收录,仅靠Disallow通常无法把它从索引中移除,需要配合其他移除手段。把“禁止抓取”当成“删除索引”来写,本身就是一种写法上的异常预期。

实施阶段:语法正确不等于结果正确

robots.txt的基本结构是若干条User-agent记录,每条记录后跟若干条Allow或Disallow规则。判断写法是否正常,可以对照以下几点:

正常写法通常短而明确,只列必要路径;异常写法往往规则冗长、互相覆盖,甚至出现拼写错误、缺少冒号、把注释写在规则中间等情况。语法错误不一定会让整个文件失效,但可能让某一段规则被跳过,结果就是“看起来写了拦截,实际没有生效”。

验证阶段:用实际抓取结果对照预期

验证是本题最关键的一步。写完robots.txt后,不要只看文件内容,而要用抓取工具或搜索引擎官方提供的robots.txt测试工具,输入具体网址,查看返回的是“允许抓取”还是“已屏蔽”。正常结果的判断标准是:测试结果与准备阶段列出的预期清单逐条一致;异常结果则表现为某条本应放行的路径被屏蔽、本应屏蔽的路径被允许、或者测试工具直接提示语法错误。

可以按下面的短例子自查。假设文件内容为:

User-agent: *

Disallow: /admin/

Allow: /

此时测试/admin/login应返回禁止抓取,测试/article/1应返回允许抓取。如果测试/article/1也返回禁止抓取,说明规则匹配或写法有问题;如果测试/admin/login返回允许,说明拦截未生效。这个例子仅用于说明判断方法,实际路径以站点自身结构为准。

验证时还要注意:robots.txt的更新不会立即被所有抓取工具同步,缓存时间因工具而异,因此刚修改完就测试可能仍看到旧结果。判断时应以测试工具实时读取的内容为准,而不是以历史抓取记录为准。

维护阶段:区分“限制抓取”与“移除索引”

维护阶段最常见的异常,是把robots.txt当成万能开关。正常做法是:robots.txt只承担抓取管理职责,索引状态通过页面本身的元标签、HTTP状态码或搜索平台的移除工具处理。如果发现某页面已被收录,仅添加Disallow往往不会让它从索引消失,反而可能因为无法抓取而看不到页面上的移除指令,形成更麻烦的状态。

另一个维护检查项是站点地图。robots.txt中可以声明站点地图位置,但声明站点地图不代表页面一定被收录,也不代表抓取频率会提高,它只是提供一个发现入口。把站点地图写进robots.txt后,仍需单独核查站点地图本身是否可访问、返回状态是否正常。

综合来看,正常与异常的分界可以归纳为:正常写法规则少、意图清晰、验证结果与预期一致、职责边界明确;异常写法规则互相冲突、依赖通配符猜测行为、把抓取限制等同于索引移除、修改后不做实际测试。下一步可以直接打开站点的robots.txt,用抓取测试工具逐条核对准备阶段列出的路径,把不一致的规则改到与预期一致为止。

图1 图2

nginx