跳到主要内容
← 全部指南

robots.txt 与站点地图

两个文件都在向抓取工具说明你的网址,而且都不做人们通常以为的那件事。一个收回抓取许可,另一个递上一份供其考虑的清单。

许可不等于排除

robots.txt 收回抓取某个网址的许可,仅此而已。谷歌把话说得很直白:它不是把页面挡在搜索之外的机制。这两件事被反复混为一谈,而这种混淆会造成一种非常具体、也很显眼的故障。

被其他网站链接的屏蔽网址,依然可能进入索引。有人链接过,所以谷歌知道这个地址存在,只是看不见上面有什么。于是它可能在结果里完全没有描述地列出来——两头落空:页面公开出现在结果中,而你对它的呈现方式毫无控制。

怎么读、怎么写这个文件

文件位于某个主机的根目录,只对该主机与该协议生效。规则按 user-agent 分组,抓取工具只遵守与自己最贴合的那一组,而不是所有可能匹配的组。在同一组内,谷歌按更具体的规则裁定冲突,而不是按书写顺序。

robots.txt
User-agent: *
Disallow: /admin/
Disallow: /*.pdf$
Allow: /admin/public/

User-agent: Googlebot
Disallow: /drafts/

Sitemap: https://example.com/sitemap.xml

这个例子里的两处细节,几乎承担了全部误解。Allow 行比它上面的 Disallow 更具体,所以 /admin/public/ 仍可抓取。而只要存在 Googlebot 分组,Googlebot 就只遵守那一组——通配符分组对它不再适用,于是这里的 /admin/ 对 Googlebot 反而是放行的。这几乎从来不是作者的本意。

  • 屏蔽一条路径不会清除已经收录的网址,只会停止之后的抓取。
  • Sitemap 指令独立于任何 user-agent 分组,放在文件的任何位置都可以。
  • robots.txt 本身返回 5xx,可能让抓取工具对整台主机收手,所以要从可靠的地方提供它。

一条 robots 规则如何在很远的地方造成损害

代价最高的 robots.txt 错误,不是你本想屏蔽的那些页面,而是页面渲染时所需要的资源。搜索引擎在收录之前会渲染页面,而渲染会去拉取脚本、样式和接口响应。

屏蔽掉脚本目录或某个 API 路由,抓取工具照样能把 HTML 取回来。随后它渲染出一个近乎空白的页面,并收录一个近乎空白的页面。任何报告都不会说这个页面被屏蔽了,因为被屏蔽的不是页面本身,而是它所依赖的东西。

站点地图是建议,不是排队

站点地图恰恰在链接最薄弱的地方帮上忙:大型网站、外链稀少的全新网站,以及缺乏自然锚文本的媒体型网站。谷歌直言,列出一个网址既不保证抓取也不保证收录。

谷歌自己的说法是,规模不大、内链完善的网站可能根本不需要它,因为抓取工具顺着链接就能找全。在为一个内链本可更好解决的问题去搭建站点地图设施之前,这一点值得认真对待。

上限数值
每个文件的网址数5 万
每个文件未压缩体积50 MB
超出其中任何一项拆分,并用站点地图索引引用各个分片

哪些标签会被读取、忽略或怀疑

站点地图上的力气,大多浪费在这里。四个常见标签里有两个什么也不做,第三个还可能反过来对你不利。

标签谷歌如何处理
loc读取——网址本身
lastmod只有在一贯且可核实地准确时才使用
changefreq忽略
priority忽略

真正咬人的是 lastmod 的那个条件。如果构建流程给每个网址都盖上部署时间戳,那么每个值既是错的,又极易被戳破:页面并没有变,而搜索引擎看得出来。一旦它不再信任这个字段,就不再使用它,你的处境反而比根本不提交 lastmod 更差。只在正文真正发生变化时输出它,与其编造,不如省略。

sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/guides/indexing/</loc>
    <lastmod>2026-06-14</lastmod>
  </url>
</urlset>

挑对工具

这个领域里几乎所有问题,在你把三件看着相似、其实不同的事分开的那一刻就解开了。

目标工具原因
别把抓取浪费在垃圾网址上robots.txt从源头阻止抓取
把页面挡在结果之外noindex,或登录验证需要先抓取,指令才读得到
帮助页面被发现先内链,再站点地图链接带着上下文,站点地图条目没有

问答

可以同时用 disallow 和 noindex 吗?

不行,而这正是最典型的错误。robots.txt 一旦屏蔽网址,抓取工具就不会取回页面,也就永远看不到 noindex。请放行抓取然后返回 noindex,或者把页面放到登录验证之后。

我真的需要站点地图吗?

并非总是需要。谷歌的说法是,规模不大、内链完善的网站顺着链接就能被发现。站点地图在大型网站、外链稀少的新站和大量媒体的情形下才真正划算。

我屏蔽过的页面为什么还出现在谷歌里?

因为 robots.txt 拦下的是抓取,不是收录。别的网站链接了这个网址,谷歌知道它存在却看不到内容,于是就有了没有描述的条目。放行抓取并返回 noindex,才能把它妥当地移除。

要不要设置 priority 和 changefreq?

不要。谷歌两个都忽略。这份力气花在把 lastmod 做准,或者花在内链上,回报更高。

robots.txt 返回错误会怎样?

5xx 可能让抓取工具对这台主机收手,而不是默认一切放行。请把 robots.txt 放在至少与网站本身同样可靠的基础设施上提供。