robots.txt写法:同一地址因设备或登录状态返回不同内容怎样对照

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

robots.txt写法:同一地址因设备或登录状态返回不同内容怎样对照

先给结论:不能只用一台设备、一种登录状态抓一次就决定 robots.txt 怎么写。正确做法是把同一地址在“未登录+桌面”“未登录+移动”“已登录+桌面/移动”等条件下分别取样,先判断差异来自服务端返回的内容本身,还是来自前端渲染、个性化模块或登录态跳转;前者才可能需要用 Disallow 规则处理,后者通常应优先用 canonical、noindex 或参数处理,而不是直接写进 robots.txt。

先分清两种差异:返回内容不同,还是呈现方式不同

对照的第一步不是改文件,而是固定请求条件。用相同 URL、相同 User-Agent 族、相同 Accept-Language,只切换设备标识和 Cookie/登录态,记录每次的 HTTP 状态码、响应头和正文首屏。若未登录桌面返回 200 且正文是商品介绍,未登录移动返回 200 但正文一致、只是模板不同,这属于呈现差异,robots.txt 不需要区分。若已登录状态下同一 URL 返回 302 跳转到账户页,或返回 200 但正文变成“我的订单”,这才是内容差异,需要判断是否值得屏蔽。

条件一:差异只出现在登录态,选择不写 Disallow

登录态返回不同内容,通常是因为服务端根据 Cookie 做了个性化。搜索引擎爬虫一般不带你的登录 Cookie,所以它看到的是未登录版本。此时若在 robots.txt 里对同一路径写 Disallow,会连未登录的公开版本一起挡掉,属于误伤。更合适的动作是:保持 robots.txt 不变,确认未登录版本可被抓取;对登录后跳转的账户页,用 noindex 或独立路径处理。实施后复查未登录抓取是否仍返回 200 且正文完整,若正常,下一步就不需要动 robots.txt。

条件二:差异来自设备且公开内容确实不同,才考虑分 User-Agent

只有当未登录状态下,桌面和移动返回的是实质不同的公开内容——例如移动版只有摘要、桌面版才有完整规格——才涉及按 User-Agent 分组。robots.txt 支持用 User-agent 分组,但不同搜索引擎对移动爬虫的命名和识别方式不同,必须分别核查目标搜索引擎的官方文档,不能假设一个 User-agent: Googlebot-Mobile 就通用。假设某站移动版正文被截断,而桌面版完整,一种选择是让移动爬虫也抓桌面版路径,另一种是修模板让移动版输出完整正文。前者改动小但依赖爬虫识别,后者更稳但需要开发排期。选择依据是:若差异只是模板,优先修模板;若短期无法修,才评估是否用分组规则把移动爬虫引到完整版本。

对照取样要留下可复查记录

为了让判断可复查,至少记录以下字段:

这些记录能区分“内容真的不同”和“只是渲染不同”。注意,robots.txt 的抓取限制不等于可靠的索引移除:即使写了 Disallow,已收录 URL 仍可能因外部链接出现在结果中。站点地图也不保证收录。因此不要用“已加 Disallow”当作内容差异已解决的证据。

常见例外与不能照搬的边界

个别样本成立不代表可以规模化照搬。若只有少数 URL 在登录态返回不同内容,逐条处理即可;一旦发现成千上万 URL 都因登录态变化,说明是全局模板或鉴权逻辑问题,应回到服务端修复,而不是给 robots.txt 堆规则。另一个例外是 CDN 或反向代理可能按设备返回缓存版本,此时你抓到的差异未必来自源站,需要对比回源响应。最后,HTTPS 不保证安全无漏洞或排名,它和本题的内容差异判断无关,不要混入对照条件。做完上述取样后,下一步动作应是:先确认未登录公开版本是否完整,再决定是修模板、加 noindex,还是仅在确有公开内容差异时才写 User-Agent 分组规则。

图1 图2

nginx