Skip to content

第 2 章 搜索引擎怎样发现和处理一个页面 ​

2.1 把搜索过程当作一串有证据的状态 ​

网站上线后,你可以在自己的浏览器中打开它,但搜索引擎还未必知道这个地址。即使搜索引擎知道地址,也可能尚未访问;访问成功不代表正文被正确理解;正文被理解不代表进入索引;进入索引也不代表在你关心的查询中得到展现。学完本章,你应能把“搜不到”拆成一个具体问题,并知道该找哪一种证据。

Google 官方把搜索概括为抓取、索引和提供搜索结果三个阶段。[A07] 为便于排错,本书进一步拆出发现、抓取、渲染、索引、匹配与排名、结果展示六个观察节点。这个拆分是教学模型,不意味着 Google 的内部系统按一条严格串行的流水线执行。真实系统可以有队列、缓存、重试和并行处理,同一个页面也会被反复重新访问与评估。

可以把一个页面的工作记录写成六个问题:地址从哪里被发现;上次请求得到了什么;处理页面后看到了什么;它以哪个版本进入索引;它适合回答哪些查询;用户实际看到了什么结果。每个问题都有自己的时间戳。最常见的误判,是把今天浏览器看到的页面拿来解释几天前抓取的数据,或者用一次搜索结果推断整个网站的索引状态。

对会编程的读者,这类似排查分布式系统。最终结果错误,不能立即认定数据库有问题;你需要检查输入、网络请求、处理中间态、存储和返回结果。SEO 的难处是你不能查看搜索引擎全部内部状态,因此必须区分能够观测的事实与根据现象提出的假设。一个好诊断不要求知道算法所有细节,但要求每一步都能说明为什么继续往下查。

2.2 发现地址只是得到候选输入 ​

统一资源定位符,英文 Uniform Resource Locator,简称 URL,是网页或其他网络资源的地址。搜索引擎必须先知道某个 URL,才有可能尝试访问它。常见发现线索包括已知页面上的链接、站内导航、外部网站链接,以及网站地图提供的 URL 列表。[A07]

这里要区分“页面存在”和“页面可被走到”。假设你的个人网站新增了一篇文章,地址可以直接输入,但首页、分类页和相关文章都没有链接到它,也没有通过其他路径告知搜索引擎。文章已经部署,却缺少自然发现路径。这类页面常被称为孤立页面,英文 Orphan Page。它不一定永远无法被发现,但对用户和维护者同样难以找到。

网站地图,英文 Sitemap,是提供站点重要 URL 等信息的文件。Google 说明它能够帮助发现地址,但不能保证文件中所有页面都会被抓取和索引。[A14] 因此,网站地图更像你提交的一份目录建议,而不是一张搜索引擎必须处理的工单。反复提交相同目录也不能替代修复内容、访问和结构问题。

站内链接还有一个经常被前端实现掩盖的差别:用户能点击,不代表链接能被稳定提取。一个只绑定脚本事件的卡片,可能在视觉上像链接,却没有明确的目标地址。Google 的链接最佳实践建议使用带 href 属性的 HTML 锚点,并指出只有脚本事件的元素无法保证被正常提取。[A16] 本章不展开代码写法,读者只需理解验收标准:重要页面之间应存在真实、清楚、可请求的连接。

为什么不能让一个网站生成所有可能的地址,然后等待搜索引擎挑选?因为地址本身可能没有独立价值。筛选、排序、日历和搜索参数组合可以产生巨量 URL,而其中多数只是同一组内容的排列变化。对一个仅有几十个真实产品的商店,制造数百万候选地址并不会创造数百万种需求。资源治理的细节在技术章节展开,但在基础层面,应先问每一类公开地址是否对应一个值得单独访问的页面。

2.3 抓取是一次受条件约束的请求 ​

