跳到主要内容
IM智引科技

研究 / 资源模板

GEO 意图注册表工具箱:模板、校验、提示词与起步问题集

GEO 意图注册表六篇正文的收口。正文只讲思路、不放长代码,所有实现件集中在这里——注册表模板(YAML 与 Airtable 两版)、校验规则、三条提示词、意图卡与四象限脚本、复述渲染组件、llms.txt 生成器、工业 B2B 起步问题集 40 问,以及存量站的四轮迁移清单。

BLKTECH 编辑部2026年8月9日18 分钟难度 实战免费YAMLNode.jsAstroClaude

工具箱含意图注册表模板(YAML 与 Airtable 两版)、六条校验规则、三条提示词(提问收集聚类/六分类与主答块归属/语义重复判定)、四个脚本(意图卡生成、四象限差集、复述渲染组件、llms.txt 生成)、实测记录表与挑选判据、工业 B2B 起步问题集 40 问、存量站四轮迁移清单。最小可用集只需注册表模板 + 聚类提示词 + 迁移第一轮三件。

GEO 意图注册表工具箱:模板、校验、提示词与起步问题集

前六篇正文(7378)只讲思路、不放长代码。所有实现件收在这里。

怎么用这一篇:认同前六篇的思路,来这里取现成件;不认同,前六篇也照样成立。如果你只想拿三件东西就走,直接跳到最后一节「最小可用集」。


一、文件位置与目录结构

意图注册表适合放进 Git,比关键词注册表更适合——因为 canonical_answer 需要 diff(一句话改没改,一眼看得出来),而 Notion 看不出这个。

data/
├── products.yaml          # 产品事实层(第 71 篇)
├── certificates.yaml      # 证书(第 71 篇)
├── registry.json          # 关键词注册表(第 01 篇)
└── geo-intents.yaml       # ← 本篇,GEO 意图注册表
scripts/
├── geo-registry-audit.mjs # 主审计脚本(第 78 篇)
├── intent-card.mjs        # 生成页面意图卡
├── intent-quadrant.mjs    # 四象限差集
└── gen-llms-txt.mjs       # 从注册表生成 llms.txt
src/components/
└── CanonicalAnswer.astro  # 复述渲染组件

三张表并列放在 data/,因为它们互相引用:geo-intents.yamlfact_refs 指向 products.yamlseo_keyword_ref 指向 registry.json。放在一起,脚本读起来简单,人翻起来也知道去哪找。


二、模板:geo-intents.yaml

带注释的完整模板。每个字段的存在理由见第 74 篇,这里只给格式。

# GEO 意图注册表
# 一行 = 一个问题 → 一个主答块的绑定
# 约束:主答块唯一 · 复述必须派生 · 数字必须指回事实层

meta:
  version: 1
  updated: 2026-08-09
  # 实测集上限,超过这个数就不要再加了(见第 77 篇)
  test_set_limit: 40

