很多站点在做抓取管理时,会把 robots.txt 和 meta robots 当成同一件事:想让某个页面消失,就在 robots.txt 里 Disallow 掉;想让某个栏目不被收录,也在 robots.txt 里写一行。结果往往是该消失的还在,该被发现的却抓不到。这两个工具管的是两件事:一个管能不能抓,一个管抓到了要不要收。写反了,效果就会反过来。
两个工具的分工
robots.txt 是放在根目录的协议文件,爬虫在抓取前会先读它,用来决定哪些路径不要来抓。它的作用是减少无效抓取、保护服务器资源,以及把抓取引向更有价值的页面。
meta robots,或者通过 HTTP 响应头下发的 X-Robots-Tag,是页面级的指令,告诉爬虫这个页面抓到了,但请不要索引、不要跟随链接或不要展示摘要。前提是爬虫得先抓到页面,才能看到这条指令。
关键点:Disallow 等于把门关上,noindex 等于进门后挂个牌子。门一直关着,牌子就没人看得到。
最常见的三个写反场景
- 整目录 Disallow,同时指望 noindex 生效。爬虫抓不到页面,自然看不到 noindex;如果外部有链接指向它,仍可能以只有链接、没有摘要的形式出现。
- 用 robots.txt 屏蔽 CSS、JS 和图片目录。页面能抓到,但渲染不完整,反而影响对页面内容与移动端适配的判断。
- 把 staging 或测试目录只做 Disallow,却不加访问控制。robots.txt 是公开文件,写明路径等于告诉别人这里有什么。
想彻底移除一个 URL 的顺序
- 先确认页面可以被抓取,至少允许爬虫访问,并返回正常状态码。
- 在页面加上 noindex,或者通过响应头下发同样的指令,等待其从索引中退出。
- 确认退出后,再按需在 robots.txt 中 Disallow,减少后续抓取。
- 如果内容已经迁移,用 301 指向新地址,通常比 noindex 更合适。
robots.txt 的几个语法细节
- User-agent 分组要写对,通配符规则与具体 UA 规则之间的优先级要理清。
- Disallow 与 Allow 按前缀匹配生效,可以用 Allow 在禁止目录中开一个口子。
- 结尾的 * 与 $ 能限定路径,但不同爬虫支持程度有差异,别把关键逻辑押在复杂通配上。
- Sitemap 指令可以写在文件里,帮助爬虫发现入口。
- 文件不要返回 5xx,也不要重定向到其他域名,否则指令可能被忽略。
服务端维护页与临时下线
站点维护时,返回 200 的维护中页面会被当成正常内容处理。更稳妥的做法是返回 503 状态码,并带上 Retry-After,告诉爬虫多久之后再来。如果是长期下线,要评估是否临时关闭抓取,以及恢复后如何让页面重新被发现。
怎么验证写对了
- 用服务器日志或抓取工具查看目标 URL 是否还有抓取记录。
- 检查页面返回的状态码,以及响应头中的 X-Robots-Tag 是否符合预期。
- 借助搜索引擎提供的 URL 检查类工具查看当前状态,仅作参考。
- 改动后观察一到两周的日志趋势,而不是当天就下结论。
落到站点运营上的建议
把抓取管理当成一件长期维护的事:栏目规划阶段就明确哪些页面值得被收录,哪些只服务站内跳转;内容更新时顺手检查新页面的索引状态;服务器变更或站点改版时,同步检查 robots.txt 与响应头设置。规则越简单、越集中,出问题时越好排查。
最后提醒一句:robots.txt 与 noindex 都不是收录开关,它们只表达站点的意愿,最终是否抓取与索引由搜索引擎决定。把这两件事分清楚,可以少走很多弯路。