抓取,英文 Crawling,是搜索引擎程序请求网页及相关资源的过程。Googlebot 是 Google 用于搜索的抓取程序名称之一。搜索引擎还会有用于不同产品的其他抓取器和获取工具,不能把日志里所有带 Google 字样的请求都当作同一种行为。[A08]

一次抓取首先依赖网络和服务器。域名要能解析,连接要能建立,服务器需要响应,请求不能被登录要求或不恰当的访问控制挡住。然后才谈页面正文。一个人在公司网络里登录后能打开管理页面,并不能说明公开搜索抓取器能够访问它。网站所有者经常拥有缓存、会话和权限,这些条件恰好会掩盖普通访问者看到的故障。

HTTP 状态码是服务器对请求结果的机器可读说明。二百类通常表示成功,三百类与跳转有关,四百类常表示请求的资源不可用,五百类通常表示服务器无法正常处理。本章使用类别帮助理解,具体状态码差异与处理策略在技术章节详述。不要把“浏览器最终显示了文字”当成状态正确的证据,因为错误页面也可能返回成功状态,真实文章也可能被错误地标成不存在。

Google 的最低技术要求包括不阻止 Googlebot、页面正常工作并返回成功响应,以及具有可索引内容;满足这些条件仍不保证进入索引。[A15] 这段话的重点在“资格”。就像一份申请材料符合提交格式,不意味着已经通过评审。技术可访问性为后续处理创造条件,它本身不证明页面有必要被搜索结果推荐。

robots.txt 是位于站点约定位置的抓取规则文件,用于向遵守协议的抓取程序说明访问范围。它不是身份验证系统,也不是保密手段。Google 文档说明,被 robots.txt 阻止抓取的 URL 仍可能因其他链接线索出现在结果中。[A11] 如果页面含有内部资料、客户信息或密码,正确方向是访问控制和安全保护,不能靠搜索规则维持秘密。

还应避免把抓取频率当作质量奖章。一个更新频繁的大型网站和一个稳定的小型说明站,合理访问节奏可能不同。请求数量增加也可能来自重复参数、错误跳转或者资源浪费。更有用的问题是:重要的新内容是否能被发现和访问,关键更新是否被重新获取,服务器能否持续稳定提供它们。

2.4 渲染解释了浏览器与抓取结果为什么会不同 ​

渲染,英文 Rendering,是把文档、样式和脚本等资源处理成页面表现与结构的过程。对现代网站来说,服务器返回的初始 HTML 与用户最后看到的内容可能差别很大。初始文档可能只有一个应用容器,随后由 JavaScript 请求接口,再把产品说明插入页面。

Google 的 JavaScript 文档把相关处理划分为抓取、渲染和索引,并说明 Google 使用浏览器引擎处理脚本,渲染可能排队;被阻止的页面或资源会影响这一过程。[A09] 这足以纠正两个相反误区:不能说 Google 完全不处理 JavaScript,也不能认为任何浏览器里能运行的功能都必然被搜索系统完整处理。

设想一个工具页面。开发者打开它时已经登录,浏览器从本地存储读取设置,接口返回个人工作区信息,于是页面上有功能清单和示例。一个没有登录状态的访问者却只得到“请进入控制台”。如果你原本希望这是一张公开产品介绍页,问题在信息提供方式,而不在标题里少了一个关键词。公共说明应有明确的公共入口,私人结果仍应保持私人。

再看一个更隐蔽的例子:初始 HTML 写着“正在加载”,正文依赖第三方接口;接口偶尔超时,但开发者测试时总能命中缓存。搜索处理某次页面时可能只见到不完整内容。排查时要分开保存初始响应、处理后的页面内容和资源失败记录,然后判断正文究竟出现在哪一步。只看一张本机截图,会遗漏请求条件和加载过程。

会编程的人有时热衷于用复杂框架证明工程能力,但搜索友好与框架流行度没有直接等号。对一份长期稳定的使用指南,尽早提供完整可读正文通常可以减少对后续请求的依赖。交互工具则可能确实需要客户端逻辑。选择应基于用户任务和可维护性,技术章节会进一步讨论服务端渲染、静态生成和客户端渲染的取舍;本章只要求你认识到这些选择改变了内容被获取的路径。

