跳到主要内容
← 全部指南

搜索引擎如何工作

已发布的页面与搜索结果之间隔着三个阶段。多数 SEO 问题恰好属于其中之一,指认对了阶段,就不会去修错的地方。

四个阶段,以及为什么要分清

搜索引擎会对页面执行四个彼此独立的步骤,其中一步成功并不代表下一步也会成功。发现阶段让 URL 被搜索引擎知晓;抓取阶段获取页面;索引阶段决定是否存储页面;排名阶段则针对每个查询决定是否展示。Google 的 AI 功能属于搜索的一部分,即使检索会扩展到相关搜索,仍然依赖相同的抓取、索引和展示资格基础。

凡是以「我的页面为什么不出现」开头的问题,实际上问的都是它停在了哪一阶段。答案不同,接下来该做的事就完全不同;而各阶段的失败从外面看是一模一样的:一个不出现的页面,无论是从未被发现、在抓取时被拦下、被判定不值得存,还是存下了却只是被别人压过,在结果页里看起来都毫无分别。

阶段发生了什么如何失败
发现网址通过链接或站点地图被知晓没有任何链接指向它,站点地图也未收录
抓取网址被取回并像浏览器那样渲染robots.txt 收回许可,或服务器返回错误
索引搜索引擎决定是否存下该页内容被判为重复、单薄或不值得保留
排名已存页面按查询意图评分页面已存,但存在更好的答案

发现:一个网址如何被知晓

谷歌表示,它每天新发现的页面里,绝大多数是通过链接进来的。一个正在抓取你某个页面的爬虫,会从那页的标记里取出网址并排入队列。这就使内部链接成为任何网站最主要的发现机制,而不是事后再补的一项优化。

站点地图是第二条路。它在链接最薄弱的地方最管用:规模极大的网站、外链稀少的全新网站,以及缺乏自然锚文本、以媒体为主的网站。谷歌把话说得很明白:列出一个网址既不保证抓取也不保证收录——那是递上去供其考虑的建议,不是一条会被逐个处理的队列。

实际的后果是:没有任何链接指向的页面,只能倚靠两种机制里较弱的那一种。站点地图里的一行不携带语境,它只说明某个网址存在,却对这个页面有什么用、与其他内容如何关联只字不提。而一条链接靠位置和锚文本,把这两样一并带上。

抓取:许可、处理能力与需求

抓取受两样东西约束,谷歌把它们分开命名。抓取容量上限是它在不压垮你服务器的前提下会开的并发连接数,会随你的响应时间和错误率自行调整。抓取需求则是它实际上想取多少,取决于站点规模、更新频率,以及它对质量的判断。

谷歌自己的指引是:绝大多数网站根本不必去想这件事。抓取预算真正成为议题,要到每周更新约一百万页以上的规模、每天变动一万页以上的规模,或者任何有很大比例网址卡在「已发现——尚未编入索引」的网站。低于这个量级,抓取慢几乎总是别的问题的症状。

在真正相关的场合,可用的杠杆都不起眼:合并重复内容;对永久移除的页面返回真正的 404 或 410,而不是软 404;缩短重定向链;改善服务器响应时间;支持条件请求,让未变更的页面能被廉价地应答。请留意这份清单里少了什么——noindex 不是抓取预算工具,因为爬虫必须先取回页面,才读得到那条指令。

渲染:那个被遗忘的阶段

取回与索引之间还夹着渲染。搜索引擎会像浏览器那样把页面大致执行一遍,然后索引渲染结果里的内容。只有在 JavaScript 跑完之后才出现的内容因此也能被索引——但这取决于那次执行是否成功,以及它所需的资源是否可被抓取。

robots.txt 里的一条规则,正是在这里造成远离其书写之处的破坏。屏蔽掉脚本或 API 路径,会让爬虫恰好取不到页面用来搭建内容的那些文件。HTML 取得好端端的,渲染出来几乎是空的,于是也就几乎空着进了索引。没有任何状态会说「已屏蔽」——页面本身从来没有被屏蔽过。

索引是一次判断,不是排队

对整条链路最常见的误读,就是把索引当成排队:被抓取、等叫号、进索引。它不是这么运作的。渲染之后,搜索引擎会判断这个页面是否值得存下,而这个判断可以是否定的。

Search Console 里「已抓取——尚未编入索引」说的正是这件事。没有东西坏掉,没有东西在拦,取回也成功了。页面被评估过,然后被搁置。由模板生成、彼此只差一个替换进去的名字或数字的近乎雷同的页面,是最常见的原因;重新提交改变不了任何事,因为那次判断所依据的输入并没有变。

排名和 Google 的 AI 功能具有相同的基础

对于给定查询,Google 搜索会检索并排序相关内容。AI Overviews 和 AI Mode 也可能使用 query fan-out,在生成带有支持链接的回答之前,围绕子主题和数据源执行多个相关搜索。

结论很简单:页面能否出现在 Google 的 AI 搜索功能中,仍取决于常规 Google 搜索的基础资格。Google 表示没有额外的技术要求,也不需要专门的 AI 标记;必须允许抓取,重要内容应可被索引并以文本形式提供,nosnippet 等预览控制可以限制 AI 功能中展示的内容。

在你自己的网站上试试

问答

在 robots.txt 里屏蔽会把页面从谷歌移除吗?

不会。robots.txt 拦的是取回,不是索引。一个被屏蔽却有其他网站链接指向的网址,依然可能被索引并以无描述的形式出现,因为爬虫始终没被允许读取那条本可将它排除的 noindex。想让页面不出现在结果里,就放行抓取并返回 noindex,或者要求身份验证。

索引应该要多久?

没有可保证的时间窗。新页面可能几小时就进索引,也可能被搁上几周;谷歌明确说过,被抓取并不承诺被收录。如果同一站点上同类页面很快就进去了,唯独某个页面几周还没进索引,那就把它当作对这个页面的判断,而不是延迟。

我需要担心抓取预算吗?

几乎可以肯定不需要。谷歌给的量级是每周更新约一百万页,或每天变动一万页。低于这个量级,迟迟不出现的页面通常是卡在索引那一步,而不是在等抓取容量。

用 JavaScript 生成的内容能被索引吗?

能,因为搜索引擎会先渲染页面再索引。风险不在 JavaScript 本身,而在它的依赖:如果 robots.txt 屏蔽了页面所需的脚本或接口,它就会渲染成空的、空着进索引,而且没有任何状态会点出原因。