概览

答案引擎的内容规则

答案引擎从不展示你的页面。它展示页面中的一段内容,或根据其中内容重新组织出的一句话,而读者就停留在那里。因此,你撰写的单位是章节,而不是文档——以下规则正是 Docsbook 应用于章节的规则,每条规则都说明了其作用机制及确立它的来源。

本页面不是以下三种内容。它不是标记层——那是结构化答案。它也不是在你已经被检索到之后,提高被引用概率的因素列表——那是引用信号,其中包含经过测量的效果大小以及不应采取的做法。本页面介绍的是写作规则,并且针对每条规则,诚实回答供应商提出规则时唯一重要的问题:你的产品实际上会这样做,还是只是在告诉我应该这样做?

三个执行标签的含义#

标签 含义 违反规则时会发生什么
自动执行 由代码执行,或拒绝生成违反该规则的输出 无法通过 Docsbook 违反该规则;其行为不可配置
检查并报告 代码对其进行测量并显示结果 不会自动发生任何变化;你会得到一条发现结果,并附有相关证据
仅提供建议 写作代理在起草内容时遵循的指令 之后不会对其进行任何验证,包括由人工编写页面时也是如此

规则一览#

# 规则 执行方式
1 一页只回答一个问题,并采用该问题所需的形式 仅作建议
2 将标题写成读者输入的问题 仅作建议
3 每个章节在没有上文的情况下都必须可读 自动强制执行
4 标题层级是一份契约,而不是样式选择 仅作建议
5 标题文本拥有其锚点——绝不要手动编写锚点 自动强制执行
6 答案必须存在于字节中,在任何 JavaScript 运行之前 检查并报告
7 声明中的每个数字都要指明产生它的对象 自动强制执行
8 价格、限制和版本都必须复制,绝不能推断 自动强制执行(生成的定价页面)
9 标题和描述需要撰写,而不是从 H1 中抓取 自动强制执行
10 没有任何链接指向的页面,也不会被任何内容检索到 检查并报告

规则 1 — 一页回答一项任务,采用该任务所需的形态#

教程、解释、操作指南、参考表和常见问题解答是五种不同的形态,将它们混在一起会导致页面无法完整回答任何问题。当 Docsbook 生成网站时,它会将它们写成独立的页面,并为每页提供独立的概要:解释页面使用名词短语标题且不包含命令,操作指南页面使用“如何完成特定目标”形式的标题,并包含面向目标的编号步骤且不提供背景理论,参考页面则为每个分组提供一个表格。

它对回答代理的影响。引擎会将问题类型与段落类型进行匹配。概念性问题在各节都是祈使步骤的页面中检索效果很差,而程序性问题在解释原因的散文中检索效果也很差。在 Docsbook 中,操作指南形态还有第二个机械层面的影响:以“How to”开头、后跟三个或更多步骤的编号列表的标题,正是 HowTo 检测器读取的内容,因此正确编写这种形态也会生成相应的标记——参见结构化答案

证据。Google 的有用内容自我评估会询问“主标题或页面标题是否提供了对内容具有描述性且有帮助的摘要”,并分别询问其是否“避免夸大或具有煽动性”(Google,创建有用内容)。通过页面标题明确一项任务,可以从设计上同时满足这两点。将内容划分为五种形态是 Docsbook 自身的实践;没有公开来源对其进行衡量。

仅供建议。这些形态存在于生成器所遵循的页面概要中。没有任何机制会检查手写页面是否符合这些形态。

规则 2——将标题写成读者输入的问题#

不要写“速率限制”,而要写“达到速率限制时会发生什么?”。使用读者的措辞,而不是子系统的内部名词。

这对回答代理的作用。 它将查询文本放入文档中。检索会对问题与段落之间的相似度进行评分,而提高该分数最便宜的方法,就是让段落包含该问题。这与文档扩展有意利用的效果相同:Nogueira 等人预测“针对给定文档将会发出的查询”,并将这些查询附加到文档中,报告称“在两个检索任务中达到了最先进水平”,仅靠检索,其效果就接近成本高得多的神经重排序器(arXiv 1904.08375)。问题式标题就是这种扩展,由已经知道该小节回答哪个问题的人来撰写。在 Docsbook 中,它还是检测器的输入——以问号结尾的问题式 ### 标题会在 FAQPage 标记中变成一个 Question

证据。 arXiv 1904.08375,以及上述机制。请注意,没有任何来源支持以下说法:没有已发表的资料表明,问题式标题能让你获得精选摘要。当被问及如何将页面标记为精选摘要时,Google 的回答是:“你无法做到。Google 系统会判断某个页面是否适合作为用户搜索请求的精选摘要;如果适合,就会将其提升为精选摘要”(Google,精选摘要)。