intents:
  # ── ④ 验证型:最容易做对、最容易被引用的一类 ──
  - qid: Q-017
    question: What is the maximum operating temperature of the CP-100 centrifugal pump?
    variants:
      - How hot can the CP-100 run?
      - CP-100 temperature limit
      - Can the CP-100 handle 130 degrees C?
    intent_class: verification        # 六类之一,单值
    answer_unit: /products/cp-100/#max-operating-temperature
    canonical_answer: >-
      The CP-100 centrifugal pump operates from -20°C to 120°C
      (-4°F to 248°F) in its standard configuration.
    fact_refs:
      - products.cp-100.temp_min
      - products.cp-100.temp_max
    evidence:
      - "Supplier datasheet v3, p.2"
    confidence: datasheet             # measured | datasheet | verbal | estimated
    restate_on:
      - /applications/chemical-transfer-pump/#temperature-limits
      - /blog/high-temp-pump-selection/#cp100-range
    self_answerable: true
    seo_keyword_ref: "cp100 operating temperature"
    priority: 4
    target_locale: [en]
    citation_status: cited            # cited | miscited | not_cited | untested
    last_tested: 2026-07-12
    status: active

  # ── ② 条件选型型:AI 独有的一类,seo_keyword_ref 通常为空 ──
  - qid: Q-034
    question: What pump material should I use for 60% sulfuric acid at 80°C?
    variants:
      - Best wetted material for hot concentrated sulfuric acid
      - Will SS316 work with 60% H2SO4 at 80C?
    intent_class: conditional_selection
    answer_unit: /applications/chemical-transfer-pump/#material-selection
    canonical_answer: >-
      For 60% sulfuric acid at 80°C, specify PVDF-lined or
      high-silicon cast iron wetted parts; SS316 corrodes rapidly
      at this concentration and temperature.
    fact_refs: []                     # 无硬参数,但 evidence 必填
    evidence:
      - "NACE corrosion data, H2SO4 60% @ 80C"
      - "Supplier material compatibility chart rev.2025-03"
    confidence: datasheet
    restate_on:
      - /products/cp-100/#chemical-compatibility
    self_answerable: true
    seo_keyword_ref: ""               # 空值 = 关键词工具里看不见 = 壁垒
    priority: 5
    target_locale: [en, de]
    citation_status: untested
    last_tested: null
    status: active

  # ── ⑥ 供应商评估型:登记但不落地 ──
  - qid: Q-041
    question: Who are the most reliable centrifugal pump manufacturers in China?
    intent_class: vendor_evaluation
    answer_unit: null                 # 不可自答的意图没有主答块
    canonical_answer: ""
    self_answerable: false
    # 交给站外提及,见第 44 篇
    offsite_channels:
      - "Eng-Tips 真实答题(署名工程师)"
      - "行业媒体引用我们的实测报告"
      - "Thomasnet / Europages 目录一致性"
    priority: 3
    target_locale: [en]
    status: active

六类的枚举值

# intent_class 合法值(见第 75 篇)
definition            # ① 定义型
conditional_selection # ② 条件选型型 ★
tradeoff              # ③ 权衡型
verification          # ④ 验证型
compliance            # ⑤ 资格合规型
vendor_evaluation     # ⑥ 供应商评估型(不可自答)

Notion / Airtable 字段版

不想用 YAML 的,字段照抄这份:

字段名 Notion 类型 备注
qid Title 主键,Q-001
question Text 长文本,存问句原文
variants Text 换行分隔
intent_class Select 六个选项,不要用 Multi-select
answer_unit URL 填完整锚点地址
canonical_answer Text 加一个 formula 字段显示字数,超 80 词标红
fact_refs Text 换行分隔
evidence Text
confidence Select 四级
restate_on Text 换行分隔
self_answerable Checkbox
seo_keyword_ref Relation 关联关键词注册表(如果也在 Notion)
priority Number 1–5
target_locale Multi-select
citation_status Select 四值
last_tested Date
status Select active / draft / deprecated

Notion 用户必配的两个视图

  1. 本季度实测集:筛 priority ≥ 4 + self_answerable = true + status = active,按 intent_class 排序
  2. 待处理:筛 citation_status = miscitedlast_tested 超 90 天

intent_class 用 Select 不用 Multi-select,这是第 75 篇那条“不要多标签”的硬性落实——工具层面堵死,比写在规范里靠谱。


三、校验规则:让脏数据过不了构建

放进构建流程,bun run build 之前跑。规则和第 78 篇的审计脚本有分工:这里查表本身的合法性,那里查表和产物的一致性。

// scripts/validate-intents.mjs
import fs from 'fs/promises';
import YAML from 'yaml';

const CLASSES = ['definition', 'conditional_selection', 'tradeoff',
                 'verification', 'compliance', 'vendor_evaluation'];
const CONFIDENCE = ['measured', 'datasheet', 'verbal', 'estimated'];
const STATUS = ['active', 'draft', 'deprecated'];

const doc = YAML.parse(await fs.readFile('data/geo-intents.yaml', 'utf8'));
const intents = doc.intents ?? [];
const errors = [];
const seen = { qid: new Set(), unit: new Map() };

