很多入口页的问题不是内容不够,而是蜘蛛根本没被允许进来。robots.txt 和 meta robots 一个在站点层,一个在页面层,作用范围不同,误配后的表现也不一样。
robots.txt:站点层的通行规则
robots.txt 放在域名根目录,只对当前域名生效。它本身不是强制标准,主流搜索引擎会遵守,但不同爬虫对通配符、正则和 Crawl-delay 的支持并不一致。
- User-agent: * 与 Disallow: / 组合会把整站挡掉,这是入口页最严重的误配之一。
- Disallow 只写目录不写斜杠,可能匹配到更多路径;写 /tmp 会连带挡住 /tmp-abc 这类地址。
- Allow 与 Disallow 的优先级在不同爬虫里表现不同,重要目录建议单独放行并复验。
- Crawl-delay 对配额紧张的小站不一定有用,部分爬虫会直接忽略。
- Sitemap 声明可以放在 robots.txt 里,但不要和 Disallow 规则冲突。
动态生成时的坑
有些程序按环境生成 robots.txt,测试环境返回 Disallow: /,上线后没有切换。还有的服务器把不存在的 robots.txt 返回 200 加一段空内容,爬虫可能把它当成有效规则,也可能因为解析失败而停止深入。
meta robots:页面层的开关
meta robots 写在 head 里,只对当前页面生效。常见取值包括 noindex、nofollow、noarchive、nosnippet。
- noindex 是入口页最需要警惕的一项:页面能被抓,但不会进入索引,批量套模板时很容易带进来。
- nofollow 会阻止蜘蛛跟随页面链接,入口页靠链接把蜘蛛导向目标页,误配后链路等于断掉。
- noarchive 只影响快照,不影响抓取和索引,通常不必动。
- 多个 meta robots 同时出现时,爬虫的合并策略不一致,最好只保留一条。
X-Robots-Tag 与响应头
有些站点通过 HTTP 响应头里的 X-Robots-Tag 控制索引,这个指令对 PDF、图片等非 HTML 资源同样有效。如果服务器配置里统一加了 noindex,页面里的 meta 标签写得再对也没用。
常见误配组合
- robots.txt 放行,但 meta robots 写了 noindex:蜘蛛来抓,不建索引。
- robots.txt 屏蔽目录,页面里却期待被抓:蜘蛛可能连请求都不发。
- 屏蔽 CSS 与 JS:部分爬虫需要渲染才能理解页面,屏蔽后拿到的内容不完整。
- 测试环境规则带到正式环境:整站被挡,或者只放行了少数路径。
- 多域名共用一份 robots.txt:A 域名的规则被套到 B 域名上。
上线前后怎么检查
用爬虫视角而不是浏览器视角看问题。
- 直接访问 /robots.txt,确认返回 200、内容与预期一致,没有被缓存成旧版本。
- 用搜索资源平台提供的 robots 测试工具验证具体 URL 是否被允许。
- 查看页面源代码里的 meta robots,而不是只看渲染后的 DOM。
- 抓一次响应头,确认没有意外的 X-Robots-Tag。
- 上线后观察日志中目标 URL 的抓取记录,如果入口页有访问、目标页没有,优先检查 nofollow 和链接是否可抓。
robots.txt 和 meta robots 只影响抓取与索引的意愿,不决定页面质量。放行之后能不能被收录,仍然要看内容与站点整体表现。
批量站点最容易在模板和服务器配置里埋下这两类指令。建议把 robots.txt 与 meta robots 纳入上线检查项,改动一次就复验一次,避免一个小配置把整条蜘蛛链路挡在门外。