robots.txt 文件必须放在网站根目录下才有效,例如 https://example.com/robots.txt;若置于子目录(如 /blog/robots.txt)或非根路径则不被识别,且文件名须全小写、响应头为 text/plain、编码为 UTF-8 无 BOM。

robots.txt 文件放在哪里才有效
只有放在网站根目录下,robots.txt 才会被主流搜索引擎识别。比如你的站点是 https://example.com/blog/,那文件必须能通过 https://example.com/robots.txt 直接访问到,放在 /blog/robots.txt 或子目录里完全无效。
常见错误是把 robots.txt 丢进项目本地目录、打包后放进 public 子文件夹却没配置 Web 服务器映射到根路径;或者用前端路由(如 Vue Router history 模式)时,忘了在 Nginx/Apache 中显式配置对 /robots.txt 的静态文件响应。
- 确认访问
https://yourdomain.com/robots.txt返回 HTTP 200 状态码,且内容可读 - 避免返回 404、302 跳转、或被 CDN 缓存了旧版本
- 不要用 HTML 页面伪装成
robots.txt(哪怕 Content-Type 正确,解析器也会拒绝)
Disallow 和 Allow 的匹配规则很有限
robots.txt 不支持正则、通配符仅限 $(结尾锚定)和 *(任意字符,非贪婪),而且只在 Allow/Disallow 值中生效,不能用于 User-agent 行。
例如:Disallow: /admin/* 会屏蔽 /admin/、/admin/login,但 /admin-api/ 不受影响;Disallow: /temp$ 只屏蔽恰好以 /temp 结尾的路径,不包括 /temp/ 或 /temp/page.html。
立即学习“前端免费学习笔记(深入)”;
-
*在路径中代表“任意字符串”,不是 glob 或正则里的.* -
$必须写在行尾,且只匹配 URL 结尾(如Disallow: /*.js$屏蔽所有以 .js 结尾的资源) - 多条规则按顺序匹配,第一条匹配成功的规则生效(不是“最精确”的优先)
robots meta 标签和 HTTP 头哪个更优先
当页面同时存在 robots meta 标签和响应头 X-Robots-Tag 时,搜索引擎以 HTTP 响应头为准——它能控制缓存、图片、PDF 等非 HTML 资源,而 meta 标签只对当前 HTML 文档生效。
比如你在 CMS 中给某篇文章加了 <meta name="robots" content="noindex">,但服务器又返回了 X-Robots-Tag: index,结果就是仍会被收录。
- 静态 HTML 页面用 meta 标签足够;动态渲染页(SSR/CSR)建议统一走响应头,避免模板漏写
-
X-Robots-Tag支持多个值用逗号分隔:X-Robots-Tag: noindex, nofollow, unavailable_after: 2025-01-01 - 注意:meta 标签写在
<head>里,且不能出现在 JS 动态插入的 DOM 中(爬虫不执行 JS)
noindex 指令对已收录页面不会立刻生效
加了 noindex 后,Google 可能几小时到几周才真正移除搜索结果,期间仍可能显示为“已删除”或快照链接。这不是 bug,而是 crawl → render → index → deindex 的异步流程决定的。
如果你刚上线一个测试页,又怕被误收录,光靠 robots.txt 的 Disallow 不够——它只阻止抓取,不阻止索引(已有快照或外链指向时);必须配合 noindex 才能彻底退出搜索结果。
- 紧急下线用
X-Robots-Tag: noindex+ 确保返回 200(别返回 404,否则 Google 会保留快照) - 检查 Search Console 的“URL 检查”工具,提交重新抓取并请求“暂时隐藏”
- 别依赖
robots.txt来保密敏感路径——它本身是公开的,且不阻止其他方式的访问或引用
robots.txt 的编码(必须 UTF-8 无 BOM)和换行符(LF,不是 CRLF),这两点会导致某些爬虫解析失败,但浏览器访问时又看起来正常。



