2.5 索引是一种选择而非网页备份 ​

索引,英文 Indexing,是搜索引擎分析、组织和保留内容信息,以便随后检索的过程。日常说“收录”通常是在说进入索引。搜索引擎并非承诺备份互联网每一个可访问页面,也不会因为一个网站生成了更多地址,就必须给予它同比例的索引空间。

索引过程中会面对重复内容。例如同一个商品可以通过标准路径、追踪参数路径和旧分类路径访问,用户看到的核心商品信息一样。搜索引擎需要判断这些地址之间的关系,选择代表版本。规范网址,英文 Canonical URL,指用于代表一组重复或高度相似内容的版本。Google 的规范化文档说明,重定向、canonical 声明与网站地图都可以表达偏好,但它们的作用和强度不同。[A10]

理解规范化的最好方法不是背标签,而是问:用户需要几个不同结果?一篇文章的打印版和普通版通常不需要在同一个搜索结果中竞争。一个商品的不同语言说明可能面对不同用户,则需要结合语言与地区处理。一个只改变排序的列表,与一个确实改变选购任务的分类,是否应作为独立页面,也要根据内容和使用目的判断,不能一律把所有相似 URL 都删掉。

与规范化不同,noindex 是表达不应索引某个页面的规则。Google 需要能够抓取页面并读取这条规则,才有机会执行它;如果同时用 robots.txt 阻止访问,就可能无法看见 noindex。[A12] 这说明配置不能只逐项检查“有没有”,还必须检查规则之间是否相互矛盾。

一个已抓取但未进入索引的页面,不足以单独证明它受到了惩罚。它可能处于尚未完成的处理状态,也可能内容与其他页面过于相近,或者没有足够独立的用途。不要立即寻找所谓提升权重的捷径。先确认这是你确实希望进入搜索的页面,再查访问、可读性、声明和同类内容。若它本来就是账户设置、内部搜索或者暂时生成的结果页,不进入索引可能恰好符合预期。

交互实验:抓取与索引信号 ​

SEO 实验室 · 抓取与索引信号

配置了,不等于爬虫读到了

先禁止抓取,再加 noindex,能让页面从搜索结果消失吗?亲手改一项设置,沿着证据找答案。

学习目标:分清页面设置、爬虫读到的信号和真实索引状态。这是有限教学案例,不会请求真实网站,也不预测收录。

01 选择一个起点

切换案例会重新演练

标签写了,但抓取入口被挡住。

只放开抓取,观察 noindex 能否被读到。

正常公开页面,也不等于已经收录。

声明原文偏好,最终选择仍待验证。

02 输入 · 页面设置

这些是你配置的内容,不代表爬虫已经取得。

“对应原文”假设两页确实重复,目标正常公开且没有 noindex。这里不比较两页质量。

03 过程 · 逐步取证

每次只推进一步,看哪些信息真正变成了证据。

步骤 0 / 4准备开始
  1. 设置当前
  2. 发现待检查
  3. 抓取尝试待检查
  4. 读取信号待检查
  5. 判断边界待检查

先预测:你配置的信号,爬虫这次能读到哪些?逐步按钮只推进这个假设案例,不请求任何真实网站。

到这一步,实际取得了什么?

未读取的设置,不计入已知证据。

已知 URL
尚未进入发现步骤
抓取许可
尚未检查
实际取得的 HTTP 状态
尚未请求
noindex
尚未检查
canonical
尚未检查
Google 选定的规范版本
未知,本实验不作选择
真实索引状态
未知,需核对实际记录

04 结果 · 证据能说明什么

走完取证步骤后,这里会给出本次判断,以及还需要核对的证据。

记住这三个区别

