四个阶段,以及为什么要分清
搜索引擎会对页面执行四个彼此独立的步骤,其中一步成功并不代表下一步也会成功。发现阶段让 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 功能中展示的内容。