for (const it of intents) {
  const at = `${it.qid ?? '(no qid)'}`;

  // R1 · qid 唯一
  if (seen.qid.has(it.qid)) errors.push(`${at}: qid 重复`);
  seen.qid.add(it.qid);

  // R2 · 枚举合法
  if (!CLASSES.includes(it.intent_class)) errors.push(`${at}: intent_class 非法「${it.intent_class}」`);
  if (it.status && !STATUS.includes(it.status)) errors.push(`${at}: status 非法`);
  if (it.confidence && !CONFIDENCE.includes(it.confidence)) errors.push(`${at}: confidence 非法`);

  // R3 · 问句必须是完整问句,不能是关键词
  if (!/\?\s*$/.test(it.question ?? '')) {
    errors.push(`${at}: question 不是问句(不要压缩成关键词)`);
  }

  // R4 · 不可自答的意图不该有主答块;可自答的必须有
  if (it.self_answerable === false) {
    if (it.answer_unit) errors.push(`${at}: self_answerable=false 却指定了 answer_unit`);
  } else if (it.status === 'active') {
    if (!it.answer_unit) errors.push(`${at}: active 意图缺 answer_unit`);
    if (!/#[\w-]+$/.test(it.answer_unit ?? '')) {
      errors.push(`${at}: answer_unit 缺锚点(必须精确到块,见第 74 篇)`);
    }
    // R5 · 主答块唯一
    if (seen.unit.has(it.answer_unit)) {
      errors.push(`${at}: answer_unit 与 ${seen.unit.get(it.answer_unit)} 冲突`);
    }
    seen.unit.set(it.answer_unit, it.qid);
  }

  // R6 · canonical_answer 长度上限(防退化成 CMS)
  const words = (it.canonical_answer ?? '').trim().split(/\s+/).filter(Boolean).length;
  if (it.self_answerable !== false && it.status === 'active') {
    if (words === 0) errors.push(`${at}: canonical_answer 为空`);
    if (words > 80) errors.push(`${at}: canonical_answer ${words} 词,超过 80(只存首句)`);
  }

  // R7 · 有数字就必须有 fact_refs;没数字就必须有 evidence
  const hasNum = /\d/.test(it.canonical_answer ?? '');
  const hasRefs = (it.fact_refs ?? []).length > 0;
  const hasEvi = (it.evidence ?? []).length > 0;
  if (hasNum && !hasRefs) errors.push(`${at}: 答案含数字但 fact_refs 为空`);
  if (!hasNum && !hasEvi && it.self_answerable !== false && it.status === 'active') {
    errors.push(`${at}: 既无 fact_refs 也无 evidence(一条无依据的断言)`);
  }

  // R8 · 合规型对可信度的额外要求
  if (it.intent_class === 'compliance' && it.status === 'active') {
    if (!['measured', 'datasheet'].includes(it.confidence)) {
      errors.push(`${at}: 合规型意图的 confidence 必须是 measured 或 datasheet(见第 75 篇)`);
    }
  }

  // R9 · 复述块不能等于主答块
  if ((it.restate_on ?? []).includes(it.answer_unit)) {
    errors.push(`${at}: restate_on 里包含了主答块自身`);
  }
}

if (errors.length) {
  console.error(`✗ 意图注册表校验失败(${errors.length} 项)\n` + errors.map(e => '  - ' + e).join('\n'));
  process.exit(1);
}
console.log(`✓ 意图注册表校验通过(${intents.length} 条)`);

R8 值得单独说:它把第 75 篇那条“合规型问题 confidence 不够就不答”从一条建议变成了一道闸门。这类规则能写进脚本的,就不要写进规范文档——事实层的两种死法讲过,靠自觉维持的规则一定会失守。

接进 package.json

{
  "scripts": {
    "validate:intents": "node scripts/validate-intents.mjs",
    "build": "bun run validate:intents && astro check && astro build"
  }
}

四、提示词一:真实提问收集与聚类

对应第 77 篇的第 ① ② 步。

你在帮我从原始记录里提炼真实的客户提问。

【输入】
以下是我们过去 18 个月的询盘往来 / 论坛帖子 / 销售记录节选:
<<<
[粘贴原始文本,不需要整理]
>>>

【任务】
1. 提取出其中所有客户真正在问的问题
2. 把语义相同的合并成一个聚类
3. 每个聚类输出:
   - 标准问句(英文,完整句子,保留原有的约束条件)
   - 客户的原始表述(原文摘录 2-3 条)
   - 出现频次
   - 出现在几个独立来源里
4. 按频次降序排列

【硬性要求】
- 保留约束条件。客户说"60% 硫酸 80 度",就不要简化成"硫酸泵材质"。
  被压缩掉的约束条件正是这句话值钱的原因。
- 保留客户的原始用词。如果他们说 canned motor pump 而我们内部叫
  shield pump,两个都要记下来。