robots.txt 管抓取;noindex 要先被读到,才表达排除索引的要求;canonical 为重复页面表达首选地址。正常返回 200、没有禁止标记,仍不保证收录。

动手比较:只改一项,为什么结果就变了?
  1. 只放开抓取。先用默认“拦抓+noindex”走到最后,再把抓取许可改成“允许”。noindex 没变,变化的是爬虫终于能读到它。修改设置会暂停播放并从头开始。
  2. 比较两个标签。选“重复版本指向原文”,走到最后。规范版本为什么仍是未知?因为 canonical 只是偏好。再勾选 noindex,观察两种不同目的的设置。
  3. 区分两类错误。把 HTTP 从 200 改成 503,再改成 404。暂时服务故障与资源不存在,需要不同的修复证据。
前提与不模拟的部分

假设 URL 已被发现,robots.txt 文件有效且适用规则已经解析,允许抓取时安排这一次假设请求。200 表示真实、完整、受支持格式的公开 HTML,不是软 404。noindex 与 canonical 均在有效 HTML 中,不依赖 JavaScript。

步骤顺序只用于解释依赖,不代表搜索引擎内部严格串行运行。本实验不解析 robots 路径、请求头冲突、重定向、登录、缓存、渲染、站点地图、抓取预算、内容质量或历史状态。真实系统可能重试、并行或使用旧记录;“已读取”只描述案例,不代表线上验证。

robots.txt 与 noindex 都不保护私人内容。需要保密时,应先设置身份验证与访问控制,不应为了让爬虫读标签而公开敏感资料。

机制依据:Google 官方文档

文档核对:2026-10-14。步骤与预设为教学案例,不是 Google 内部算法。

2.6 排名和结果展示取决于具体查询 ​

一页进入索引,只说明它有机会参与后续检索。用户提出问题后,搜索系统还要判断哪些页面与请求相关,哪些更有帮助,以及怎样组织结果。一个关于 Go 日志字段处理的页面,可能适合回答“如何隐藏日志中的邮箱”,却不适合回答“附近电脑维修”。网站质量不错,并不会让其中每页对所有查询都有用。

排名,英文 Ranking,通常指结果在特定查询和环境下的相对排序。因此,“我的网站排名第几”不是一个完整问题。至少还需要查询、时间、地区、语言、设备和结果类型。它们不必全部精确控制才能开展日常工作,但需要记录足够上下文,以免把不同条件下的观察混为一谈。

结果展示又多了一层转换。搜索引擎可能根据页面与查询生成标题链接、摘要或其他展示形式。你的网页标题是提供给系统和用户的线索,但不是一份保证原样刊登的广告文案。标题和摘要的具体写法在后续内容章节展开。此处要记住:索引中的内容、网页上现在的内容、搜索结果中展示的内容,是相关但不完全相同的三个对象。

假设一个商品页面已进入索引,用户搜索极其宽泛的“电脑”。它没有出现,并不意味着索引失败。可能是它与宽泛查询的意图不匹配,或其他页面更适合。若用户搜索完整型号仍找不到,才更值得进一步看页面是否明确表达型号、是否被归到另一规范版本,以及最近的索引记录。排查路径应该由证据收窄,而不是从一个宽泛查询直接跳到“整站被打压”。

2.7 用两种时间视角读 URL 检查 ​

Search Console 的 URL 检查提供索引记录与实时测试等信息。官方说明,索引状态基于 Google 最近处理的版本,并非对当前线上页面的即时检查;实时测试也不能预测最终选定的规范版本或保证结果展示。[A13] 这两个限制对诊断非常关键。

可以把索引记录理解为历史观测,把实时测试理解为当前条件下的一次检查。历史记录显示页面被禁止索引,而你今天已经移除了规则,这两者并不矛盾。你需要确认当前修改正确,并等待新的处理记录,而不是反复撤销与重做。同样,实时检查通过,但历史索引尚未改变,也不能说明工具失灵。

