robots txt怎么写:怎样检查前后环节的依赖

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

robots txt怎么写:怎样检查前后环节的依赖

写robots.txt时最常见的误解,是把它当成一个孤立的文本文件,只检查语法对不对。实际上,robots.txt的生效依赖三个前后环节:它必须能被目标爬虫正常抓取、里面的路径规则必须与网站实际URL结构匹配、它声明的站点地图必须真实存在且可访问。检查依赖的顺序应当是先确认抓取链路,再核对规则与实际路径,最后验证站点地图,而不是反过来先改规则。

先确认robots.txt本身能否被抓到

robots.txt放在域名根目录下,爬虫访问的是固定路径。如果这个路径返回404、403或跳转到其他地址,规则就不会被读取。常见原因包括服务器把根目录请求重写到应用路由、CDN缓存了旧版本、或文件被放在子目录而非根目录。

可以执行的检查:用命令行请求该地址,观察状态码与响应内容。

curl -I https://example.com/robots.txt

如果返回200且内容与预期一致,说明抓取环节正常;如果返回301或302,需要判断跳转后的地址是否仍是根路径下的robots.txt,跨路径跳转可能导致爬虫不采用该文件。这一步的判断结果是:抓取链路通,才值得继续检查规则内容。

规则路径必须与站点实际URL结构对齐

Disallow和Allow后面的路径是区分大小写的前缀匹配,不是通配全文匹配。很多人写Disallow: /search,以为能拦住所有带search的地址,但实际只匹配以/search开头的路径。如果站点的搜索页是/find?q=,这条规则完全不起作用。

检查方法是把规则路径与站点地图或日志中出现的真实URL逐一对照。可以列出需要限制的URL样本,再逐条判断是否落在规则覆盖范围内。判断结果分三种:完全覆盖、部分覆盖、完全未覆盖。只有完全覆盖才达到预期效果,部分覆盖需要补充规则或调整路径写法。

站点地图声明是独立依赖,不能默认成立

在robots.txt里写Sitemap指向一个地址,并不代表该地址可访问或内容有效。这个环节的依赖是:robots.txt可抓取 → Sitemap行被解析 → 站点地图URL返回200且格式正确。任何一环断裂,声明都不会产生实际作用。

需要明确:站点地图是发现辅助手段,不保证收录。即使站点地图完全正确,页面是否被索引仍取决于其他因素。这一步的判断结果是:站点地图可用,只说明声明环节成立,不代表索引结果。

抓取限制不等于索引移除

这是依赖检查中最容易被忽略的一层。Disallow阻止的是爬虫抓取,不是阻止页面出现在搜索结果中。如果某个URL已经被索引,之后才用robots.txt屏蔽,搜索引擎可能仍保留该条结果,只是无法抓取新内容。要移除索引,需要配合noindex或移除请求,而noindex又要求页面能被抓取,两者存在先后依赖。

适用条件是:如果目标是阻止抓取,用robots.txt;如果目标是移除索引,robots.txt不是正确工具,应优先让页面返回noindex,待索引移除后再考虑是否屏蔽抓取。把这两个目标混在一起,是规则写对了但结果不符合预期的常见原因。

按依赖顺序排查的具体步骤

  1. 请求根目录robots.txt,确认状态码为200且无异常跳转。
  2. 读取响应内容,确认规则行没有被服务器或CDN篡改。
  3. 抽取每条Disallow和Allow路径,与真实URL样本比对覆盖情况。
  4. 请求Sitemap行中的地址,确认可访问且格式有效。
  5. 确认限制目标:是阻止抓取还是移除索引,两者处理方式不同。

完成以上检查后,如果发现规则与实际路径不匹配,下一步是修正路径写法并重新验证覆盖范围;如果发现站点地图不可访问,先修复该地址再回看robots.txt声明是否生效。

图1 图2

nginx