sitemap 提交的两条路:robots.txt 那一行,30 个站有 26 个写了
sitemap 提交除了去后台点,还有 robots.txt 里那一行——爬虫不用你告诉它就会看。2026-08-18 读的 30 个站里 26 个写了,而声明的第一条地址逐个拉下来,有一个返回 403。

实测 · 2026-08-18 · 30 个站 · 单次快照
样本与口径:与我们做 robots.txt、sitemap、首页结构三次调查完全相同的 30 个站。每站取一次 robots.txt,再取它声明的第一条 sitemap,浏览器 User-Agent,2026-08-18,出口在日本。同一次抓取供本批另外四篇用。
sitemap 提交有两条路:一条是去搜索引擎后台点提交,另一条是在 robots.txt 里写一行 Sitemap:——后者是爬虫不用你告诉它就会去看的地方。30 个站里 26 个写了,4 个没写。我们把这 26 个声明的第一条地址逐个拉了一遍:25 个返回 XML,1 个返回 403——一个声明出去、却打不开的地址。
怎么测的
抓取前写死,之后没改。
- 在最终首页所在的域名上取
/robots.txt,记状态码。 - 抽出所有匹配
Sitemap:的行,不分大小写,数条数。 - 请求第一条声明的地址,记状态码、大小和 Content-Type。
每站只开第一条,因为要回答的是「这条声明能不能兑现」,不是审计整棵 sitemap 树。这个选择本身也是它的局限,写在下面。
30 个站各声明了几条
多数站只写一条。条数排在最前面的,是按栏目和年份切归档的新闻站。
| 声明条数 | 站数 | 是哪些 |
|---|---|---|
| 一条都没有 | 4 | github、stackoverflow、reddit、hacker news |
| 正好一条 | 13 | nextjs、stripe、vercel、linear、cloudflare、wikipedia |
| 两到七条 | 10 | figma 3、slack 3、railway 4、discord 6、wired 7 |
| 十条以上 | 3 | notion 12、nytimes 25、bbc 35 |
没写这件事,对其中至少两个来说是选择不是疏忽。GitHub 和 Hacker News 的地址结构本身就能顺着链接走完。是不是这个原因,我们在站外确认不了。
Google 只认四个字段,sitemap 提交靠的就是其中一个
robots.txt 规范页把 Google 会读的东西列全了:Google supports the following fields (other fields such as crawl-delay aren't supported):(Google 支持下列字段,crawl-delay 这类其他字段不支持),后面是四个——user-agent、allow、disallow,以及 sitemap: the complete URL of a sitemap.(sitemap:一条 sitemap 的完整地址。)2026-08-18 读自 developers.google.com。
关键的词是「完整」。这一行不支持相对路径,必须带上协议和域名。
🔴 出海站最容易在这一行写错的两种地址
第一种是相对路径,写成 Sitemap: /sitemap.xml。看着省事,按上面那句规范它不成立。
第二种更隐蔽:地址写的是源站域名或旧域名。站前面套了 CDN、或者从 .cn 迁到 .com 之后,robots.txt 是搬过来了,那一行里的域名却没跟着改。爬虫拿到的是一个指向别处的完整地址,语法完全正确,内容对不上。
这两种在自己的浏览器里都不会报错,因为你的浏览器解析得了。唯一能验的办法是把那一行的地址原样复制出来,从外网请求一次。
有一条声明的 sitemap 返回了 403
我们把 26 个站各自的第一条 sitemap 拉了一遍,25 个返回 200 加 XML。Wikipedia 声明的地址 en.wikipedia.org/w/rest.php/site/v1/sitemap/0,对我们返回 403。
「我声明了一个 sitemap」和「爬虫打得开这个 sitemap」是两句话,而后一句在你自己的后台里看不到。
我们不知道 Googlebot 拿到的是不是同一个 403。那个接口可能按速率或者按网段限制,而我们只有一个浏览器 UA、一个国家的一次请求。能说的是:这个检查只要一条命令,而看起来没什么人在跑。做完 sitemap 提交就当这件事结束了,是最常见的一种收尾方式。
顺带撞见的两件事
都跟 sitemap 无关,跟「robots.txt 本身取不取得到」有关。
Stack Overflow 对我们的 robots.txt 请求回了 418——那个留给茶壶的玩笑状态码,实际含义是某个机器人管理系统不想跟你说话。另外 29 个站都是 200。
能打开的那些 sitemap,大小和 Content-Type 也很不一致。Medium 的第一个文件 3,339,942 字节,按 binary/octet-stream 下发;Canva 的是 application/octet-stream;Discord 的是 text/plain。三个照样都解析成了 XML。看不出这坏了什么,我们也没测它会不会拖慢什么。
这次抓取回答不了什么
我们每站只开了一个 sitemap。一个站完全可能第一条是好的、第四条是坏的,这个方法永远看不见——而声明了十条以上的那三个站,正是风险最集中的地方。
我们也没查这些 sitemap 有没有在 Search Console 里提交过。那是另一条发现路径,也是唯一会给你回执的那条,站在别人家的外面无从判断。
今天能查的三件事
按这个顺序,一个工具都不用。
- 浏览器打开
你的域名/robots.txt,确认有一行Sitemap:,且后面是完整地址。 - 把那个地址复制进
curl -I,确认返回 200。换一个不是自家办公室的网络跑,免得你自己的白名单替你答了。 - 如果那个文件是索引,再打开一个子文件。声明只为第一跳背书。
声明 sitemap 同时也是你交付「更新日期」的方式,而那些日期有多可信,测在 sitemap 的 lastmod 值多少那篇。不等 sitemap 被读、直接把地址推过去,写在 IndexNow 怎么推送地址那篇。把每一条声明的文件都验一遍打不打得开,是 QueryWin 正在做的事。
常见问题
你们是怎么测的
每站取一次 robots.txt,数所有 Sitemap: 行,再取第一条声明的地址一次。浏览器 User-Agent,2026-08-18,跑一遍,不重试。
后台做过 sitemap 提交了,robots.txt 里还要写吗
后台提交只覆盖那一家搜索引擎。robots.txt 里这一行,任何来取这个文件的爬虫都会读到——包括你从没注册过账号的那些 AI 爬虫。两个都留,成本是一行。
可以写多条吗
可以,这里有 13 个站写了不止一条,3 个写了十条以上。每一行相互独立,所以坏掉一条不会让别的失效——它只是安静地什么都没交付。
没写这一行算问题吗
本身不算。这里有 4 个站一条都没写,而它们都不是小站。它对「顺着链接走不到」的页面最要紧,那种页面爬虫没有别的入口。