仅供参考。 撰写代理会采用这种方式来表述标题;你所写的标题不会被任何程序重写。

规则 3——每个部分都必须在没有任何上文时仍可读#

一个以“如上所述,默认值为 30 秒”开头的部分,一旦与它所指向的段落分离,就会变得无法使用——而它在第一次检索时就会被分离。

它对回答代理的影响。 Docsbook 默认以标题粒度为单位索引文档:每个部分对应一个嵌入单元,而不是每个页面对应一个。每个单元的嵌入文本都会加上该部分的完整标题面包屑——Billing > Refunds > Limits——正是因为名为“限制”的部分,在 Webhooks 下与在 AI 聊天下含义不同,而向量必须携带这一信息。每个单元上限为6,000 个字符;超过该长度的部分会被截断,因此埋藏在超长部分末尾的事实根本不会进入向量。在行粒度下,长度不超过 20 个字符的段落块会作为噪声被丢弃。

证据。 检索粒度是一个可测量的变量,而更细且自包含的单元表现更好。Chen 等人将文档、段落和句子单元与“命题”进行比较——“文本中的原子表达式,每个表达式都封装一个独立的事实,并以简洁、自包含的自然语言形式呈现”——并报告称,“使用命题等细粒度单元对语料库进行索引,在检索任务中的表现显著优于段落级单元”(Dense X Retrieval,arXiv 2312.06648)。同一发现的供应商侧版本,以及由未明确说明自身主题的散文所产生的失败模式,见引用信号

自动强制执行——针对 Docsbook 负责的那一半。面包屑前缀、单元边界和上限会应用于每个页面,且没有可更改它们的设置。你负责的那一半是散文内容:你未明确说明的主题,任何机制都无法补救。

规则 4 — 标题级别是一份契约,而不是样式选择#

使用 H2 表示一个章节,使用 H3 表示其中的问题,不要为了获得更小的字体而跳过级别。

这对回答代理意味着什么。 有两点。标题树决定了页面如何被划分为规则 3 中的单元,因此跳过级别会将章节置于错误的父级之下,并为其向量生成错误的面包屑路径。而 Docsbook 的 FAQ 检测器只识别一种结构:H2 章节,其 H3 子项为问题;或者任何以问号结尾的 H3。使用 H3 章节和 H4 问题编写的 FAQ 完全不会生成标记,而且是静默发生的——这是我们最常见的 AEO 失败。

依据。“标题传达页面内容的组织结构。网页浏览器、插件和辅助技术可以使用标题来提供页面内导航”,以及“跳过标题级别可能会造成混淆,应尽可能避免:确保 <h2> 后面不要直接跟着 <h4>”(W3C WAI,标题)。

仅供建议,而且这确实存在一个缺口:Docsbook 不会提醒你跳过了级别,也不会提醒你 FAQ 章节没有匹配到任何内容。请使用验证器进行验证——参见结构化答案

规则 5 — 标题文本拥有其锚点;绝不要手动编写锚点#

深层链接、搜索结果和 AI 引用都会指向 page#anchor。所有这些锚点都由与渲染器使用的同一个库根据标题文本派生而来,不允许任何其他代码自行猜测锚点。

这对回答代理的影响。 锚点不存在的引用会将读者带到长页面的顶部,而原本承诺的是某个特定章节。系统不会抛出任何错误;只是链接错了。Docsbook 通过调用 github-slugger 计算锚点,而页面渲染时 rehype-slug 使用的正是该方法,因此预先计算的锚点和渲染后的 id 不可能不一致。在此逻辑集中处理之前,我们曾用本仓库自己的语料库对手写 slug 生成器进行测量:21,827 个标题中有 1,386 个——占 6.3%——生成的锚点不是页面上的 id,其中 263 个最终只剩下破折号。 这些不匹配中有 314 个出现在纯 ASCII 标题中(“Edge cases & errors” 会将一个分隔符折叠得过多);其余则出现在非拉丁文字中,其中一个俄语网站的每个标题都折叠成了同一个失效锚点。

证据。 上述测量来自本仓库,而不是已发表的研究;请将其视为我们自己的数据。它没有外部来源,也不需要外部来源——规则是:字符串有其所属者,就应当向该所属者查询,而不是重新推导。

自动强制执行。 所有使用方的锚点都在同一处计算。

规则 6 — 答案必须存在于字节中,在任何 JavaScript 运行之前#

如果正文只在浏览器执行脚本后才出现,那么获取该 URL 的助手收到的只是一个空壳。

