检查移动端与桌面端的抓取规则差异,核心是分别用两类设备的 User-Agent 请求同一批 URL,对比服务器返回的状态码、正文和 robots.txt 的生效结果。搜索引擎普遍以移动端爬虫为主,但 robots.txt 的规则本身不区分设备,差异往往出在服务端根据 UA 做了跳转或屏蔽。下面用一个假设例子说明完整步骤。
假设你的站点有一篇文章 /post/100。桌面浏览器打开正常,手机打开却跳到 /m/post/100,而 /m/ 目录在 robots.txt 里被 Disallow。此时桌面爬虫能读到正文,移动爬虫可能只看到一个被禁止抓取的跳转目标。这个假设说明:抓取差异不一定写在 robots.txt 里,也可能藏在跳转逻辑中。
用命令行工具模拟两种 UA,只看服务器返回的原始内容,不要依赖浏览器渲染后的画面。
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" -I https://example.com/post/100curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" -I https://example.com/post/100-I 换成 -L 并去掉 -I,可以跟随跳转并查看最终正文。对比三项:状态码是否都是 200、跳转链是否不同、正文长度和主要文字是否一致。如果移动端返回 301 到另一个路径,就继续请求那个路径,确认它是否可抓取。
robots.txt 按路径和 User-Agent 分组,不按屏幕尺寸分组。你要确认移动爬虫使用的 UA 名称是否落在某条 Disallow 规则里。常见错误是只写了桌面爬虫的允许规则,却遗漏了移动爬虫对应的 UA 分组,导致移动端被默认限制。
检查项:
https://example.com/robots.txt,找到 User-agent 行。Disallow: / 或指向移动目录的规则。/m/,检查该目录是否被禁止。需要区分:robots.txt 的抓取限制不等于索引移除。即使禁止抓取,页面仍可能因外部链接出现在结果中;要移除索引需要额外的机制,且不同搜索引擎支持情况须分别核查。
两端都返回 200 不代表内容一致。移动端常见问题是正文被折叠、图片用懒加载、关键文字放在需要交互才显示的区域。抓取工具看到的是 HTML 源码,不是点击后的画面。
对比方法:把两端返回的 HTML 保存成文件,搜索正文首段的关键词,确认它出现在源码里而不是脚本变量中。再检查 link rel="canonical" 是否两端都指向同一个规范 URL。如果移动端 canonical 指向自己而桌面端指向另一地址,规范信号会互相冲突。
这套检查适用于服务端根据 UA 输出不同 HTML、或存在独立移动域名的站点。如果你的站点是响应式设计、两端返回完全相同的 HTML,那么差异通常只出现在渲染阶段,应改用渲染对比而不是源码对比。
判断结果时注意:HTTPS 不保证安全无漏洞或排名;站点地图不保证收录。抓取规则只解决“能不能抓”,不解决“抓了之后是否被索引和排序”。
下一步:选取站点中流量最高的一批 URL,按上面的 UA 请求逐条记录状态码与正文长度,把不一致的 URL 列成清单,再回到 robots.txt 和跳转配置里逐项修正。