抓取(Crawling)的工作原理
搜索引擎主要通过两种方式发现新页面:跟随已知页面上的链接,以及处理提交的 sitemap。Googlebot 会从一组已知 URL 的种子集合出发,沿着遇到的每个链接继续抓取,逐步构建出整个互联网的地图。
单个页面的抓取流程如下:
- Googlebot 请求该 URL。如果 robots.txt 禁止访问该路径,抓取会在此处停止。
- 服务器返回 HTML。Googlebot 会记录状态码(200、301、404 等)。
- Googlebot 解析 HTML 并提取链接,将发现的任何新 URL 加入抓取队列。
- 如果页面使用 JavaScript 渲染内容,Googlebot 可能会把页面放入第二波渲染队列,用无头浏览器重新渲染——但这可能需要数天甚至数周。
- 页面(以及渲染后的版本,如适用)会被送入索引流程。
GPTBot、ClaudeBot、PerplexityBot 等 AI crawler(AI 爬虫)遵循类似的模式——它们同样是请求页面、跟随链接并遵守 robots.txt 的 HTTP 机器人。区别在于它们如何处理内容:Googlebot 将内容喂给排序算法,而 AI crawler 则将内容喂给检索与生成模型。
Crawl Budget(抓取预算)
Google 对 crawl budget 的定义非常明确:
“Google 将网站的 crawl budget 定义为:Google 能够且愿意抓取的 URL 集合。”
—— Google Search Central,《大型网站抓取预算管理》
它由两个因素决定:
- 抓取速率限制(Crawl rate limit): Googlebot 在不给服务器造成过载的前提下愿意抓取的速度。它受服务器响应速度以及 Search Console 中的抓取速率设置影响。
- 抓取需求(Crawl demand): Google 想要重新抓取页面的频率。热门且频繁更新的页面抓取需求高;内容单薄或很少更新的页面抓取需求低。
对于大多数中小型网站(1 万页以下),crawl budget 并不是一个实际问题——Googlebot 会在合理时间内发现你的所有页面。crawl budget 真正重要的情况包括:
- 你的网站拥有数百万个 URL(带分面导航的电商网站是典型案例)
- 服务器响应缓慢,导致 Googlebot 降低抓取速率
- 可抓取的 URL 中有很大比例是低价值页面(重复页面、内容单薄页、参数变体)
如何优化 Crawl Budget
- 使用 robots.txt 屏蔽网站上那些永远不该被抓取的部分(例如
/admin/、/cart/、站内搜索结果)。 - 消除或合并 URL 参数重复。使用
?参数合并和 canonical 标签。 - 改善服务器的 TTFB——响应越快,Googlebot 每小时能抓取的页面就越多。
- 如果分面导航会生成数百万个近乎重复的 URL,就把它从可抓取的 URL 空间中移除。
- 提交 XML Sitemap,为重要页面提供
<priority>和<changefreq>提示。
索引(Indexing)的工作原理
页面被抓取后,会进入 Google 的索引流程进行分析:提取文本、理解页面主题、计算质量信号,并决定是否将其收录。并非每个被抓取的页面都能进入索引。
Google 可能出于以下原因决定不将某个页面收录进索引:
- 页面带有
noindex指令 - 页面内容单薄、重复或质量低下
- 页面没有来自已收录页面的导入链接
- 页面被 robots.txt 屏蔽(Google 无法看到其内容)
- 页面在抓取时返回了非 200 状态码
robots.txt
robots.txt 是位于域名根目录下的一个文本文件(例如 https://example.com/robots.txt),用来告诉爬虫哪些路径允许访问。它遵循 Robots 排除标准(Robots Exclusion Standard)。
User-agent: *
Disallow: /admin/
Disallow: /cart/
Allow: /
User-agent: GPTBot
Allow: /
Sitemap: https://example.com/sitemap.xml
llms.txt: https://example.com/llms.txt
关于 robots.txt 的几个关键点:
- 在 robots.txt 中屏蔽某个路径,可以阻止爬虫访问它——但如果该页面有导入链接,屏蔽并不能阻止它出现在搜索结果中。只有
noindex才能将页面从索引中移除。 - 如果页面被 robots.txt 屏蔽,Google 就无法处理该页面上的
noindexmeta 标签,因为它根本看不到页面内容。这是一个常见错误,会导致你本意想排除的页面反而出现在搜索结果中。 - AI crawler 同样遵守 robots.txt。在这里屏蔽它们,是阻止 AI 系统访问你内容的最快方式——但这也意味着你的内容不会被 AI 答案引用。
noindex 指令
noindex 指令告诉搜索引擎不要把某个页面收录进索引——Google 官方文档说得非常直白:
“不要在搜索结果中显示此页面、媒体或资源。”
—— Google Search Central,Robots Meta Tag 文档
它有两种设置方式:
作为 HTML meta 标签:
<meta name="robots" content="noindex">
<!-- 或更具体地说: -->
<meta name="robots" content="noindex, nofollow">
作为 HTTP 响应头:
X-Robots-Tag: noindex
对于你希望从 Google 索引中排除、但又希望被继续抓取的页面,必须设置 noindex 指令。常见的合理使用场景:
- 感谢页和订单确认页
- 对外公开的测试(staging)环境
- 第 2 页之后的分页页面(需谨慎)
- 站内搜索结果页
如果你既在 robots.txt 中屏蔽了页面,又添加了 noindex,Google 将无法处理 noindex——因为它根本看不到该页面的 HTML。这个页面仍可能通过导入链接出现在搜索结果中。解决办法:如果希望 noindex 生效,请移除 robots.txt 的屏蔽。robots.txt 屏蔽只应用于你完全不想被抓取的页面。
XML Sitemap
XML Sitemap 是一个列出你网站上希望搜索引擎发现并收录的 URL 的文件。它并不能保证收录,但能帮助爬虫找到那些可能被遗漏的页面——尤其是导入链接较少的页面。
一个结构良好的 sitemap 应该:
- 只列出 canonical、可被索引的 URL(不要包含 noindex 页面或被 robots.txt 屏蔽的 URL)
- 设置准确的
<lastmod>日期(如果页面并未更新,不要把全部页面都设为今天) - 使用
<priority>来表示页面在你网站中的相对重要程度(Google 将其视为提示,而非指令) - 通过相应的 sitemap 扩展提交新闻和视频内容
请通过 Google Search Console(Sitemaps 报告)提交你的 sitemap,并在 robots.txt 文件中包含 sitemap 的 URL。
正在权衡免费的审计工具?请查看我们的免费 SEO 审计工具对比。
AI Crawler 与 llms.txt 标准
在 2024 和 2025 年,一类新型爬虫变得日益重要:用于 AI 训练和检索的机器人。GPTBot (OpenAI)、ClaudeBot (Anthropic)、PerplexityBot、Google-Extended 等现在都在抓取网页,为 AI 问答系统提供支持。
这些爬虫都遵守 robots.txt,但许多站长由于对所有 user-agent 设置了 Disallow: /,无意中把它们也屏蔽了。如果你希望自己的内容出现在 AI 生成的答案中,就需要明确允许这些机器人访问。
除了 robots.txt 的访问控制之外,还出现了一个新标准——llms.txt——用来帮助 AI 系统理解你网站的结构和内容层级。位于网站根目录的 llms.txt 文件,会以针对 AI 检索优化过的 Markdown 格式,描述你网站的关键内容、工具和栏目。 关于这个文件到底要求什么,见 llms.txt 规范详解;爬虫进得来之后决定要不要引用你的是另一批因素,见 如何成为 AI 回答引用的信息源。
如何检查页面是否被索引
- Google Search Console → Pages 报告: 最准确的视图。它会显示哪些页面已收录、哪些被排除,以及排除原因。从这里开始。
- site: 搜索运算符:
site:yourdomain.com会返回已收录页面数量的估算值。适合快速粗略检查,但用于诊断时不够精确。 - URL 检查工具(URL Inspection,GSC): 检查某个特定 URL,查看其抓取状态、上次抓取时间、索引状态以及检测到的任何问题。
- SearchVitals 审计: 检查常见的索引障碍:noindex 标签、可收录内容上的 robots.txt 屏蔽、缺失的 canonical 标签,以及会让爬虫困惑的重定向链。
正在为深度技术审计对比爬虫工具?请查看SearchVitals 与 Screaming Frog 的对比。
常见的索引收录问题(及其含义)
Google Search Console 的 Pages 报告会给每个被排除的 URL 标注一个具体原因。并非每个排除项都需要修复——有些恰恰是 Google 的正常行为。把每个被排除的 URL 都当成 bug 去排查,是 SEO 从业者把时间浪费在本就不该被收录的页面上的常见原因。
| GSC 标签 | 含义 |
|---|---|
| 已抓取——目前未收录(Crawled — currently not indexed) | Google 已经抓取了该页面,但决定不将其收录,通常是内容质量或重复内容的判断。这是内容单薄或低价值页面最常见的标签——值得检查该页面是否提供了某个已收录的相似页面所没有的价值。 |
| 已发现——目前未收录(Discovered — currently not indexed) | Google 知道该 URL 存在(通常来自 sitemap 或内链),但尚未抓取。这往往是 crawl budget 或优先级问题,而非内容问题——来自已收录页面的内链会有所帮助。 |
| 重复页面,未指定 canonical(Duplicate without user-selected canonical) | Google 在多个 URL 上发现了几乎相同的内容,并自行选择了 canonical——而它选的未必是你想要的。添加明确的 canonical 标签可以重新掌握主动权。 |
| 带正确 canonical 标签的备用页面(Alternate page with proper canonical tag) | 这不是错误。该页面通过 canonical 标签正确指向了其他位置的规范版本,Google 正在按预期遵循这一设置。 |
| 被 noindex 标签排除(Excluded by 'noindex' tag) | 该页面明确告诉 Google 不要收录它。请确认这是否是刻意为之——遗留自测试环境的 noindex 标签,或由插件默认设置添加的 noindex,都是常见的意外原因。 |
| 软 404(Soft 404) | 页面返回 HTTP 200,但 Google 的内容分析认为它看起来像“未找到”页面——常见于空的搜索结果页,或当网站的缺失页面回退逻辑(例如单页应用的 catch-all 路由)返回 200 而非真正的 404 状态码时。 |
| 被 robots.txt 屏蔽(Blocked by robots.txt) | Google 完全无法抓取该页面,因此无论质量如何,都无法对其进行索引评估。请确认这种屏蔽是否是刻意设置的。 |