很多站点的抓取与索引问题,最后都能追到一条指令上。robots.txt 决定蜘蛛能不能来抓,meta robots 和 HTTP 响应头里的 X-Robots-Tag 决定抓到的内容能不能进索引、能不能出摘要。这两层经常被混为一谈,配置时也会互相打架。
三层控制各管什么
- robots.txt:控制抓取。被 Disallow 的地址,蜘蛛通常不会去请求。
- meta robots:写在 HTML 的 head 里,控制索引与展示,前提是页面已经被抓取到。
- X-Robots-Tag:写在 HTTP 响应头里,作用与 meta robots 类似,但不依赖页面是不是 HTML,因此对 PDF、图片、视频、JS 文件同样有效。
关键点在于:如果一个地址既被 robots.txt 禁止抓取,又希望用 noindex 让它退出索引,这两个目标会互相抵消——抓不到页面,noindex 也就读不到。比较稳妥的做法是先放开抓取,让蜘蛛读到 noindex,等页面退出索引后再考虑是否收紧抓取。
常见的误配场景
1. 模板层面的默认指令
不少 CMS 的主题或插件会在模板里写死一句 noindex,本意是给站内搜索页、标签页用,结果上线时被继承到全部页面。自查时直接看源码,比在后台一层层找设置更快。
2. 测试环境与生产环境串了
预发布环境的防收录配置,跟着代码分支一起合并到线上,是很典型的一类事故。上线清单里加上一条“检查响应头”,能省掉不少回头工。
3. CDN、WAF 或反向代理注入的头
有些安全策略会统一给某些路径加 X-Robots-Tag: noindex,尤其在防护规则更新之后。这类问题从页面源码里看不出来,只能看响应头。
4. 分页与筛选页一刀切
把列表页、分页页全部 noindex 之后,蜘蛛仍然需要顺着链接爬到详情页,只是不把列表页放进索引。如果连抓取也一并收紧,详情页的发现速度可能变慢。
5. 指令拼写与作用范围
none 通常等价于 noindex, nofollow;指令用逗号分隔才是规范写法。X-Robots-Tag 可以写成 X-Robots-Tag: noindex,也可以带 UA 前缀,只针对特定蜘蛛生效。
能影响索引的入口大致有三处:HTML 里的 meta、HTTP 头里的 X-Robots-Tag,以及搜索引擎后台可能存在的移除工具。排查时按这个顺序走一遍。
一套可执行的定期检查
- 抽查 5 到 10 个典型页面:首页、栏目页、详情页、标签页、站内搜索页,逐个看 head 中的 meta robots。
- 用 curl 或浏览器开发者工具看响应头,确认没有意料之外的 X-Robots-Tag,重点覆盖 HTML、PDF、图片几类资源。
- 在模板文件里全局搜索 noindex、nofollow、X-Robots-Tag 等关键词,看清每一处的作用条件。
- 检查 robots.txt 与页面指令是否冲突:被禁止抓取的目录里,是否存在需要 noindex 的页面。
- 改版、换 CDN、调整安全策略之后,把这套检查再跑一遍。
发现问题后怎么处理
如果确认有页面被误加 noindex,先修正配置,再观察抓取日志里这些地址的响应码与响应头,确认新状态已经被抓到。索引状态的变化需要时间,期间不要反复改动指令,避免蜘蛛每次来都看到不同版本。
如果只是局部页面需要控制,优先用更精确的条件(栏目、模板、路径规则),而不是在全局配置里加一条覆盖所有页面的指令。范围越小的改动,回滚成本越低。
把它当成一个定期动作,而不是出问题才想起来的事。多数索引异常,都能在上线那一刻被拦住。