robots.txt 和页面里的 meta 指令,平时很少被人翻看,但它们的权限相当大:一个字符写错,可能让整站从抓取队列里消失,也可能让本来该下线的页面长期留在索引里。抓取量突然下滑时,先别急着怀疑服务器,先把这两处配置核对一遍往往更有效率。
两套指令,管的事情并不一样
很多人把它们当成同一类开关,实际上作用阶段完全不同,混在一起想就容易出错。
robots.txt 管的是抓取行为
它放在域名根目录,蜘蛛在发起请求之前先读取,据此决定哪些路径不去访问。注意它不控制索引,也不会把已经收录的页面从搜索结果里删除,只是让蜘蛛少走一趟。
meta 指令管的是抓取之后
页面头部的 meta robots,以及 HTTP 响应头里的 X-Robots-Tag,处理的是内容拿到之后的事情:是否允许索引、是否跟随链接、是否展示摘要。它只有在蜘蛛真正读到页面时才生效。
几个容易踩到的细节
路径匹配是前缀,不是精确匹配
Disallow: /news 会同时挡住 /news、/news/2024 以及 /newsletter,最后这个通常是被无意牵连的。要拦一个目录,建议写成带结尾斜杠的形式。当同一条路径同时命中 Allow 和 Disallow 时,主流蜘蛛一般按最长匹配优先,长度相同时 Allow 优先,但不同引擎的细节存在差异,不要把规则设计成依赖这种边界判断。
被屏蔽的页面读不到 noindex
一个反复出现的误区:页面里写了 noindex,但同一路径又被 robots.txt 挡住。蜘蛛进不来,自然看不到 noindex,页面可能仍以只有标题和链接的形式留在结果里。正确顺序是先放开抓取,等 noindex 生效、页面退出索引之后,再考虑收紧规则。
- 通配符写得太宽,例如用问号通配挡住了一大批正常的分页或静态参数地址,动手前最好先看日志确认哪些地址真的没有价值。
- 路径区分大小写,/About 和 /about 可能是两个地址,规则要分别覆盖。
- 单独一个斜杠和空值的含义完全相反:允许全部与屏蔽全站只差一个字符。
- 后台、测试、临时目录没有清理,长期可访问又不打算收录,最终会被抓进索引。
- 多层配置叠加:CDN、反向代理、源站各加了一层响应头,其中某一层写了 noindex 而没人记得。
- 用 meta 标签处理非 HTML 文件:PDF、图片、脚本资源读不到页面头部,只能靠响应头控制。
一份可以逐条核对的清单
- 直接在浏览器访问 /robots.txt,确认返回正常状态码、内容是纯文本,没有被错误地套上 HTML 页面。
- 检查 User-agent 分组是否覆盖了主要搜索引擎蜘蛛,避免只写了一组而漏掉其他。
- 逐条回看屏蔽路径,按前缀方式手工拼一遍,确认不会误伤同级目录或相似命名的栏目。
- 确认站点地图地址写在文件内,并且指向可访问的正式域名。
- 抽查高价值栏目页,用抓取测试工具查看实际生效的抓取与索引状态。
- 查看响应头,确认没有意外的 noindex 或 nofollow 混进来。
- 对近期下线的栏目,确认执行顺序是先放开抓取、再上 noindex,而不是反过来。
- 把 robots.txt 纳入版本管理,每次改动留记录,出问题时能快速比对和回滚。
改完之后怎么验证
别只看配置文件本身。改动后在日志里观察一段时间,关注目标路径的抓取量是否回到预期,被屏蔽的路径是否真的不再出现。搜索引擎提供的抓取测试工具能显示某条地址实际生效的规则与索引状态,比人肉推演可靠得多。另外要留意缓存:CDN 和反向代理可能存着旧的 robots.txt,改完后主动刷新一次,并从不同线路确认取到的内容一致。
robots.txt 是过滤器,不是安全措施。敏感路径要靠权限和鉴权拦住,而不是指望一行屏蔽规则。
写在最后
这类配置平时不起眼,出问题时却往往是整站级别的。建议把 robots.txt、meta 指令模板、响应头设置放进同一份变更清单,改版或新开栏目时顺手核对一遍,比事后翻日志省力得多。