- 只出现在 1 个来源里的,单独放到「待观察」区,不要混进主清单。
- 【禁止】回答任何技术问题。你的任务是提炼和归类,不是判断
  某个技术说法对不对。
- 【禁止】编造问题。原文里没有的,不要"推测客户可能还会问"。

【输出格式】
## 主清单(≥3 个独立来源)
| # | 标准问句 | 原始表述 | 频次 | 来源数 |

## 待观察(1-2 个来源)
| # | 标准问句 | 原始表述 | 频次 | 来源数 |

## 术语差异
| 客户的说法 | 我们的说法 | 出现次数 |

最后那个「术语差异」区是顺手的收益:它直接产出术语表的更新项,而术语表归事实层管(见什么才算一条产品事实)。这是从 Reddit 挖真实用户问题里“最便宜的一类收益”。


五、提示词二:六分类与主答块归属

对应第 77 篇的第 ② ③ 步。这条提示词在人机闸门之前停下

你在帮我把一批客户提问登记进 GEO 意图注册表。

【输入】
1. 待登记的问题清单:
<<<
[上一条提示词的主清单]
>>>

2. 现有意图注册表(用于去重):
<<<
[geo-intents.yaml 的 qid + question + answer_unit 三列]
>>>

3. 站点页面清单(用于建议归属):
<<<
[slug + page_type + 页面主题一句话]
>>>

【任务】
对每个问题:
1. 查重:是否与现有意图语义相同?
   - 相同 → 标记 DUPLICATE + 对应 qid,建议加入该意图的 restate_on
   - 不同 → 继续
2. 分类(单值,六选一):
   - definition:零约束,问概念
   - conditional_selection:带 2+ 约束条件,问「选哪个」
   - tradeoff:两方案都可行,问「哪个划算」
   - verification:已锁定对象,问某个具体数
   - compliance:问能不能 / 符不符合 / 有没有证
   - vendor_evaluation:问「谁靠谱」
3. 判断 self_answerable:
   判据 = 这个问题的最佳答案,是不是必须由第三方说出口才可信?
   是 → false(vendor_evaluation 一律 false)
4. 建议主答块归属:
   判据 = 哪个页面的上下文最接近提问者当时的处境?
   (不是哪个页面主题最相关,也不是哪个页面信息最全)
   优先级:应用选型页 > 技术资源页 > SKU 页 > Pillar 页
5. 如果两个页面都合理,标记 CONFLICT,列出两个候选和各自理由,
   不要自己选一个。

【硬性要求】
- intent_class 单值。看起来跨两类的,拆成两个问题。
- 【禁止】写 canonical_answer。这一步只做归类和归属。
- 【禁止】判断技术内容对错。
- 建议归属时,如果找不到合适的现有页面,标记 NEW_PAGE_NEEDED,
  不要硬塞进一个不合适的页面。

【输出格式】
| # | 问题 | 判定 | intent_class | self_answerable | 建议主答块 | 备注 |

## 需要你裁决(CONFLICT / NEW_PAGE_NEEDED)
[逐条列出,给候选和理由]

闸门就设在这条提示词的输出上。 看一张十几行的清单,几分钟能判完;等生成了十几个页面块再审,就退化成走过场——这条原则见AI 的边界划在哪


六、提示词三:语义重复判定(审计第二层的模型部分)

第 78 篇的脚本会输出一批「落地未登记」的块。判断它们是不是和已有意图重复,需要语义判断,交给模型。

你在检查我的站点上有没有同一个问题被回答了两遍。

【输入】
1. 未登记的问答块:
<<<
[脚本输出的 unregistered_block 列表:位置 + 问题 + 答案首句]
>>>

2. 现有意图注册表:
<<<
[qid + question + canonical_answer]
>>>

【任务】
对每个未登记块,判断:
- DUPLICATE:与某条已有意图问的是同一件事
  → 这是自相矛盾的来源。输出对应 qid,并**指出两处答案在
    数字、工况、确定性措辞上有没有差异**
- NEW:是一个新意图
  → 建议 intent_class 和是否值得登记
- NOISE:不是一个真正的问答块(比如营销文案写成了问句形式)
  → 建议删除或改写

【硬性要求】
- 判断"是不是同一个问题",不判断"答案对不对"。
- 数字差异必须逐个列出,不要笼统说"内容相近"。
- 【禁止】建议为了提高覆盖率而批量登记。NOISE 就是 NOISE。

