robots txt协议移动端与桌面端怎样检查差异:先比对抓取规则是否一致

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

robots txt协议移动端与桌面端怎样检查差异:先比对抓取规则是否一致

检查 robots.txt 在移动端与桌面端的差异,核心不是看页面显示是否相同,而是确认两端请求到的是不是同一份规则文件,以及规则对同一路径的匹配结果是否一致。最优先的一步是分别用移动端 User-Agent 和桌面端 User-Agent 请求同一个 robots.txt 地址,对比返回状态码、正文内容和重定向链。如果两端拿到的是同一份 200 响应且正文逐字相同,差异通常不在文件本身,而在规则对两类爬虫的匹配方式上。

准备:确认两端请求的是同一资源

在动手比对前,先固定几个变量,避免把环境差异误判为协议差异。

如果站点对移动端使用独立子域,例如 m.example.com,那么移动端和桌面端本来就可能各自拥有 robots.txt。这种情况下要分别检查两个地址,不能拿桌面端的文件去推断移动端。

实施:用两类 User-Agent 各请求一次并逐项对比

用命令行工具可以最快得到可复核的结果。以下命令只是示例,把域名和 UA 换成你自己的:

curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1" -I https://example.com/robots.txt

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36" -I https://example.com/robots.txt

把 -I 换成不带该参数,就能看到正文。对比时逐项记录:

  1. 状态码是否都是 200。若一端是 404,另一端是 200,说明两端解析到了不同资源。
  2. 是否发生重定向,重定向目标是否相同。跨协议或跨主机名的跳转可能让某一端拿到不同文件。
  3. 正文是否逐字一致,包括 User-agent、Disallow、Allow、Sitemap 各行及其顺序。
  4. 对同一个测试路径,分别按两端 UA 套用规则,判断是允许还是禁止。

这里最关键的一步是第 4 项:文件相同不代表结果相同。robots.txt 里可以针对不同 User-agent 写不同规则,例如一段只写 User-agent: *,另一段写 User-agent: Googlebot 并给出额外限制。移动端爬虫和桌面端爬虫如果匹配到不同分组,同一路径就会得到不同结论。判断方法是找到与当前 UA 最匹配的那个分组,只应用该分组的规则,再与另一端对比。

验证:区分文件差异与规则匹配差异

比对结果通常落在三种情况里,处理方式不同。

需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除。即使某一端规则写的是禁止抓取,已收录的 URL 仍可能出现在结果中,因为限制的是抓取行为,不是索引状态。要真正移除,应使用对应的移除工具或页面级 noindex,并分别核查各搜索引擎的支持情况。站点地图写在 robots.txt 里也不保证收录,它只是发现路径的线索之一。

维护:把两端一致性纳入常规检查

robots.txt 会随站点结构调整而改动,移动端与桌面端的一致性也可能在改动中被破坏。建议在每次修改规则、切换 CDN 配置或新增子域后,重跑一次上面的两类 UA 请求,并保留输出做对比。若站点同时存在多个协议或多个主机名,把每个可访问入口都纳入清单,而不是只查一个。

人手有限时,把检查顺序定为:先确认两端请求到同一地址且状态码一致,再对比正文,最后验证测试路径的匹配结论。前两步能排除大部分环境问题,第三步才真正回答移动端与桌面端在规则应用上是否存在差异。

下一步可以挑一个当前最关心的路径,例如商品列表页或搜索结果页,分别用移动端和桌面端 UA 套用规则,记录两端结论,再决定是否需要调整分组写法。

图1 图2

nginx