我们大多数人每天都在使用 Google 搜索,却从未追问过搜索框背后发生了什么。你输入几个词,不到一秒钟,一份页面列表就出现了,这些内容来自一个索引,其存储的文本量超过地球上所有图书馆的总和。接下来的问题,也就是本文要解答的问题,是这些内容最初是如何进入索引的:Google 是如何抓取网站的?
简短的答案是:一条流水线。Google 运行一个名为 Googlebot 的自动化程序,它负责发现页面、获取页面、渲染需要 JavaScript 的页面、解析结果,并将其存储在搜索引擎查询时读取的索引中。本文将逐一讲解这些阶段,解释作为网站所有者你可以控制的部分(网站地图和 robots.txt),并在 Google 构建搜索的行为与开发者从网络上抓取数据的行为之间划出清晰界限。
什么是 Googlebot?
Googlebot 是 Google 的网络爬虫,有时也被称为蜘蛛或机器人。它是一款自动浏览网络的软件,以人们点击浏览网站的方式跟踪链接,只不过它连续不断地这样做,而且规模极为庞大。当人们问 Google 如何抓取网站时,Googlebot 就是执行这项工作的工具:它下载它访问的页面的文本、图片和其他内容,以便 Google 对其进行分析和存储。
区分两个经常混淆的概念很有帮助。抓取是获取页面并读取其内容的行为。索引是分析该内容并将其归档以便日后检索的行为。Googlebot 负责抓取;Google 的索引系统负责索引。两者都必须发生,页面才能出现在结果中,而第三个步骤(服务)则在每次你实际搜索时运行。关于爬虫通常如何工作的更广泛视角,请参阅我们关于 什么是网络爬虫 的入门文章。
Google 搜索的三个步骤
Google 用三个阶段描述自己的流程,这是一个很好的起点:
- 抓取。 Google 使用自动化程序,不断从它在网络上发现的页面下载文本、图片和视频。它无法索引从未获取过的页面。
- 索引。 在处理页面时,Google 分析其文本和媒体文件,并将所学内容存储在索引中, 一个包含页面及其内容的庞大数据库。
- 服务。 当你进行搜索时,Google 从该索引中返回它能找到的最相关结果,按数百个信号排序。
这个总结隐藏了大量的机制,而抓取正是其中的关键环节。在任何页面出现在搜索引擎结果页面 (SERP) 之前,Googlebot 必须找到它、获取它,并将其传递给索引系统。本文的其余部分将深入探讨这个中间过程。
Google 如何逐阶段抓取网站?
从未知 URL 到你可以点击的结果,这段旅程分为五个阶段。每个阶段都可以独立成功、停滞或失败,这就是为什么页面可能被抓取但从未被索引,或者已索引但很少被服务。
1. 发现:Google 如何找到你的页面
Google 无法抓取它不知道存在的页面,因此一切都从发现开始。有两条主要路径。第一条是链接:当 Googlebot 抓取它已知的页面时,它读取该页面上的每个锚点,并将目标添加到待访问 URL 的队列中(通常称为抓取前沿)。来自已索引页面的链接是新页面最常见的被发现方式。第二条路径是网站地图:网站所有者可以向 Google 提供一份明确的 URL 列表,我们将在下面介绍。
这也是网站管理员首次进入画面的地方。当你发布网站时,可以通过 Google Search Console 提交并允许 Googlebot 到达你的页面来告知 Google。实际上你是在说:这是我的地址,请来看看。Google 的回应是派遣爬虫确认网站存在、查看有哪些页面可用,并了解这些页面包含什么样的内容。
2. 抓取:获取页面
一旦 URL 进入前沿,Googlebot 就会像浏览器那样获取它:发出 HTTP 请求并下载响应。Google 不会在每次遍历中抓取每个已知 URL,也不会尽可能快速地访问某个网站。它在抓取预算内工作,这是它在给定时间窗口内从某个网站获取的页面数量的实际限制。该预算由两个因素决定:服务器在不减速的情况下能处理多少抓取(抓取速率),以及 Google 想要这些页面的程度,基于其受欢迎程度和更新频率(抓取需求)。小型、稳定的网站通常能轻松在预算内完成抓取;将新页面深埋在许多点击之后的大型网站可能会发现某些页面被抓取的频率很低或很晚。
3. 渲染:运行 JavaScript
许多现代页面在初始 HTML 中并不包含真实内容。它们发送一个薄壳,然后在浏览器中用 JavaScript 构建可见页面。如果 Google 只读取原始 HTML,它将完全错过这些内容。因此,对于需要渲染的页面,Googlebot 会像 Chrome 那样渲染页面:执行 JavaScript,让脚本注入其内容,然后处理完全构建好的页面。渲染比普通获取代价更高,因此可能在稍后的过程中才发生。对网站所有者的实际教训是:仅在 JavaScript 运行后才出现的内容可能需要更长时间才能被发现,而依赖用户点击才出现的内容可能根本不会被发现。如果你自己构建或抓取这类页面,我们关于 抓取 JavaScript 网站 的指南涵盖了相关机制。
4. 解析与索引:理解页面内容
页面获取并渲染后,Google 解析 HTML 以提取重要部分:文本内容、标题、链接、图片及其 alt 文本、结构化数据和元数据。这与任何爬虫执行的解析步骤相同,读取标记以从中提取含义。提取的信息随后被分析并写入 Google 的索引,这个庞大的数据库将词语和主题映射到涵盖它们的页面。索引也是 Google 决定页面是否值得存储的地方;内容薄弱、重复或被屏蔽的页面可能被抓取但仍被排除在索引之外。
5. 服务与排名:回答查询
索引填满了图书馆;服务是有人带着问题走进来时发生的事情。当你搜索时,Google 查找索引中匹配的页面,并使用许多信号对其进行排名,包括内容的相关性和质量、网站的权威性和可信度,以及你的语言和位置等上下文。排名是与抓取不同的问题,但它是抓取存在的原因:Google 获取并索引网络,以便在查询时有好的内容可以排名和返回。
Googlebot 能够获取页面、渲染 JavaScript 并化解拦截,是因为 Google 运营着实现这一切的基础设施。如果你需要同样的能力用于自己的抓取,又不想自建渲染农场和代理池,Crawling API 将其处理为单次请求:它渲染页面、轮换真实用户 IP 并处理 CAPTCHA,你只需指向一个 URL 即可获得干净的 HTML,而不是拦截页面。在免费层级开始,提供 1,000 次请求,无需信用卡。
网站地图和 robots.txt:引导 Googlebot 的两个文件
大多数抓取是自动进行的,但网站所有者有两个标准文件来引导它。它们的作用方向相反,而善用两者是技术 SEO 的核心。
网站地图:告诉 Google 应该抓取什么
网站地图是一个 XML 文件,列出了你希望 Google 了解的 URL,还可以附带提示,例如每个页面上次更改的时间。它不会强制 Google 抓取任何内容,但它是向 Google 展示仅凭链接可能无法发现的页面的最清晰方式,例如新内容、深层页面或内部链接较少的部分。你通过 Google Search Console 提交网站地图,这也是你确认网站所有权的地方。可以把它想象成把目录交给爬虫,而不是让它通过游荡来找到每一章。
robots.txt:告诉 Google 应该跳过什么
robots.txt 文件位于你域名的根目录,告诉行为良好的爬虫哪些路径可以抓取,哪些不可以。Googlebot 在抓取之前会读取该文件并遵守其 Disallow 规则。它对于阻止爬虫进入浪费抓取预算或不应出现在搜索结果中的区域很有用,例如内部搜索结果或暂存路径。有一个常见的误解值得指出:robots.txt 控制的是抓取,而不是索引。在 robots.txt 中被屏蔽的页面如果 Google 在其他地方找到了指向它的链接,仍然可能在没有内容的情况下被索引;要让页面不出现在索引中,你需要使用 noindex 指令,这意味着页面必须是可抓取的,Google 才能看到该指令。
这与开发者抓取数据有何不同
人们经常把 Google 所做的事情称为抓取,在获取和解析页面的层面上确实如此。但 Googlebot 构建搜索索引与开发者抓取特定网站数据之间存在真实差异,这些差异很重要。
Googlebot 的工作是广度:尽可能多地发现公共网络,存储通用目的的副本,并在之后对任意查询进行排名。开发者的爬虫通常恰恰相反,目标明确:它访问一组已知页面并将特定字段(如价格、评论或列表)提取到 JSON 或 CSV 等结构化格式中。Googlebot 向外跟踪链接以发现新页面;典型的爬虫则跟踪已知的 URL 模式来收集已知数据。
另一个重大差异是权限和欢迎程度。网站所有者通常希望 Googlebot 抓取他们的网站,因为出现在索引中是他们获得流量的方式,所以他们发布网站地图并在 robots.txt 中开放正确的路径以明确邀请它进入。第三方爬虫没有这样的常设邀请,这就是为什么它必须遵守相同的 robots.txt 规则,诚实地标识自己,并将请求速率保持在合理水平。搜索引擎本身对自己结果的未授权自动收集也运行着成熟的防御机制,这本身就是一个独立的主题;我们在 搜索引擎如何检测爬虫 中介绍了这一点。如果你对跨搜索提供商的 SERP 感兴趣而不是某个特定网站,网络抓取 Google、Yahoo 和 Bing 比较了每个搜索引擎公开的内容。
为什么首先要抓取 Google?
Google 在搜索领域占据主导地位,占全球所有网络搜索的绝大多数,因此其结果页面上的数据对于从事营销、研究或竞争分析的人来说确实很有价值。Google 没有提供简单的内置方式来大规模导出 SERP 数据,这正是开发者抓取它的原因。常见的合法理由包括:
- SEO 追踪。 监控你的页面在特定查询中的排名变化,以衡量搜索表现。
- 竞争对手与市场分析。 观察谁排在你前面,追踪你所在领域的价格或定位。
- 关键词与内容研究。 识别相关关键词,并从匹配某个主题的页面中建立 URL 列表。
- 广告情报。 观察哪些付费结果出现在哪些词条旁边,以及自然列表旁边。
- 趋势分析。 发现排名变化,这可能暗示算法对结果权重的调整。
负责任地抓取
如果你自己抓取网络,负责任的态度同时也是让你在技术上避免麻烦的态度。遵守每个网站的服务条款和 robots.txt 指令,并记住搜索引擎的条款通常限制对 SERP 本身的抓取。优先使用公开数据,避免登录或付费墙后面的任何内容,也不要收集你没有处理依据的个人数据。将请求速率保持在合理水平,这样你就不会与真实用户争夺网站容量;在预期的情况下诚实标识你的流量;并缓存结果,这样你就不必重新获取相同的页面。礼貌、公开且有速率限制的收集既是道德上的选择,也是最不可能被拦截的选择。
核心要点
- Googlebot 是引擎。 Google 的爬虫发现、获取并下载页面以便分析和存储;抓取和索引是独立的步骤。
- 流水线有五个阶段。 发现、抓取、渲染、解析与索引,然后是服务。页面可能在任何一个阶段停滞,因此被抓取绝不自动等于被索引或被排名。
- JavaScript 需要渲染。 由客户端脚本构建的内容只有在 Google 渲染页面之后才会被看到,这是一个额外且较慢的步骤,可能会延迟或遗漏延迟加载的内容。
-
两个文件引导抓取。 网站地图告诉 Google 应该抓取什么;
robots.txt告诉它应该跳过什么,且它管理的是抓取而不是索引。 - Google 的抓取不是你的爬虫。 Googlebot 受邀请广泛抓取以构建索引;开发者的爬虫目标明确地抓取特定字段,必须遵守网站设置的规则。
常见问题
Google 如何抓取网站?
Google 使用一个名为 Googlebot 的自动化爬虫。它通过链接和网站地图发现 URL,用 HTTP 请求获取每个页面,在需要时渲染页面(运行其 JavaScript),然后解析结果以提取文本、链接和元数据。该信息被写入 Google 的索引,搜索引擎读取该索引来回答查询。
抓取和索引有什么区别?
抓取是获取页面并读取其内容;索引是分析该内容并存储它以便日后检索。Googlebot 负责抓取,Google 的索引系统负责索引。页面必须先被抓取才能被索引,但被抓取并不保证会被索引。
什么是抓取预算?
抓取预算是 Google 在给定时期内从某个网站获取的页面数量的实际限制。它由你的服务器在不减速的情况下能处理多少抓取,以及 Google 想要你的页面的程度(基于其受欢迎程度和更新频率)共同决定。小型网站很少受到它的限制;非常大的网站可能会受到影响。
Googlebot 会运行 JavaScript 吗?
会。对于内容由客户端脚本构建的页面,Googlebot 会像 Chrome 那样渲染页面,在解析结果之前执行 JavaScript。渲染比普通获取代价更高,因此可能在稍后的过程中才发生,这意味着依赖脚本的内容可能需要更长时间才能被索引。
网站地图和 robots.txt 如何影响抓取?
网站地图是你希望 Google 了解的 URL 列表,对于展示新页面或深层页面很有用。robots.txt 文件告诉爬虫应该避开哪些路径。网站地图邀请抓取,robots.txt 限制抓取,但请注意 robots.txt 控制的是抓取而不是索引;让页面不出现在索引中需要在可抓取的页面上使用 noindex 指令。
抓取 Google 搜索结果与 Googlebot 所做的事情相同吗?
不完全相同。Googlebot 广泛抓取开放网络以构建通用索引,通常是在网站所有者的鼓励下进行的。抓取 Google 的结果页面意味着从 SERP 本身收集数据,这通常受 Google 条款限制,其反机器人系统也会主动防御此类行为。获取和解析的机制相似,但目标、权限和规则不同。
大规模爬取任何站点,无需与基础设施对抗。
Crawlbase 负责处理代理、指纹和 CAPTCHA,让你的团队专注于交付数据流水线,而非维护爬取管道。1,000 次请求免费,无需信用卡。