【输出格式】
| 位置 | 判定 | 对应 qid | 差异点 | 建议动作 |

七、脚本

第 78 篇已经给了主审计脚本 geo-registry-audit.mjs,这里补另外三个。

7.1 页面意图卡

// scripts/intent-card.mjs  —— 用法:node scripts/intent-card.mjs /products/cp-100/
import fs from 'fs/promises';
import YAML from 'yaml';

const slug = process.argv[2];
if (!slug) { console.error('用法:node scripts/intent-card.mjs <slug>'); process.exit(1); }

const intents = YAML.parse(await fs.readFile('data/geo-intents.yaml', 'utf8')).intents ?? [];
const registry = JSON.parse(await fs.readFile('data/registry.json', 'utf8'));

const words = registry.filter(r => r.page_slug === slug && r.status === 'active');
const own   = intents.filter(i => (i.answer_unit ?? '').startsWith(slug + '#'));
const restate = intents.filter(i => (i.restate_on ?? []).some(u => u.startsWith(slug + '#')));
const refuse  = intents.filter(i => i.self_answerable === false && i.status === 'active');

const line = (s = '') => console.log(s);
line(`┌─ 页面意图卡 ${'─'.repeat(Math.max(0, 46 - slug.length))}`);
line(`│ ${slug}`);
line(`├─ SEO 侧(词)`);
for (const w of words) {
  line(`│   PKW  ${w.pkw}`);
  line(`│   SKW  ${(w.skw ?? []).join(' · ')}`);
  line(`│   NKW  ${(w.nkw ?? []).join(' · ')}`);
}
if (!words.length) line(`│   ⚠️ 注册表中无归属 —— 未纳管页面`);
line(`├─ GEO 侧(问)`);
for (const i of own)     line(`│   主答  ${i.qid} ${i.question}  [${i.intent_class}]`);
for (const i of restate) line(`│   复述  ${i.qid} ← 主答块 ${i.answer_unit}`);
if (!own.length)         line(`│   ⚠️ 无主答块 —— AI 检索时本页不会被引用`);
line(`├─ 判定`);
line(`│   词 ${words.length} : 主答 ${own.length}`);
const stale = own.filter(i => !i.last_tested ||
  (Date.now() - new Date(i.last_tested)) / 864e5 > 90);
if (stale.length) line(`│   ⚠️ ${stale.length} 条超过 90 天未实测`);
const bad = own.filter(i => i.citation_status === 'miscited');
if (bad.length) line(`│   🔴 ${bad.length} 条被引错 —— 最高优先级`);
line(`└${'─'.repeat(56)}`);
line(`\n不可自答(全站共 ${refuse.length} 条,见第 44 篇站外提及)`);

7.2 四象限差集

// scripts/intent-quadrant.mjs —— 全站诊断,对应第 76 篇
import fs from 'fs/promises';
import path from 'path';
import YAML from 'yaml';

const DIST = 'dist';
async function pages(dir, out = []) {
  for (const e of await fs.readdir(dir, { withFileTypes: true })) {
    const full = path.join(dir, e.name);
    if (e.isDirectory()) await pages(full, out);
    else if (e.name === 'index.html') {
      out.push('/' + path.relative(DIST, full).replace(/index\.html$/, '').replace(/\\/g, '/'));
    }
  }
  return out;
}

const intents = YAML.parse(await fs.readFile('data/geo-intents.yaml', 'utf8')).intents ?? [];
const registry = JSON.parse(await fs.readFile('data/registry.json', 'utf8'));

const hasWord = new Set(registry.filter(r => r.status === 'active').map(r => r.page_slug));
const hasQ = new Set(intents
  .filter(i => i.status === 'active' && i.answer_unit)
  .map(i => i.answer_unit.split('#')[0]));

// 只诊断内容页,排除列表页和功能页
const SKIP = /^\/(|search\/|start\/|guides\/|resources\/|practice\/|reviews\/)$/;
const all = (await pages(DIST)).filter(p => !SKIP.test(p));

const q = { healthy: [], seoOnly: [], geoOnly: [], ghost: [] };
for (const p of all) {
  const w = hasWord.has(p), h = hasQ.has(p);
  if (w && h) q.healthy.push(p);
  else if (w) q.seoOnly.push(p);
  else if (h) q.geoOnly.push(p);
  else q.ghost.push(p);
}