这对回答代理的影响。 完全没有影响——这正是问题所在。由于 Markdown 本身没有任何问题,任何读取 Markdown 的检查都无法发现这一故障。Docsbook 的 audit_geo 会在没有 JavaScript 引擎的情况下获取抽样页面,并检查在去除标签后正文是否仍至少保留 200 个单词;低于这一数量时,页面会被报告为严重问题,理由是导航标签、Cookie 横幅和标题标签本身就可能达到较低的门槛。它还会针对指定的助手用户代理运行相同的检查,因此,如果 CDN 向浏览器提供一个页面,却向助手提供一个挑战页面,也会作为单独的问题被发现。

证据。 Google 针对 AI 概览和 AI 模式的指导明确指出,修复方式是提供文本内容,而不是标记:“确保重要内容以文本形式提供”,以及“确保 robots.txt 允许抓取”——同一份文档中还写道:“无需创建新的机器可读文件、AI 文本文件或标记,即可出现在这些功能中”(Google,AI 功能)。Perplexity 将 Perplexity-User 描述为:当用户提出问题时访问页面,以便“帮助提供准确的回答,并在其响应中包含指向该页面的链接”(Perplexity,机器人)——这是一种不包含浏览器的抓取。

已检查并报告。 Docsbook 自身的页面采用服务器端渲染,因此由 Docsbook 托管的网站天然能够通过此项检查;该检查是为其审计的网站而存在的。

规则 7——主张中的每个数字都指明了产生它的对象#

包含数字的句子必须能够追溯到产生该数字的观察结果,而不是某个看似合理的记忆。

它对回答代理的作用。 错误的数字是唯一一种能够在修正后继续存在的错误:助手重复它,而这种重复比你的编辑存在得更久。Docsbook 会对其代理工具输出的所有内容执行这一规则。每个发现都带有 evidence_refs,指向命名的证据条目;契约验证器会扫描发现自身的文本中的数字:任何未出现在其所引用证据中的数字都属于违规,载荷会被发回模型进行修复,而不是返回给你。唯一的例外是单个数字 0–9,以及 10 和 100——它们是普通行文中的序数和较小计数。评分由基于所收集证据的普通代码完成,而不是由模型完成,因为语言模型写出的 0–100 与同一模型下周写出的相同数字并不具有可比性。

证据。 Google 的有用内容问题会询问:“内容是否以一种让你愿意信任它的方式提供信息,例如清晰的来源、对相关专业知识的证据”(Google,创建有用的内容)。经过测量的版本——添加统计数据并引用来源会提高生成答案中归因于你的内容比例——位于引用信号页面,该页面负责记录这些影响大小。

自动执行,针对代理输出。你自行输入页面的数字不会经过任何检查。

规则 8 — 价格、限制和版本均为复制而来,绝不推断#

生成页面上的每个价格和每项明确说明的限制,都逐字复制自本次运行中读取的源材料。如果源材料中没有某个方案的价格,则写作“联系销售”。

它对回答代理的影响。定价是关于产品被引用次数最多的信息,也是读者会据此采取行动的信息。一旦助手重复了一个推断出的“典型”价格,它与真实价格就无法区分。Docsbook 的生成器会在任务说明中贯彻这一规则,而匿名流水线更进一步:如果抓取过程中完全没有发现任何价格,则不会编写定价页面,因为带有猜测数字的定价页面不如没有定价页面。

证据。Google 的结构化数据政策要求标记“真实反映页面内容”,并禁止标记读者不可见的内容(Google,结构化数据指南);Google 关于 AI 功能的指南要求“结构化数据与页面上的可见文本相匹配”(Google,AI 功能)。两者都没有提及虚构价格——这部分是 Docsbook 自己的规则,我们也明确将其表述为自身规则。

对于生成的定价页面,会自动强制执行此规则:页面会被舍弃,而不是进行猜测。在其他地方,它是任务说明中的一项指示。

规则 9 — 标题和描述是编写的,而不是从 H1 抓取的#

前置元数据中的 title 优先于正文 H1,而正文 H1 优先于文件名。前置元数据中的 description 优先于正文的第一段。

它对回答代理的影响。 标题和描述是机器在读取其他内容之前读取的两个字符串,而两者都有一种在页面上不可见的失效模式。从 H1 推导标题意味着,作者编辑前置元数据来控制搜索结果时不会产生任何变化;同时,这还会让品牌名称被追加两次,在搜索结果的一行中有三分之一的空间被重复内容占用。从正文推导描述则意味着小部件标记和卡片列表的残余内容会泄漏到读者看到的内容中。Docsbook 在一个位置固定了优先级,并按单词边界截断;如果存在句末,则在句末截断:<meta name="description">160 个字符,Open Graph 和 JSON-LD description400 个字符;两者都使用同一个作者编写的字符串填充,因此永远不会出现不一致。