实际操作时,在你有权查看、且覆盖目标 URL 的 Search Console 资源中输入完整地址。先保存索引视图里的状态、最近抓取时间和 Google 选定的规范网址;再点“测试实际网址”(Test live URL),检查当前抓取与索引许可。测试成功后,打开“查看测试的网页”(View tested page)检查 HTML、截图和资源错误。截图只代表这次实时测试,不是历史索引版本的截图。[A13]

诊断记录建议包含目标 URL、预期用途、观察时间、最近抓取时间、索引状态、选定规范版本、当前响应,以及下一步验证方式。不必一开始构建庞大的监控平台;一份清楚的记录就能避免团队来回争论“我这里能打开”。如果不同人测试得到不同结果,再去核查地区、登录、设备、缓存或访问规则等条件。

“请求索引”应该被看作向系统提出重新处理请求,而不是发布按钮的第二次点击。页面没改、问题没修、内容也没有新增价值时,重复请求不会替代诊断。你应先知道自己要求重新处理的是什么,以及重新处理以后期望哪个状态改变。

2.8 一次从零开始的完整诊断 ​

下面的故障记录为原创假设,不代表真实网站实测。某开发者发布了“Go 服务日志分享前检查清单”,两周后搜索标题没有找到页面。他认为应该立即购买外部链接。现在按本章模型重新检查。

第一步确定目标。该页面是公开技术指南,确实希望被搜索发现,内容也没有涉及私人日志。第二步查发现路径。首页没有链接,但文档目录中有清楚的入口,网站地图中也有这个地址。于是“完全缺少发现线索”不再是当前最强假设,虽然仍不能据此保证已被发现。

第三步看抓取记录。假设 URL 检查显示 Google 已经访问,并收到成功响应。此时再围绕域名能否连接花大量时间,就偏离了证据。第四步运行实时测试并查看测试页面,发现主标题存在,正文却只有“登录后阅读”。这证明当前公开访问不完整,不能据此还原过去每次抓取的内容;若历史抓取 HTML 可用,再与它比较。开发者本机登录后能看到全文,因此此前从未发现公开访问限制。

第五步确认这是产品决策还是实现错误。如果团队本来只想向付费客户提供指南,那么不应为了搜索擅自公开内容。可以保留付费正文,提供诚实的公开介绍,并进一步研究适用政策。如果本来就是免费的入门资料,则应修复访问方式。SEO 诊断不能越过内容权限和商业决定。

假设团队选择公开指南,并完成修复。实时测试现在能看到正文,但索引报告仍显示旧状态。合理动作是保留修改记录、请求重新处理并在之后检查新的抓取记录。若新版本已经被索引却仍没有目标查询展现,再进入相关性与竞争判断。整个过程中,购买链接既不是定位故障的前提,也不能替代修复未公开的正文。

另一个假设例子来自电商。一个商品的标准 URL 未出现在索引里,带追踪参数的 URL 却被选为代表版本。这不必然是内容质量问题,更可能需要整理内部链接、规范声明和跳转所表达的偏好。先把问题归类,才知道应该找开发、编辑还是商品负责人。

2.9 怎样决定排查先后顺序 ​

先修会阻断后续环节的问题。重要页面不能公开访问时,讨论摘要措辞的收益有限;正文没有正确提供时,研究关键词密度也没有意义。再看影响范围。一处模板错误如果影响全部产品页,通常比一篇低访问量文章的局部排版更值得优先处理。但影响范围不能只看 URL 数量,也要看这些页面对业务的重要性。

随后判断证据是否足够。日志里没看到 Googlebot,可能是没有抓取,也可能是日志保留期太短、记录位置不完整或者身份验证方法不正确。工具没有显示某条查询,也不等于没有任何人搜索。每个观测工具都有边界,记录“没有证据”时不要自动写成“已经证明不存在”。