console.log(`四象限诊断(共 ${all.length} 页)\n`);
console.log(`✅ 健康页        ${q.healthy.length}\t有词有问`);
console.log(`🟡 纯 SEO 页     ${q.seoOnly.length}\t有排名但 AI 不会引用 —— 补 2-4 个问答块`);
console.log(`🟡 纯 GEO 页     ${q.geoOnly.length}\t零搜索量但可能被引 —— 删之前先看 citation_status`);
console.log(`❌ 幽灵页        ${q.ghost.length}\t合并或 301 下线\n`);
for (const [k, label] of [['seoOnly','纯 SEO'],['geoOnly','纯 GEO'],['ghost','幽灵']]) {
  if (!q[k].length) continue;
  console.log(`── ${label} ──`);
  q[k].forEach(p => console.log('  ' + p));
  console.log();
}

7.3 复述渲染组件(Astro)

第 76 篇那条判据——「改一条标准答案,你要动几个文件」——的落地件。答案存一处,页面引用。

---
// src/components/CanonicalAnswer.astro
import fs from 'node:fs/promises';
import YAML from 'yaml';

interface Props {
  qid: string;
  mode?: 'primary' | 'restate';   // 主答块 or 复述块
}
const { qid, mode = 'primary' } = Astro.props;

const doc = YAML.parse(await fs.readFile('data/geo-intents.yaml', 'utf8'));
const intent = (doc.intents ?? []).find((i: any) => i.qid === qid);
if (!intent) throw new Error(`CanonicalAnswer: 找不到意图 ${qid}`);
if (intent.self_answerable === false) {
  throw new Error(`CanonicalAnswer: ${qid} 标记为不可自答,不应渲染到页面`);
}

const anchor = intent.answer_unit.split('#')[1];
---

<h3 id={anchor}>{intent.question}</h3>
<p>
  {intent.canonical_answer}
  {mode === 'restate' && (
    <a href={intent.answer_unit}>Full details →</a>
  )}
</p>
<slot />{/* 各页自由发挥的展开段落,不参与一致性比对 */}

用法:

{/* 主答块 —— 在 /products/cp-100/ */}
<CanonicalAnswer qid="Q-017">
  <p>For applications exceeding 120°C, the CP-100 HT version…</p>
</CanonicalAnswer>

{/* 复述块 —— 在 /applications/chemical-transfer-pump/ */}
<CanonicalAnswer qid="Q-017" mode="restate" />

改一次 YAML,三个页面同时变。审计脚本的「复述分叉」检查从此永远是 0——这就是用架构代替纪律

7.4 从注册表生成 llms.txt

// scripts/gen-llms-txt.mjs —— 对应第 78 篇的副产品
import fs from 'fs/promises';
import YAML from 'yaml';

const SITE = 'https://example.com';
const doc = YAML.parse(await fs.readFile('data/geo-intents.yaml', 'utf8'));
const rows = (doc.intents ?? [])
  .filter(i => i.status === 'active' && i.self_answerable !== false && i.answer_unit)
  .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));

const byClass = {
  verification: 'Product specifications',
  conditional_selection: 'Selection and sizing',
  tradeoff: 'Engineering trade-offs',
  compliance: 'Certifications and compliance',
  definition: 'Technical concepts',
};

let out = `# AquaFlow Industrial\n\n`;
out += `> Industrial centrifugal, submersible and magnetic drive pumps.\n`;
out += `> Below are questions this site answers directly, with the exact\n`;
out += `> section that contains each answer.\n\n`;

for (const [cls, heading] of Object.entries(byClass)) {
  const group = rows.filter(r => r.intent_class === cls);
  if (!group.length) continue;
  out += `## ${heading}\n\n`;
  for (const r of group) out += `- [${r.question}](${SITE}${r.answer_unit})\n`;
  out += `\n`;
}

await fs.writeFile('public/llms.txt', out);
console.log(`✓ llms.txt 已生成(${rows.length} 条意图)`);

按问题组织,比原来那份按页面组织的信息量大得多。但优先级依然低——它的确定性回报低于结构和内容本身,顺手做,不要当成重点。


八、实测记录表与挑选判据

挑选判据

priority >= 4
AND self_answerable == true
AND status == 'active'
AND (fact_refs 非空 OR evidence 非空)
ORDER BY intent_class = 'conditional_selection' DESC, priority DESC
LIMIT 30

记录表模板

