robots.txt是独立于html的纯文本文件,必须置于网站根目录(/robots.txt),以200状态码返回text/plain响应头,用于控制爬虫能否访问网站;而meta name="robots"仅作用于单页,控制爬虫对已抓取页面的处理行为。

meta name="robots" 标签不能设置“访问权限”,它只控制爬虫抓取后的处理行为;真正限制访问必须靠 robots.txt 或服务器响应头。
robots.txt 是门禁,不是告示
robots.txt 文件必须放在网站根目录下,路径是 /robots.txt,文件名全小写,HTTP 状态码必须为 200。常见失效原因包括:
- 上传到子目录(如
/assets/robots.txt) - 文件名大小写错误(
Robots.txt或robots.TXT) - 服务器返回 404、403 或重定向到 HTML 页面
验证方式:直接在浏览器访问 https://yourdomain.com/robots.txt,看到纯文本且状态码是 200 才算生效。它不写在 HTML 里,也不能通过 插入。
meta name="robots" 必须静态写在 里
这个标签只有出现在初始 HTML 响应的 中才有效,动态注入(比如 Vue 的 mounted、React 的 useEffect、document.write)基本无效——爬虫不执行 JS,也不等页面渲染完再解析。
- 检查方法:右键网页 →「查看网页源代码」→ 搜索
<meta name="robots">,确认存在且在 <code>内部 - 拼写必须严格:小写
noindex、英文逗号分隔、无空格 ——content="noindex,nofollow"合法,content="noindex, nofollow"(带空格)可能被部分旧爬虫忽略 - SPA(单页应用)中,前端路由页往往返回空壳 HTML,此时该标签无法生效,得改用服务端控制
X-Robots-Tag 响应头优先级更高
HTTP 响应头 X-Robots-Tag 比 meta name="robots" 更可靠,尤其适用于非 HTML 资源(PDF、JSON、图片)或需要按路径精细控制的场景。
- 当两者冲突时,爬虫以响应头为准
- 例如 Nginx 配置:
add_header X-Robots-Tag "noindex, nofollow"; - 注意缓存陷阱:CDN 或反向代理若缓存了带
X-Robots-Tag: noindex的响应,撤掉指令后页面仍可能长期无法被索引 - 对纯客户端渲染(CSR)页面,这是唯一靠谱的控制方式
noindex 和 nofollow 不是绑定关系
它们作用独立,组合要按实际意图选:
-
noindex,nofollow:页面不收录,页内链接也不跟踪(适合登录页、测试页) -
noindex,follow:页面不收录,但允许爬虫顺着页内链接发现其他页面(适合分页、筛选页) -
index,nofollow:页面照常收录,但页内外链不传递权重(慎用,易被视作操纵) - 单独
noindex:只屏蔽当前页收录,不干预链接发现 —— 如果该页本身是入口(如搜索结果页),可能意外暴露大量子页面
真正容易被忽略的是分工逻辑:robots.txt 控制“能不能进门”,meta 和 X-Robots-Tag 控制“进门后怎么处理”。如果门没关严,告示贴得再清楚也没人读。