最后给修复设置验收。一次访问修复应由正常响应与内容可见性来验收;规范化问题需要后续处理结果支持;相关性改善则要在合理时间与相近条件下观察。不同问题的验收速度不同,团队不能用同一个“明天排名有没有涨”的标准评价所有工程工作。

2.10 练习与参考解答 ​

练习一:页面同时被 robots.txt 阻止抓取,并带有 noindex。网站负责人说这样“双重保险”一定能从搜索中消失。这个推理哪里有问题?

参考解答:两条规则作用于不同环节。阻止抓取可能使搜索引擎看不到 noindex,URL 仍可能因其他线索出现。若涉及隐私,应先实施真正的访问控制;若只是公开内容不应被索引,应采用能够被正确读取的索引控制,并验证后续状态。

练习二:实时 URL 测试通过,页面却没有搜索流量。能否认定 Google 出错?

参考解答:不能。实时测试只支持当前部分技术条件,不保证已经被索引、最终规范版本就是该 URL,也不保证对目标查询有竞争力。先检查索引记录,再看查询匹配与实际展现,避免跳过中间状态。

练习三:开发者创建了一千个地区页面,页面只有城市名称不同,全部放进网站地图。是否应该期待一千页都获得独立展现?

参考解答:不应。目录通知不能创造独立的用户用途。先核查是否真实服务这些地区、页面是否提供差异化信息,以及用户是否需要这样的独立页面。批量生成能力不能替代内容与业务判断。

2.11 本章执行清单 ​

  • 选出真正希望进入搜索的重要页面,而不是要求每个地址都收录。
  • 为这些页面确认可发现路径,并核对真实链接目标。
  • 分开检查网络访问、响应状态、初始内容与渲染内容。
  • 识别抓取控制、索引控制和规范化各自解决的问题。
  • 阅读历史索引记录时保留时间背景,不把它当实时状态。
  • 把每个问题写成可验证的假设,并指定修复后的验收证据。
  • 只有在前面环节成立后,才把排查重心转向相关性、排名与展示。

本章参考来源 ​

[A07] In-depth guide to how Google Search works | https://developers.google.com/search/docs/fundamentals/how-search-works | 访问 2026-10-13 | 支持搜索阶段划分与地址发现基本机制。

[A08] Google Crawler User Agent Overview | https://developers.google.com/crawling/docs/crawlers-fetchers/overview-google-crawlers | 访问 2026-10-13 | 支持 Google 抓取器与获取工具不应一概而论;未把具体容量限制作为本章结论。

[A09] Understand JavaScript SEO Basics | https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics | 访问 2026-10-13 | 支持抓取、渲染、索引及渲染队列的区分。

[A10] How to Specify a Canonical with rel canonical and Other Methods | https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls | 访问 2026-10-13 | 支持规范版本与不同偏好信号的基本概念。

[A11] Robots txt Introduction and Guide | https://developers.google.com/search/docs/crawling-indexing/robots/intro | 访问 2026-10-13 | 支持 robots.txt 不能充当保密或可靠删除机制。

[A12] Block Search Indexing with noindex | https://developers.google.com/search/docs/crawling-indexing/block-indexing | 访问 2026-10-13 | 支持 noindex 需要可被抓取和读取。

[A13] URL Inspection tool | https://support.google.com/webmasters/answer/9012289?hl=en | 访问 2026-10-13 | 支持索引记录与实时测试边界。

[A14] What Is a Sitemap | https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview | 访问 2026-10-13 | 支持网站地图的发现作用及非保证性质。

[A15] Google Search Technical Requirements | https://developers.google.com/search/docs/essentials/technical | 访问 2026-10-13 | 支持最低技术资格与实际索引的区别。

[A16] SEO Link Best Practices for Google | https://developers.google.com/search/docs/crawling-indexing/links-crawlable | 访问 2026-10-13 | 支持可提取链接的基本要求。

保留各书来源与许可 · 示例运行条件以正文为准