## GEO 引用实测 · 2026 Q3
测试日期:2026-09-30 引擎:Perplexity / ChatGPT 搜索 / Google AI Overview
问题集:Q3 固定 30 条(与 Q2 相同,新增意图记在下方「集合外」)

| qid | 问题(用注册表原文提问) | PPLX | GPT | AIO | 引用 URL | 信息准确 | 备注 |
|-----|------------------------|------|-----|-----|---------|---------|------|
| Q-034 | What pump material for 60% H2SO4 at 80C? | ✅ | ✅ | ❌ | /applications/… | ✅ | |
| Q-017 | Max operating temp of CP-100? | ✅ | ❌ | ✅ | /products/cp-100/ | ⚠️ | 引了 120,事实层已改 118 |
| Q-004 | Is mag drive worth the cost? | ❌ | ❌ | ❌ | — | — | 结构合规,疑似证据不足 |

### 汇总
引用率:[N]/30 = [N]%(上季度 [N]%)
被引错:[N] 条 ← **最高优先级**
未引用:[N] 条

### 集合外(本季度新增,下季度并入固定集)
| qid | 问题 | 结果 |

变量必须固定:同一批问题、同一批引擎、同样的提问方式(用 question 原文,不要临场改写)。不固定就没法做季度对比,测了也是白测。


九、工业 B2B 起步问题集:40 问

改掉型号和介质就能用。按六分类分组,每类给的数量反映建议配比

④ 验证型(12 条 · 最容易做对,先铺这一类)

1.  What is the maximum operating temperature of the {MODEL}?
2.  What is the flow rate range of the {MODEL}?
3.  What is the maximum discharge pressure of the {MODEL}?
4.  What materials is the {MODEL} casing available in?
5.  What is the NPSH required for the {MODEL} at duty point?
6.  What is the maximum solids content the {MODEL} can handle?
7.  What seal options are available for the {MODEL}?
8.  What is the inlet and outlet connection size of the {MODEL}?
9.  What motor power is required for the {MODEL}?
10. What is the maximum viscosity the {MODEL} can handle?
11. What is the weight and footprint of the {MODEL}?
12. What is the typical lead time for the {MODEL}?

② 条件选型型(10 条 · 优先级最高,seo_keyword_ref 大多为空)

13. What pump material should I use for {CONC}% {CHEMICAL} at {TEMP}°C?
14. Which pump type is best for {APPLICATION} with {CONSTRAINT}?
15. How do I size a pump for {FLOW} at {HEAD} with {FLUID}?
16. What pump should I specify for intermittent duty on {FLUID}?
17. Which seal arrangement for {FLUID} at {TEMP}°C continuous duty?
18. What impeller type for {FLUID} containing {SOLIDS}% solids?
19. Do I need a VFD for {APPLICATION} with variable demand?
20. What pump for {FLUID} where NPSH available is only {N} m?
21. Which material for {FLUID} if the process may excurse to {TEMP}°C?
22. What pump configuration for {APPLICATION} in a {CLASSIFICATION} area?

③ 权衡型(8 条 · 最有价值,必须敢有立场)

23. Is a magnetic drive pump worth the cost over a double mechanical seal?
24. Should I oversize a clean-liquid pump or buy a slurry pump for light abrasive duty?
25. Is stainless steel worth the premium over coated carbon steel for {FLUID}?
26. Is it cheaper to run two smaller pumps or one large pump for variable demand?
27. When does a canned motor pump make more sense than a mag drive?
28. Is API 610 compliance worth it for non-refinery applications?
29. Should I stock a spare pump or a spare rotating assembly?
30. Is remanufacturing an old pump cheaper than replacement?

⑤ 资格合规型(6 条 · 证据要求最高)

31. Is the {MODEL} certified for ATEX Zone {N} installations?
32. Does the {MODEL} meet ISO 9906 Grade {N} performance testing?
33. Is the {MODEL} suitable for potable water per {STANDARD}?
34. What surface finish does the {MODEL} meet for 3-A sanitary compliance?
35. Does the {MODEL} comply with EU Regulation {N} on motor efficiency?
36. Is documentation available for {CERTIFICATION} audit purposes?

① 定义型(3 条 · 竞争最激烈,不指望靠它拿引用)

37. What is NPSH and why does it matter in pump selection?
38. What is the difference between a magnetic drive pump and a canned motor pump?
39. What does BEP mean and why should I stay near it?

