Sitemap 与 robots.txt 详解:搜索引擎如何发现、抓取并收录你的网站
2026-08-18
每个站长迟早都要编辑两个自己并不完全理解的文件:robots.txt 和 sitemap.xml。它们做的事正好相反——一个告诉爬虫别去哪,另一个把存在的一切交给爬虫——搞混它们,轻则网站对 Google 隐形,重则让爬虫把预算浪费在你本想隐藏的页面上。本文为两者各给出一套能用的心智模型,再列出那些连优秀站点都会踩的坑。
一句话各管一事
- robots.txt —— 一个纯文本许可文件:“爬虫 X,这些 URL 前缀你不能抓取。“它放在站点根目录(
https://example.com/robots.txt),也是很多爬虫请求的第一样东西。 - sitemap.xml —— 一份你要被发现、以及更新频率的页面清单(XML)。它的存在是为了告诉爬虫那些顺着链接可能永远找不到的新页面或已更新页面。
两者都是信号,不是硬规则。搜索引擎可能无视 robots.txt 的某几行,sitemap 也永远不会强迫某页被收录。但用对了,它们对爬取和发现的塑造力几乎超过你能控制的其他一切。
robots.txt:格式与匹配
robots.txt 由若干规则组构成,每组以 User-agent: 开头,后面跟着针对该爬虫的规则:
User-agent: *
Disallow: /private/
Disallow: /tmp/*.pdf$
Allow: /private/public/
User-agent: *表示”应用于所有爬虫”。User-agent: Googlebot则只针对这一个爬虫。Disallow: /private/屏蔽/private/这个 URL 前缀(以及它下面的一切)。Allow为更宽的Disallow重新放行某个子路径。Google 依据最长匹配规则消解冲突:Allow: /private/public/比Disallow: /private/路径更长,所以它胜出。- Google 还支持两个通配符:
*匹配任意字符,$匹配 URL 结尾(/tmp/*.pdf$屏蔽/tmp/下所有 PDF)。 - 空
Disallow:表示全部放行;没有规则组的文件表示全部放行。被屏蔽的前缀不意味着”消失”——见下文。
robots.txt 做不到的事
最危险的误解是:robots.txt 藏不住页面。 在 robots.txt 里屏蔽 /private/ 只意味着爬虫不会去抓取它——但如果别的站点链接了它,Google 依然可以收录这个 URL,并在没有摘要的情况下展示结果(通常只有标题和 URL)。
想彻底把页面移出索引,需要一条明确的”不要收录”指令:
<meta name="robots" content="noindex">
或者等价的 HTTP 响应头 X-Robots-Tag: noindex。Meta Tag Generator 能生成合法的 robots 与 Open Graph 标签,包括 noindex / nofollow 组合。实际分工是:robots.txt 用来阻止抓取(省爬取预算),noindex 用来移出索引。
XML Sitemap:那张地图
sitemap 是一份 XML,每页一个 <url> 块:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2026-08-18</lastmod>
</url>
<url>
<loc>https://example.com/guides/sitemap-robots-guide/</loc>
</url>
</urlset>
<loc>是唯一必需的子元素——页面的规范 URL(一种协议 + 一个主机;绝不要混用http/https或www/裸域名)。<lastmod>是 ISO 8601 日期,告诉爬虫页面最近一次改动。它只是个提示;如果你把它留旧或作假,爬虫就会学乖不再信任它。<changefreq>和<priority>是遗留字段,Google 基本忽略——可以省略。- 上限:每个 sitemap 最多 50,000 个 URL 或 50 MB(未压缩)。压缩成
sitemap.xml.gz也没问题,甚至更受欢迎。
Sitemap 不会提升排名。它的职责是发现:Google 得知某 URL 存在以及它有多新,于是新页面和变更页面能被更快抓取,而不是等着哪个地方链过来。这就是大型或高频变动的网站要发布 sitemap 的原因——也正因如此,sitemap 必须列出规范 URL,否则你教给爬虫的是重复 URL,而不是真实页面。
一个 sitemap 不够时
超过 50,000 个 URL——或者站点分区明显——就该用 sitemap 索引:一份列出其他 sitemap 的 XML:
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>https://example.com/sitemap-blog.xml</loc></sitemap>
<sitemap><loc>https://example.com/sitemap-tools.xml</loc></sitemap>
</sitemapindex>
每个 <sitemap> 条目也可以带 <lastmod>。这时你提交给搜索引擎的是索引的 URL,而不是每个单独的 sitemap。
两个文件如何配合
两者在一个常见配置里互相成就:
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xml
Sitemap: 指令是很多爬虫得知你地图在哪的方式(它可以出现在文件任何位置)。这是大多数站点想要的模式:允许一切被抓取(这样 sitemap 里的页面才能被触达),同时把爬虫指向地图。
悄悄扼杀收录的常见错误
- 在 robots.txt 里屏蔽 sitemap。 如果一边
Disallow: /sitemap.xml(或/sitemap*),一边又用Sitemap:声明它,爬虫可能拒绝抓取这个本该帮助它的文件。请保持 sitemap 处于放行状态。 - 想被收录却写了
Disallow: /。 这就是”我的站为什么不在 Google”的经典答案。 - URL 不一致。 sitemap 里写
http://,站点却 301 到https://,或者混用www与裸域名。sitemap 必须用规范形式。 lastmod陈旧或造假。 一份给没动过的页面全标上昨天日期的 sitemap,会让爬虫学会无视它。- robots.txt 格式错误。 文件在规则中间中断、或组之间没有空行,会让爬虫对后面的规则理解出错。保持短小合法;多数站点不到十行就够了。
- 忘了提交。 即使 sitemap 再完美,如果只在文件里放
Sitemap:行、从不提交到 Google Search Console / Bing Webmaster Tools,帮助也有限。
快速参考
- robots.txt = “这些前缀别抓”;sitemap.xml = “存在的一切都在这里”。一个管抓取,一个管发现。
- 规则是
User-agent:+Allow:/Disallow:行;Google 用最长匹配优先级和*/$通配符。 - robots.txt 藏不住页面——移出索引要用
<meta name="robots" content="noindex">(或X-Robots-Tag)。 - sitemap 的
<url>需要<loc>;<lastmod>是新鲜度提示;<changefreq>/<priority>是遗留字段。 - 每个 sitemap 最多 50,000 个 URL / 50 MB;再大就用 sitemap 索引。
- 在 robots.txt 里写
Sitemap: https://example.com/sitemap.xml,并保持该路径放行。 - 绝不屏蔽 sitemap、不混用协议/主机、不发布陈旧的
lastmod。
想生成正确文件而不是手写 XML,XML Sitemap Generator 能把 URL 列表变成合法的 sitemap,Robots.txt Generator 可以可视化地构建按爬虫分组的规则。当爬虫真的来抓取时,HTTP 状态码会讲述它们遇到的故事——200 表示可以收录、404/410 表示该删除、301 表示需要合并。