证据。“摘要主要根据页面内容本身生成”,Google 建议“为每个页面提供独特的描述”(Google,摘要)。对于标题:应编写“描述性强且简洁的文本”,避免“重复或模板化的文本”,并“简洁地体现品牌”(Google,标题链接)。

优先级和截断会自动执行这些长度是 Docsbook 自行设定的预算,并非公开发布的限制 — 请参阅“限制”。

每个页面都应至少能从另一个页面访问到,并且其中的每个链接都应能正常解析。

它对回答代理的影响。 爬虫通过跟随链接来发现页面;一个仅存在于站点地图中的页面,对爬虫而言只有一个薄弱的抓取理由,没有任何理由认为它很重要。Docsbook 会为整个文档集构建链接图,并逐页统计传入链接和未解析链接的数量。存在损坏链接或传入链接数为零的页面,会在文档图卡片中被标记,并提供相应的修复操作。

证据。 Google 列出的实际有助于页面出现在 AI Overviews 和 AI Mode 中的因素包括“通过网站上的内部链接,让您的内容易于查找”(Google,AI 功能)。

已检查并报告。 除非您要求代理执行,否则不会有任何机制为您添加链接。

限制与未决问题#

  • 列表中的一半内容并不能阻止你做错事。规则 1、2 和 4 是写作代理在起草时遵循的指示;规则 6 和 10 是事后报告的结果;规则 8 仅在生成的定价页面上得到强制执行。如果你手动编写页面,或编辑代理编写的页面,Docsbook 不会检查它是否符合此列表。目前还没有能够报告跳过的标题级别以及未匹配任何检测器的 FAQ 部分的代码检查器,而规则 4 是最常失败、也最不易察觉的规则。
  • 规则 9 中的字符预算是我们的规定,不是 Google 的规定。Google 根本没有发布字符限制:“<title> 元素的长度没有限制”,而标题链接“会根据需要在 Google 搜索结果中截断,通常以适应设备宽度”(Google,标题链接)。描述也是如此。160 和 400 是此代码库使用的预算,生成器说明中的 50–60 个字符标题目标和 130–160 个字符描述目标是内部风格规范。请将它们视为合理的默认值,而不是任何工具会据此衡量你的阈值。
  • 尚未确定:精简页面的阈值。Docsbook 的代码会计算每个页面的判定结果:少于120 个单词的页面会被称为“精简”,同时还会判定“损坏”和“孤立”。损坏和孤立判定会显示出来;精简判定虽然会被计算、导出并进行单元测试,但目前不会显示在任何面板上,因此实际上你不会被告知某个页面是精简页面。生成器说明中的最低字数要求——根据页面类型不同为 300 到 400 个单词——属于内部风格规范,这些具体数字没有已发布的来源。唯一有来源支持的是方向:Google 会询问内容是否“与搜索结果中的其他页面相比提供了实质性价值”(Google,创建有帮助的内容)。
  • 尚未确定:疑问句形式的标题是否会提高引用率。规则 2 中的检索机制是真实存在且有来源支持的。没有任何公开来源证明,仅凭标题形式本身,就能在任何答案引擎上提高引用率。文档扩展是在检索基准上进行衡量的,而不是在 ChatGPT 或 AI Overviews 上进行衡量的。在有人发布第二项测量结果之前,请将规则 2 视为在检索方面依据充分,但在引用方面尚未得到证明。
  • 规则 3 和 6 描述的是两条不同的流水线,通过其中一条并不能说明通过另一条。规则 3 是 Docsbook 在你的 Markdown 上建立的语义索引;规则 6 是外部助手获取你的 URL 后得到的内容。一个页面可能已经针对站内搜索进行了完美分块,却对 ChatGPT 不可见,反之亦然。两者没有共用任何代码。
  • 这些内容都没有根据对你产生的结果进行衡量。Docsbook 可以告诉你某个页面是孤立页面、某个部分未匹配任何检测器的结构,或者某次获取没有返回正文内容。它无法告诉你遵循这些规则是否让你获得了引用,而且它也没有声称能够做到这一点——请参阅引用信号,了解为什么一次运行无法证明任何事情;另请参阅Docsbook 如何证明其声明,了解这些页面所遵循的标准。
  • AEO — 答案引擎需要从页面获取什么,以及标记仍能带来什么
  • 结构化答案 — 这些规则所供给的检测器,以及失败时的表现
  • 引用信号 — 测得的效果大小,以及不应采取的做法
  • GEO — TL;DR 区块、可见日期和作者行
  • SEO — 索引、规范 URL 和可抓取性,这是所有这些工作开始之前的阶段
  • 搜索 — 分块规则所供给的站内检索
  • 内容小组件 — 检测器能够理解的步骤器和手风琴区域
  • Docsbook 如何证明其所声称的内容 — 这些页面所遵循的证据规则

Updated

此页面对您有帮助吗?