⑥ 供应商评估型(1 条 · 登记但不落地)

40. Who are the reliable {CATEGORY} manufacturers in {REGION}?
    → self_answerable: false,交给站外提及(第 44 篇)

这份清单是起点不是终点。 它的作用是让你第一天就有 40 行数据可以跑通流程;真正值钱的意图来自你自己的询盘记录——那些带着客户具体工况的问题,这份通用清单里一条都没有。


十、存量站四轮迁移清单

对应第 76 篇每轮只做一件事,做完跑一次四象限。

### 第一轮 · Pillar 页(通常 3–8 个)
□ 跑 intent-quadrant.mjs,记下当前四格数量作为基线
□ 每个 Pillar 页建意图卡(intent-card.mjs),确认它在哪一格
□ 从 40 问清单里挑 ② ③ 两类,每页配 2–4 条
□ 只填 5 个必填字段:qid / question / intent_class / answer_unit / canonical_answer
□ restate_on、citation_status 全部留空
□ 跑 validate-intents.mjs,确保表本身合法
□ 落地:加 id 属性 + 用 CanonicalAnswer 组件渲染

### 第二轮 · 应用选型页
□ 这类页最容易做成健康页,② 条件选型型天然归它
□ 开始填 restate_on:把 Pillar 页上的 ③ 权衡型答案复述过来
□ 跑 geo-registry-audit.mjs,第一次会有一批「落地未登记」,用提示词三处理

### 第三轮 · SKU 页
□ 只补 ④ 验证型和 ⑤ 资格合规型
□ ⚠️ 不要给 SKU 页补词。它的词少是设计使然
□ ④ 类的 fact_refs 必填 —— 这一轮同时是事实层的一次体检
□ ⑤ 类检查 confidence,不够 datasheet 的一律留 draft

### 第四轮 · 技术资源页 + 冲突仲裁
□ ① 定义型、③ 权衡型归位
□ 处理 CONFLICT:资源页很容易抢走应用页的 ② 类主答
□ 判据:谁的上下文更接近提问者的处境(不是谁信息更全)
□ 跑四象限,和第一轮的基线对比

### 收尾
□ 挑本季度实测集(30 条上限)
□ 跑一次实测,回写 citation_status
□ 把 validate:intents 接进 build
□ 把 geo-registry-audit 接进每周定时审计(第 63 篇)

进度看什么:不看“完成了百分之多少”,看**「纯 SEO」和「幽灵」两格的数量下降了多少**。前者是真实的可见性改善,后者只是填表进度。


十一、最小可用集:只拿三件

不想一次上全套的,拿这三件就能开始:

  1. 注册表模板(第二节)—— 删到只剩 5 个必填字段
  2. 提示词一(第四节)—— 把询盘记录倒进去,产出真实问题清单
  3. 迁移第一轮(第十节)—— 只做 Pillar 页

20 行意图就够。和注册表设计那篇一个口径:第一份不需要完整,真正的风险不是表不够大,是有了不执行。

跑通一轮之后再考虑加:校验脚本 → 渲染组件 → 审计脚本 → 实测。顺序反了(先上审计脚本再建表)会卡住,因为没有数据可审。


十二、和另外两个工具箱的分工

工具箱 管什么 何时用
全系列 AI Skills 工具箱 12 个 Skill 的 Prompt 合集 日常运营
产品事实层工具箱 :产品事实、供应商、证书 往站里加产品时
本篇 :意图索引、答案块、一致复述 决定站上该回答什么、怎么保持一致时

三者共用同一套约定:说明书 + 确定性脚本 + 参考资料三件套;确定性的事交给脚本,判断的事交给模型。

接口在两个地方:本篇的 fact_refs 指向事实层的字段,本篇的 seo_keyword_ref 指向关键词注册表的词。三张表不是三套系统,是同一份判断的三个切面。


相关文章


意图注册表、覆盖与一致性审计现在都已就位。下一篇把它们与前五个专项审计汇总成全站健康度报告。

→ AI Skill:注册表健康度报告——全站 SEO 状态一键快照

NEXT ACTION / 下一步

继续系列:AI 外贸站建设全系列

把读到的方法变成一个小行动,完成后再回来迭代。

继续

RELATED / 相关推荐

接着读这些

按同一分类、系列与标签为你挑选。