robots.txt 怎么写?Disallow 了页面为什么百度谷歌还收录
robots.txt 是网站根目录下的一个纯文本文件,用来告诉搜索引擎蜘蛛「哪些路径可以抓取、哪些不要抓取」。它本身属于站长工具、不是网络拨测,但它直接决定蜘蛛能不能抓到你的页面——这和宝塔拨测的 蜘蛛模拟抓取 工具是同一件事的两面:robots.txt 写「规则」,蜘蛛模拟抓取看「蜘蛛实际抓到什么」。本文只解决一个问题:这份规则到底怎么写,以及 Disallow 了为什么还可能被收录。
robots.txt 里四个字段各管什么
按 robots 协议标准(RFC 9309),一份 robots.txt 由若干规则组构成,每组以 User-agent 开头,下面跟若干 Disallow / Allow 行,Sitemap 可独立放在任意位置:
| 字段 | 作用 | 示例 |
|---|---|---|
User-agent |
声明规则对哪个蜘蛛生效,* 表示所有蜘蛛 |
User-agent: * |
Disallow |
列出不要抓取的路径 | Disallow: /admin/ |
Allow |
列出允许抓取的路径(在 Disallow 范围内放行子路径) | Allow: /admin/public/ |
Sitemap |
声明站点地图地址,帮助蜘蛛发现页面 | Sitemap: https://域名/sitemap.xml |
其中 Disallow 和 Allow 里可以用两个通配符:* 匹配任意长度的任意字符,$ 表示「以这个结尾」用来锚定路径末尾。
Disallow 只阻止抓取,不保证不收录
这是最多人踩的坑:给某个页面加了 Disallow,过一阵发现百度、谷歌照样把它收录了,就以为规则没生效。其实规则生效了,只是「抓取」和「收录」是两件事:
Disallow拦的是抓取——蜘蛛不再读取这个页面的内容,自然也就没有内容快照。- 但页面如果之前已经被收录,或通过外链、站点地图等其他途径被搜索引擎发现,它可能仍留在索引里,只是没有新内容可更新。
所以 Disallow 不是「删除收录」的开关。要彻底阻止收录和展示,需要在页面 <head> 里加 <meta name="robots" content="noindex">,或让服务器返回 X-Robots-Tag: noindex 响应头。两者配合:Disallow 省蜘蛛抓取开销,noindex 管住索引。
三个真实网站的 robots.txt 对照
用 curl 实测三个域名当前的 robots.txt(2026-10-30 抓取),刚好是三种典型形态:
bt.cn —— 全放开、只拦一个文件
User-agent: *
Allow: /
Disallow: /bbs/uc_server/avatar.php
对 * 所有蜘蛛先 Allow: / 全放行,再单独 Disallow 一个具体文件。这是最宽松的写法:整站随便抓,只挡掉一个不想被索引的路径。
taobao.com —— 精准放行列表页、拦掉带参 URL
User-agent: *
Allow: /$
Allow: /list/*
Allow: /list/*?*
Disallow: /*?*
先放行首页(/$ 锚定根路径结尾)和 /list/ 列表页,最后一条 Disallow: /*?* 拦掉所有带查询参数(?)的 URL。这种写法用「先 Allow 具体路径、再 Disallow 更宽的范围」来精准控制,靠的是最长匹配优先:蜘蛛会选和 URL 匹配得最具体的那条规则,而不是看谁写在前面。
baidu.com —— 按蜘蛛分别给规则,兜底全禁
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
...
User-agent: Googlebot
Disallow: /baidu
...
User-agent: *
Disallow: /
对不同蜘蛛(Baiduspider、Googlebot、MSNBot、Sogou 系列等)分别列了 Disallow 路径,最后用 User-agent: * + Disallow: / 兜底——没匹配到专属规则的蜘蛛一律禁止抓取整站。
用宝塔拨测验证蜘蛛到底抓到了什么
规则写完,怎么确认蜘蛛视角下真的按你的规则来?用 宝塔拨测的蜘蛛模拟抓取 选一种蜘蛛类型访问目标网址,返回的 HTTP 状态码和「蜘蛛实际抓取到的页面内容」能直接看出规则是否生效:被 Disallow 的路径通常拿不到内容,放行的路径能拿到 200 和完整内容。
如果不想手写规则,也可以用 robots.txt 在线生成器 填好允许/禁止抓取的路径和 Sitemap 地址,生成后复制到网站根目录的 robots.txt 文件即可。
一句话总结:robots.txt 管的是「蜘蛛能不能抓」,Disallow 拦抓取不拦收录,要彻底不收录得靠 noindex;写规则时记住 * 通配、$ 锚定结尾、匹配按最长优先,写完用蜘蛛模拟抓取验证一遍。
常见问题
robots.txt 是干什么的?放在哪里?
robots.txt 是网站根目录(如 https://域名/robots.txt)下的一个纯文本文件,用来告诉搜索引擎蜘蛛哪些路径可以抓取、哪些不要抓取。它管的是「抓取」这件事,不是「收录」。
Disallow 了某个页面,为什么百度谷歌还收录?
因为 Disallow 只阻止蜘蛛「抓取」,不会自动把已收录的页面从索引里移除。如果页面之前已被收录、或通过外链、站点地图等其他方式被搜索引擎发现,即使加了 Disallow 也可能仍留在索引里(只是没有内容快照)。要彻底阻止收录,需要在页面里加 noindex 的 meta 标签或返回 X-Robots-Tag: noindex 响应头。
User-agent、Disallow、Allow、Sitemap 分别是什么意思?
User-agent 声明这条规则对哪个蜘蛛生效,* 表示所有蜘蛛;Disallow 列出不要抓取的路径;Allow 列出允许抓取的路径(通常用于在 Disallow 范围内放行子路径);Sitemap 声明站点地图地址,帮助蜘蛛发现页面。
robots.txt 里的 * 和 $ 怎么用?
* 匹配任意长度的任意字符,$ 表示「以这个结尾」,用来精确锚定路径结尾。例如 Disallow: /*?* 表示禁止所有带查询参数的 URL。
怎么确认蜘蛛实际能不能抓取我的页面?
用宝塔拨测的蜘蛛模拟抓取(t.bt.cn/tools/spider-crawl.html)选一种蜘蛛类型访问目标网址,就能看到蜘蛛视角下的 HTTP 状态码和抓取到的内容,用来核对 robots.txt 规则是否真的拦住了蜘蛛。
robots.txt 规则写错了怎么快速生成?
宝塔拨测提供 robots.txt 在线生成器(t.bt.cn/tools/robots.html),填好允许/禁止抓取的路径和 Sitemap 地址就能生成规则,复制到网站根目录的 robots.txt 文件即可。