NOLYN GEO 文章自动生成系统 — 策略与架构文档

存档日期:2026-04-24

系统状态:已上线运行,Layer 1 已生成,10K 扩展引擎已搭建


一、策略背景与目标

1.1 为什么做 GEO

GEO(Generative Engine Optimization)针对的是国内 AI 搜索引擎(百度AI、豆包、Kimi、通义千问、秘塔、知乎直答、夸克、讯飞星火)的引用机制。与传统 SEO 追求排名不同,GEO 的核心目标是让 AI 搜索引擎在回答用户问题时引用 NOLYN 的内容

AI 搜索引擎优先引用的条件:

  1. 内容包含 FAQPage / HowTo 结构化数据 → AI 可直接提取问答对

  2. 导语首句是定义式结论(“XXX 是 XXX”)→ AI 可直接引用作为答案

  3. 段落首句是主题句 → AI 可快速判断段落相关性

  4. 包含具体数据和权威引用 → 提升可信度权重

  5. 内容覆盖长尾关键词 → 提升命中概率

1.2 策略核心:一个概念一个页面

借鉴 Obsidian.md 的文档策略——“一个 API 方法一个页面”,NOLYN 采用”一个珠宝知识点一个页面”的策略:

| Obsidian 策略 | NOLYN 对应策略 |

|--------------|---------------|

| 一个 API 方法一个页面 | 一个珠宝知识点一个页面 |

| Import 迁移指南(捕获竞品意图)| 材质对比、风格对比页面 |

| 500+ 开发者文档页 | 6000+ 珠宝知识/文化/指南页 |

| 扁平 URL(≤2 层)| /information/{slug} |

| FAQ 问答格式 | 每页含 FAQ schema |

1.3 当前规模

| 指标 | 数值 |

|------|------|

| 产品 SKU | 97 个 |

| 产品系列 | 19 个(定胜、山茶、扇、月亮门、枝梅、海棠、湖山、满觉陇、玉鸟、瓦、瓦当、窗、窗花、结、绿天、舟、蝶、踏、香糕砖 等) |

| 价格区间 | ¥609 – ¥4,999 |

| 关键词矩阵 | 6,188 条(keywords-merged.json) |

| 品类覆盖 | 项链、耳饰、耳钉、戒指、手链、手镯、毛衣链 |

1.4 核心原则(2026-04 修订)

基于 GEO/SEO/用户/商业四维评估,策略从”量优先”调整为”质优先”:

| | 原策略 | 修订后 |

|—|-------|--------|

| 目标 | 6,188 篇全量生成 | 分批上线,首批 500 篇验证 |

| 质量标准 | SEO 评分 ≥ 75 | SEO ≥ 75 + 品牌调性评分 + 去重检测 |

| 上线节奏 | 一次性全量导入 | 每批 100-200 篇,观察 2 周收录后放量 |

| 低质页处理 | 全部上线 | noindex 或不生成 |

| 品牌调性 | 快消口语(性价比/种草/避坑)| 文化珠宝语境(值得/恰如其分/不张扬的美) |

从”信息量”转向”信任感”: 珠宝是高客单价视觉品类,用户决策依赖真实感(真人佩戴 > 产品白底图 > 文字描述)、专业感(权威引用 > 品牌自述 > 口语化灌水)、文化认同(为什么值 > 多少钱 > 便宜吗)。

内容比例调整方向:

| 内容类型 | 现有占比 | 调整后占比 | 理由 |

|---------|---------|----------|------|

| 礼赠指南 C5 | 36% | 20% | 比价用户转化率低,同质化严重 |

| 价格指南 C3 | 11% | 5% | 教用户比价对品牌有害,应转向价值解读 |

| 场景搭配 C4 | 18% | 18% | 保持 |

| 文化风格 C2 | 12% | 25% | 品牌差异化核心,应大幅增加 |

| 系列故事 C6 | 13% | 20% | 品牌核心资产,应大幅增加 |

| 材质百科 C1 | 1% | 10% | 权威信息入口,需补齐 |

| 保养知识 C7 | 0.1% | 10% | 复购/口碑关键触点,需大幅补齐 |

| 对比评测 C8 | 2% | 5% | 聚焦材质科普而非比价 |

| 季节节日 C9 | 7% | 5% | 时效性强但生命周期短 |

| 热门趋势 C10 | 0.1% | 2% | 流量入口,需补齐 |


二、内容矩阵

2.0 分层架构:Layer × Category 双轴体系

内容矩阵采用双轴分类:Layer 1-5 决定页面深度与质量标准,C1-C10 决定内容主题与模板类型。

纵轴(深度)— Layer 1~5:

| Layer | 定位 | 维度组合 | 页面量级 | 目标字数 | 内链角色 | Sitemap Priority |

|-------|------|---------|---------|---------|---------|-----------------|

| Layer 1 | 单维度权威百科 | 1 个核心维度 | ~200 | ≥ 2000 | 顶层锚点,被大量引用 | 0.9 |

| Layer 2 | 双维度交叉指南 | 2 个维度组合 | ~1,200 | 1500-2000 | 承上启下,链接 L1 与 L3 | 0.7 |

| Layer 3 | 三维度长尾覆盖 | 3 个维度组合 | ~6,000 | 1200-1500 | 长尾收割,向 L2/L4 导流 | 0.6 |

| Layer 4 | 产品驱动页 | SKU 锚点 | ~2,000 | 800-1200 | 交易转化页 | 0.8 |

| Layer 5 | FAQ 问答矩阵 | 问题式长尾 | ~1,000 | 600-800 | 问答覆盖,补充 L1-L3 | 0.5 |

横轴(主题)— C1~C10:

| 类目 | 主题 | 搜索意图 | 目标 Schema | 覆盖 Layer |

|------|------|---------|-------------|-----------|

| C1 | 材质百科 | 了解材质特性 | Article + FAQ | L1, L2, L3, L5 |

| C2 | 文化风格 | 了解设计风格 | Article + FAQ | L1, L2, L3, L5 |

| C3 | 价格指南 | 价格对比、性价比决策 | Article + FAQ | L2, L3, L5 |

| C4 | 场景搭配 | 按场景选择 | Article + FAQ | L2, L3, L5 |

| C5 | 礼赠指南 | 送礼推荐(收礼人 × 场合 × 预算) | Article + FAQ | L2, L3, L5 |

| C6 | 系列故事 | 品牌系列深度 | Article + FAQ | L1, L2, L4, L5 |

| C7 | 保养知识 | 材质保养教程 | HowTo + FAQ | L1, L5 |

| C8 | 对比评测 | 材质/品牌/款式对比 | Article + FAQ | L1, L2, L5 |

| C9 | 季节节日 | 时效性推荐 | Article + FAQ | L2, L3, L5 |

| C10 | 热门趋势 | 趋势热点 | Article + FAQ | L2, L5 |

核心原则: Layer 决定”这篇文章多深、什么质量标准”,Category 决定”这篇文章写什么主题、用什么模板”。每条关键词同时拥有 layercategory 两个属性。


2.1 Layer 1:单维度权威百科(~200 页)

定位: 每个核心概念的权威定义页,是内链网络的顶层锚点。AI 搜索引擎优先引用 Layer 1 页面作为”什么是 XXX”的答案源。

| 类型 | Category | 数量 | 示例关键词 | URL 模式 |

|------|----------|------|-----------|---------|

| 材质百科 | C1 | 15 | 白蝶贝是什么?、红玛瑙百科 | /information/{material-slug} |

| 产品品类指南 | C1 | 10 | 项链选购完全指南 | /information/{category-slug} |

| 系列故事 | C6 | 24 | 枝梅系列灵感、山茶系列设计理念(8 系列 × 3 角度) | /information/{collection-slug}-{angle} |

| 文化元素百科 | C2 | 20 | 梅花纹样寓意、瓦当文化溯源 | /information/{element-slug} |

| 保养教程 | C7 | 20 | 银饰怎么保养?、贝母饰品清洁方法 | /information/how-to-{topic} |

| 对比基础 | C8 | 50 | 银镀金 vs 18K金、白蝶贝 vs 珍珠 | /information/{a}-vs-{b} |

Layer 1 质量标准:

  • 正文 ≥ 2000 字

  • 至少 4 个 H2 + 2 个 H3

  • 至少 2 个表格或列表

  • 5 个 FAQ(定义式问答为主)

  • 引用 ≥ 2 个权威来源

  • 关联 3+ 个真实产品(97 SKU 白名单校验)

  • 导语首句必须是定义式结论(“白蝶贝是一种 XXX”)


2.2 Layer 2:双维度交叉指南(~1,200 页)

定位: 两个维度的交叉页面,回答”XX 的 YY 怎么选/怎么搭”类问题。是内链网络的中层枢纽。

| 类型 | Category | 公式 | 数量 | 示例关键词 |

|------|----------|------|------|-----------|

| 材质 × 品类 | C1 | 8 材质 × 6 类型 | 48 | 白蝶贝项链选购、红玛瑙耳饰推荐 |

| 材质 × 场景 | C4 | 8 材质 × 10 场景 | 80 | 职场戴什么材质?、约会红玛瑙搭配 |

| 品类 × 场景 | C4 | 6 类型 × 10 场景 | 60 | 职场项链推荐、婚礼戒指怎么选 |

| 收礼人 × 场合 | C5 | 8 收礼人 × 14 节日 | 112 | 情人节送女友、母亲节送妈妈 |

| 价格 × 品类 | C3 | 5 价位 × 6 类型 | 30 | 千元项链推荐、500内耳钉 |

| 材质 × 对比 | C8 | C(8,2) × 4 维度 | 112 | 白蝶贝 vs 黑玛瑙耐久性 |

| 文化 × 品类 | C2 | 13 文化 × 6 类型 | 78 | 宋式项链、梅花纹样戒指 |

| 季节 × 品类 | C9 | 14 季节 × 6 类型 | 84 | 七夕项链推荐、春节送礼手链 |

| 人群 × 场景 | C4 | 10 人群 × 10 场景 | 100 | 小个子职场配饰、学生约会搭配 |

| 系列 × 角度 | C6 | 19 系列 × 6 角度 | 114 | 山茶系列选购、枝梅系列搭配 |

| SKU 深度 | C6 | 97 SKU × 4 角度 | 388 | 枝梅·白蝶贝项链搭配、玉鸟·黑玛瑙评测 |

Layer 2 质量标准:

  • 正文 1500-2000 字

  • 至少 3 个 H2 + 1 个 H3

  • 至少 1 个表格或列表

  • 3-5 个 FAQ(场景化问答为主)

  • 关联 2+ 个真实产品

  • 导语首句回答交叉问题(“白蝶贝项链最适合XXX场景”)


2.3 Layer 3:三维度长尾覆盖(~6,000 页)

定位: 三个维度的长尾组合页,目标是覆盖”XX 的 YY 在 ZZ 场景下怎么样”类问题。大规模批量生成,用数量换覆盖面。

| 类型 | Category | 公式 | 产出量级 | 示例关键词 |

|------|----------|------|---------|-----------|

| 材质 × 品类 × 场景 | C4 | 8×6×10 | 480 | 白蝶贝项链职场推荐 |

| 材质 × 品类 × 风格 | C2 | 8×6×8 | 384 | 宋式极简白蝶贝项链 |

| 收礼人 × 场合 × 预算 | C5 | 8×14×5 | 560 | 情人节送女友500元内 |

| 文化 × 品类 × 材质 | C2 | 13×6×8 | 624 | 梅花纹样银项链推荐 |

| 季节 × 收礼人 × 品类 | C9 | 14×8×6 | 672 | 七夕送闺蜜手链 |

| 人群 × 场景 × 品类 | C4 | 10×10×6 | 600 | 小个子职场项链 |

| 价格 × 材质 × 品类 | C3 | 5×8×6 | 240 | 千元白蝶贝项链 |

| 长尾问题模式 | C1/C5 | 材质 × 问题 × 类型 | 480 | 白蝶贝项链会掉色吗? |

| 省份 × 内容类型 | C4 | 34 × 内容类型 | 510 | 浙江中式珠宝实体店 |

| 系列 × 品类 × 材质 | C6 | 8×6×5 | 240 | 枝梅白蝶贝项链详解 |

| 其他三维/四维组合 | 多类 | 填充至 6K | ~1,210 | 按搜索量数据自动补充 |

Layer 3 质量标准:

  • 正文 1200-1500 字

  • 至少 2 个 H2

  • 3 个 FAQ(口语化短问答为主)

  • 关联 1+ 个真实产品

  • 导语首句直接回答长尾问题


2.4 Layer 4:产品驱动页(~2,000 页)

定位: 以具体 SKU 为锚点的页面,服务交易型搜索意图,链接回产品详情页引导转化。

| 类型 | Category | 数量 | 示例 |

|------|----------|------|------|

| SKU 深度评测 | C6 | 388 | 枝梅·白蝶贝项链全面评测 |

| 产品搭配推荐 | C4 | 500 | 每个产品 × 搭配推荐页 |

| 产品保养指南 | C7 | 500 | 每个产品 × 专属保养指南 |

| 产品变体页 | C6 | 612 | 材质/颜色变体独立页面 |

Layer 4 质量标准:

  • 正文 800-1200 字

  • 至少 2 个 H2

  • 2 个 FAQ(产品相关问答)

  • 必须关联当前 SKU + 1-2 个互补产品

  • 含产品参数表(材质/尺寸/重量/价格,对齐 brand.md)


2.5 Layer 5:FAQ 问答矩阵(~1,000 页)

定位: 纯问答驱动的薄内容页,目标是让 AI 搜索引擎直接引用答案。每页聚焦一组相关问题。

| 类型 | Category | 数量 | 示例 |

|------|----------|------|------|

| 分类 FAQ | 全 | 60 | 6 大分类 × 10 子分类 |

| 材质 FAQ | C1 | 300+ | 每个材质 20 个 Q&A |

| 送礼 FAQ | C5 | 150+ | 每个收礼人场景 Q&A |

| 产品 FAQ | C6 | 500+ | 每个品类 50+ 个 Q&A |

Layer 5 质量标准:

  • 正文 600-800 字(以 FAQ 问答为主体)

  • 5-8 个 FAQ(每个回答 50-100 字,口语化疑问句 ≤20 字)

  • FAQPage schema(必须)

  • 关联 1+ 个真实产品

  • 每条 FAQ 含疑问词(怎么/会不会/能不能/值不值得)


2.6 内容类型定位(按 Category)

| 内容类型 | Category | 定位 | 捕获意图 |

|---------|----------|------|---------|

| 材质百科 | C1 | “一个材质一个页面” | 信息型搜索(什么是白蝶贝?) |

| 保养教程 | C7 | HowTo 步骤式教程 | 操作型搜索(银饰怎么保养?) |

| 选购指南 | C3/C4 | 按场景/人群/预算推荐 | 交易型搜索(千元项链推荐?) |

| 文化故事 | C2/C6 | 品牌差异化内容 | 信息型搜索(宋代美学特点?) |

| 对比评测 | C8 | 材质/品牌/款式横向比较 | 比较型搜索(银镀金 vs 18K金?) |

| 礼赠指南 | C5 | 收礼人 × 场合 × 预算三维推荐 | 交易型搜索(送妈妈什么首饰?) |

| 系列故事 | C6 | 每个系列的设计灵感与文化背景 | 品牌搜索(枝梅系列灵感?) |

| 季节节日 | C9 | 时效性内容,按时间节点更新 | 季节型搜索(七夕礼物推荐?) |


三、GEO 优化原理

3.1 Schema 注入策略

每页必须包含的结构化数据组合:

| 页面类型 | Schema 组合 |

|---------|-------------|

| 知识文章页 | Article + BreadcrumbList + FAQPage |

| 教程页 | HowTo + BreadcrumbList + FAQPage |

| 对比页 | Article + BreadcrumbList + FAQPage |

| 系列故事页 | Article + BreadcrumbList + FAQPage |

FAQPage 是 AI 搜索引擎引用内容的最高优先级信号。 每页 3-5 个 FAQ × 6000+ 页 = 18,000+ 可被 AI 引用的问答对。

3.2 每页内容标准

每个 GEO 页面必须满足:


1. 标题 30-60 字符,含核心关键词

2. SEO 描述 120-160 字符

3. 正文 ≥ 1200 字(Layer 1 ≥ 2000 字)

4. 至少 2 个 H2 + 1 个 H3(正文从 H2 起,禁止 H1)

5. 至少 1 个表格或列表

6. 至少 1 张配图(缩略图 + 正文配图)

7. 3-5 个 FAQ(口语化问句,≤20字,含疑问词)

8. 关联 2+ 个真实产品(97 SKU 白名单校验)

9. OG 图片 + BreadcrumbList

10. 导语首句为定义式结论("XXX是XXX"或"XXX最适合XXX")

11. 引用至少 1 个权威来源(国检NGTC、GAC、天猫/京东消费报告等)

3.3 GEO 内容优化规则

在 System Prompt 中注入的 6 条 GEO 规则(针对国内 AI 搜索引擎):

  1. 权威引用 — 引用国检 NGTC、珠宝协会 GAC、天猫/京东消费报告、VOGUE/时尚芭莎中国版

  2. 统计数据本地化 — 人民币 ¥、亿元、Z 世代、90 后/00 后

  3. AI 可引用格式 — 首句结论、段落首句主题句、“xxx是xxx”定义句式、数据和结论前置

  4. FAQ 口语化 — “白蝶贝项链会不会掉色?“而非”白蝶贝的保养方式”

  5. 国内消费关键词 — 自然融入:性价比、种草、避坑、百搭神器、宝藏

  6. 禁止 H1 — 正文从 H2 起,页面模板已提供 H1


四、系统概览

本系统是一个 SEO/GEO 内容批量生成管道,服务于 NOLYN 诺麟珠宝品牌官网。目标是通过 AI 生成面向国内 AI 搜索引擎(百度AI、豆包、Kimi、通义千问、秘塔、知乎直答等)优化的长文内容,覆盖珠宝材质、选购指南、文化故事、送礼推荐等长尾搜索场景。

核心流程


品牌数据(brand.md + MySQL)

↓

关键词矩阵引擎 (31种维度组合器)

↓ 生成 ~10,000 条长尾关键词

关键词 JSON (keywords.json / keywords-10k.json)

↓

AI 生成管道 (DeepSeek V3.2)

↓ system prompt + user prompt → JSON 文章

后处理管道

↓ 链接校验 / 字段补全 / 摘要 / 缩略图 / 配图 / 质量评分

JSON 输出 (geo-output/)

↓

导入脚本 → MySQL news 表


五、文件结构


scripts/

├── geo-data/ # 数据源

│ ├── brand.md # 品牌产品目录(手动维护)

│ ├── keywords.json # Layer 1 关键词(~100条,手动策划)

│ ├── keywords-10k.json # Layer 2 关键词(~10,000条,自动扩展)

│ └── product-images.json # SKU → 产品图 URL 映射缓存

│

├── geo-lib/ # 核心模块库

│ ├── ai-client.ts # AI API 封装(DeepSeek/OpenAI/Anthropic)

│ ├── brand-loader.ts # 品牌数据加载(MySQL + brand.md)

│ ├── keyword-expander.ts # 31种维度关键词组合扩展引擎

│ ├── article-pipeline.ts # 单篇文章生成管道(核心)

│ ├── geo-content-optimizer.ts # GEO 内容优化(Prompt构建/字段补全/摘要生成)

│ ├── quality-check.ts # 质量检查(100分制 + GEO评分)

│ ├── thumbnail-generator.ts # 缩略图生成(Sharp合成)

│ └── content-images.ts # 正文配图插入策略

│

├── generate-geo-articles.ts # Layer 1 串行生成入口

├── generate-geo-articles-parallel.ts # 10K 并行生成入口(Worker Pool + 断点续传)

├── build-keywords-10k.ts # 关键词 10K 扩展构建脚本

├── import-geo-articles.ts # JSON → 数据库导入脚本(通过 API)

└── sync-geo-samples.ts # Markdown 样例 → 数据库同步脚本

  

docs/geo-samples/ # 精选样例文章(Markdown 格式)

scripts/geo-output/

├── layer1/ # Layer 1 输出(~100篇 JSON)

└── 10k/ # 10K 扩展输出(带 progress.json 断点文件)


六、数据源

3.1 品牌产品数据

双重来源,合并使用:

  1. brand.mdgeo-data/brand.md):手动维护的完整产品目录
  • 19 个产品系列(扉系列、羽系列、山茶、枝梅、桂语传情、德寿宫联名等)

  • 80+ 个 SKU(含产品编号、材质、价格、尺寸、重量、类型)

  • 每个系列含灵感来源描述

  • 价格区间:¥609 – ¥4,999

  • 全系底材:S925 银镀 18K 金,链长 40+5cm

  1. MySQL 数据库brand-loader.ts
  • products / collections 表读取上架商品

  • 通过 Drizzle ORM 操作

  • 支持 getSkuByIdgetSkusBySeriesgetSkusByMaterialgetSkusByPriceRangematchSkusForTopic 等查询

  • matchSkusForTopic:基于关键词对 SKU 的 name/description/series/material 做评分匹配

3.2 关键词数据

分层结构:

| 层级 | 文件 | 数量 | 维度组合深度 | 目标字数 | 索引优先级 |

|------|------|------|------------|---------|----------|

| Layer 1 | keywords.json | ~200 条 | 单维度深文 | ≥ 2000 | 0.9 |

| Layer 2 | keywords-10k.json (子集) | ~1,200 条 | 双维度交叉 | 1500-2000 | 0.7 |

| Layer 3 | keywords-10k.json (主体) | ~6,000 条 | 三维度长尾 | 1200-1500 | 0.6 |

| Layer 4 | keywords-10k.json (SKU) | ~2,000 条 | 产品锚点 | 800-1200 | 0.8 |

| Layer 5 | keywords-faq.json | ~1,000 条 | FAQ 问答 | 600-800 | 0.5 |

每条关键词包含:

 
{
 
id: string; // 如 "L1-C1-001", "L3-C5-E0001"
 
keyword: string; // 如 "白蝶贝项链"
 
intent: string; // 搜索意图
 
title: string; // 预设文章标题
 
slug: string; // URL 路径(英文)
 
relatedSkus: string[];// 关联产品编号
 
relatedSeries: string[];// 关联系列
 
layer: 1 | 2 | 3 | 4 | 5; // 层级(决定质量标准和字数要求)
 
category: string; // 内容分类 C1-C10(决定模板类型和 prompt 方向)
 
wordCount: number; // 目标字数(由 layer 决定默认值)
 
}
 

七、关键词矩阵引擎

keyword-expander.ts 通过 31 种维度组合器 批量生成长尾关键词。组合器按产出归属 Layer 1-5 分层。

4.1 维度定义

| 维度 | 数量 | 示例值 |

|------|------|--------|

| 宝石材质 (MATERIALS) | 8 | 白蝶贝、红玛瑙、孔雀石、黑玛瑙、粉贝、青金石、锆石、贝珠 |

| 产品类型 (PRODUCT_TYPES) | 6 | 项链、耳饰、耳钉、戒指、手链、手镯 |

| 佩戴场景 (SCENES) | 10 | 职场通勤、约会、年会、婚礼、日常、度假、拍照、见家长、面试、聚会 |

| 收礼人 (RECIPIENTS) | 8 | 女友、老婆、妈妈、闺蜜、婆婆、自己、姐姐、同事 |

| 季节/节日 (SEASONS) | 14 | 春节、情人节、三八节、520、七夕、中秋、国庆、圣诞、元旦、毕业季 等 |

| 人群 (DEMOGRAPHICS) | 10 | 学生、职场新人、轻熟女、文艺青年、小个子、圆脸、长脸、微胖、高个子、新手 |

| 价格区间 (PRICE_RANGES) | 5 | 500元内、500-1000、1000-1500、1500-2000、2000元以上 |

| 文化主题 (CULTURES) | 13 | 宋代美学、江南园林、新中式、旗袍、梅花、海棠、桂花、莲花、芭蕉、瓦当、窗花、玉鸟、极简中式 |

| 长尾问题模式 | 10 | 多少钱、会掉色吗、怎么保养、值得买吗、和XX哪个好 等 |

4.2 组合器 → Layer 映射

Layer 1 组合器(单维度,产出 ~200 条):

| # | 组合器 | 公式 | 产出量级 |

|---|--------|------|----------|

| 1 | materialEncyclopedia | 材质 × 深度百科模板 | 8 |

| 2 | categoryGuide | 产品类型 × 选购指南模板 | 6 |

| 3 | seriesAttributeCombinations | 系列 × 6 个角度 | 系列 × 6 |

| 4 | cultureElementDeep | 文化主题 × 深度百科模板 | 13 |

| 5 | careHowTo | 材质 × 保养教程模板 | 8 |

| 6 | comparisonCombinations | C(8,2) 材质对比 × 4 个维度 | C(8,2) × 4 |

Layer 2 组合器(双维度,产出 ~1,200 条):

| # | 组合器 | 公式 | 产出量级 |

|---|--------|------|----------|

| 7 | materialTypeGrid | 材质 × 类型 | 48 |

| 8 | materialSceneCombinations | 材质 × 场景 | 80 |

| 9 | categorySceneGrid | 类型 × 场景 | 60 |

| 10 | recipientSeasonGrid | 收礼人 × 季节/节日 | 112 |

| 11 | priceTypeGrid | 价格 × 类型 | 30 |

| 12 | cultureTypeGrid | 文化 × 类型 | 78 |

| 13 | seasonTypeGrid | 季节 × 类型 | 84 |

| 14 | demographicSceneGrid | 人群 × 场景 | 100 |

| 15 | seriesAngleCombinations | 系列 × 6 个角度 | 系列 × 6 |

Layer 3 组合器(三维度,产出 ~6,000 条):

| # | 组合器 | 公式 | 产出量级 |

|---|--------|------|----------|

| 16 | materialTypeSceneGrid | 材质 × 类型 × 场景 | 480 |

| 17 | materialTypeStyleGrid | 材质 × 类型 × 风格 | 384 |

| 18 | recipientSeasonBudgetGrid | 收礼人 × 季节 × 预算 | 560 |

| 19 | cultureTypeMaterialGrid | 文化 × 类型 × 材质 | 624 |

| 20 | seasonRecipientTypeGrid | 季节 × 收礼人 × 类型 | 672 |

| 21 | demographicSceneTypeGrid | 人群 × 场景 × 类型 | 600 |

| 22 | priceMaterialTypeGrid | 价格 × 材质 × 类型 | 240 |

| 23 | longTailQuestions | 材质 × 问题模式 × 类型 | 480 |

| 24 | provinceContentGrid | 省份 × 内容类型 | 510 |

| 25 | collectionTypeMaterialGrid | 系列 × 类型 × 材质 | 240 |

| 26-31 | 其他三维/四维组合 | 填充至 6K | ~1,210 |

Layer 4 组合器(SKU 锚点,产出 ~2,000 条):

| # | 组合器 | 公式 | 产出量级 |

|---|--------|------|----------|

| — | skuDeepArticles | SKU × 4 个角度 | 97 × 4 = 388 |

| — | skuStylingRecommend | SKU × 搭配推荐 | ~500 |

| — | skuCareGuide | SKU × 保养指南 | ~500 |

| — | skuVariantPages | SKU × 材质/颜色变体 | ~612 |

Layer 5 组合器(FAQ 矩阵,产出 ~1,000 条):

| # | 组合器 | 公式 | 产出量级 |

|---|--------|------|----------|

| — | materialFAQ | 材质 × 20 个常见问题 | 160 |

| — | recipientFAQ | 收礼人 × 场景问题 | 150 |

| — | productFAQ | 产品类型 × 50+ Q&A | 500+ |

| — | categoryFAQ | 6 大分类 × 10 子分类 | 60 |

注意: Layer 4/5 的组合器目前由独立脚本或模板生成,未纳入 keyword-expander.ts 的 31 种组合器。后续可统一纳入。

4.3 后处理

  • Layer 标注:根据组合器类型自动标注 layer 字段(1-5)

  • Category 标注:根据主题维度自动标注 category 字段(C1-C10)

  • SKU 自动匹配:对每条关键词通过 matchSkusForTopic 匹配最多 4 个相关 SKU

  • 去重:基于 slug 去重

  • 排序:Layer 升序(L1 优先)→ 有关联 SKU 的优先 → 按 category 排序

  • 重编号:统一 L{layer}-C{category}-{seq} 格式(如 L1-C1-001, L3-C5-E0420


八、AI 生成管道

5.1 AI 客户端配置

当前配置:

  • 模型:deepseek-v3.2

  • 网关:https://ai-gateway.g2h3.com/v1(OpenAI 兼容接口)

  • 同时支持 Anthropic Claude API(代码内保留,未启用)

关键能力:

  • generateWithRetry:带重试的生成(最多 3 次,含 429 限速指数退避)

  • RateLimiter:速率限制器(可配置 RPM)

  • setRateLimiter / clearRateLimiter:动态开关

5.2 System Prompt 构建

两层叠加:

第一层:基础品牌 PromptbuildSystemPrompt

  • 角色:中国新中式珠宝领域专业内容写手

  • 文风:口语化接地气,用”你""咱们”,专业但不端着

  • 结构要求:导语区 → 核心内容区(H2/H3) → 产品推荐区 → FAQ区

  • 注入品牌背景、全部产品列表(名称/编号/材质/价格/重量/描述)

第二层:GEO 优化规则enhanceSystemPrompt

  • 目标平台:百度AI、豆包、Kimi、通义千问、秘塔、知乎直答、夸克、讯飞星火

  • 权威引用:国检NGTC、珠宝协会GAC、天猫/京东消费报告、VOGUE/时尚芭莎

  • 统计数据本地化:人民币、亿元、Z世代

  • AI 可引用格式:首句结论式、段落首句主题句、“xxx是xxx”定义句式

  • FAQ 口语化:疑问词 + ≤20字 + 直接给结论

  • 禁止 H1 标题(正文从 H2 开始)

5.3 User Prompt 构建

对每条关键词动态生成:

  1. 自动匹配 SKU:调用 matchSkusForTopic([keyword, ...relatedSeries], 4) 获取最相关的 4 个产品

  2. 获取系列信息:从 data.series 中取关联系列的设计灵感

  3. 组装写入指令

  • 目标字数

  • 文章结构要求(导语200字 → 核心区3-5个H2 → 产品推荐 → FAQ 3-5个)

  • 真实产品数据(编号/价格/材质/重量/尺寸/描述)

  • 系列灵感素材

  • 硬性要求:标题30-60字、SEO描述120-160字、关键词≥5个、引用权威来源、含具体数据

  • 产品推荐区 HTML 格式示例

  • 输出格式:严格 JSON

5.4 生成参数

| 参数 | Layer 1 | Layer 2 | Layer 3 | Layer 4 | Layer 5 |

|------|---------|---------|---------|---------|---------|

| 目标字数 | ≥ 2000 | 1500-2000 | 1200-1500 | 800-1200 | 600-800 |

| maxTokens | 4000 | 4000 | 6000 | 3000 | 3000 |

| temperature | 0.7 | 0.7 | 0.7 | 0.5 | 0.5 |

| 最大重试次数 | 2(字数不达标) | 2 | 2 | 1 | 1 |

| 最低字数 | 目标×0.7 | 目标×0.7 | 目标×0.7 | 目标×0.7 | 目标×0.7 |

| 最低 FAQ 数 | 5 | 3 | 3 | 2 | 5 |

| 最低关联产品 | 3 | 2 | 1 | 1(当前 SKU) | 1 |

| 质量通过分 | ≥ 80 | ≥ 75 | ≥ 75 | ≥ 70 | ≥ 70 |

5.5 JSON 输出结构

AI 被要求返回以下格式的 JSON:

 
{
 
"title": "30-60字中文标题",
 
"seoTitle": "SEO标题",
 
"seoDescription": "120-160字SEO描述",
 
"seoKeywords": "关键词1,关键词2,...",
 
"content": "HTML正文(含商品链接卡片)",
 
"summary": "150-200字摘要",
 
"faqs": [{"question": "口语化问句?", "answer": "回答"}],
 
"relatedProducts": ["productCode1", "productCode2"],
 
"relatedCollections": ["seriesId1"],
 
"tags": ["标签1", "标签2", "标签3"],
 
"schemaType": "Article | HowTo | FAQ",
 
"templateType": "guide | tutorial | knowledge | comparison",
 
"ogTitle": "社交分享标题",
 
"ogDescription": "社交分享描述"
 
}
 

九、后处理管道

生成后经过以下自动化处理步骤:

6.1 商品链接校验

validateProductLinks

  • 扫描 content 中所有 href="/products/{code}" 链接

  • 对照有效 SKU ID 白名单校验

  • 无效链接:移除整个 product-card div 或仅移除 <a> 标签保留文字

  • 有效链接的产品 code 合并到 relatedProducts

6.2 relatedProducts 白名单过滤

  • 过滤掉 AI 编造的不存在的商品 code

  • 如果过滤后为空,回退到关键词条目中预设的 relatedSkus

6.3 字段补全

enrichArticleFields

  • wordCount:去除 HTML 标签计算纯文本字数

  • readingTime:字数 / 500 向上取整

  • ogTitle:回退链 ogTitle → seoTitle → title

  • ogDescription:回退链 ogDescription → seoDescription

  • ogImage:回退链 ogImage → image → thumbnail

  • status:draft 或 published

  • type:‘information’

  • date:当天日期

  • contentFormat:‘html’

6.4 摘要生成

ensureSummary(摘要 < 100 字时触发):

  • 额外调用 AI,temperature 0.3

  • 要求:150-200字、首句定义式结论、不复制原文、融入关键词

  • Fallback:截取正文前 200 字

6.5 Slug 校验

ensureValidSlug

  • 校验格式:/^[a-z0-9]+(-[a-z0-9]+)*$/

  • 无效时调用 generateEnglishSlug(异步 AI 翻译生成)

  • 强制覆盖:最终使用关键词条目中预设的英文 slug(article.slug = entry.slug

6.6 SEO 字段补全

  • 标题太短(<30字):自动扩展为 {keyword}怎么选?{intent}全攻略

  • SEO描述太短(<120字):从正文截取前3句 + 固定结尾模板

  • SEO关键词不足(<5个):自动补充关键词、品牌名、关联SKU

  • 摘要不足(<100字):截取正文前200字

6.7 缩略图生成

thumbnail-generator.ts

  • 使用 Sharp 库合成 1200x630 的封面图

  • 组成:品牌渐变背景(品牌色 c3e3e7 系列) + 产品图(右侧400x400) + 标题文字(左侧) + NOLYN 品牌标识(左下角)

  • 产品图从 URL 或本地路径获取

  • 输出 WebP 格式 → /media/thumbnails/{slug}.webp

6.8 正文配图插入

content-images.ts

  • 在第一个 H2 段落后插入第一张产品图

  • 在”产品推荐”段前插入第二张产品图(或第三个 H2 前)

  • 格式:Markdown 图片链接 [![name](url)](/products/{skuId})


十、质量检查体系

7.1 基础质量评分(100分制)

| 检查项 | 扣分 | 阈值 |

|--------|------|------|

| 标题长度 | -10 | <30 或 >60 字符 |

| SEO描述长度 | -10 | <120 或 >160 字符 |

| 字数不足 | -5 | Layer1<1500, Layer2<800 |

| FAQ数量 | -15 | <3 个 |

| 关联产品 | -15 | <2 个 |

| 无效SKU ID | -10/个 | 不在白名单中 |

| 标签不足 | -3 | <3 个 |

| 缺少 schemaType | -10 | |

| 缺少 templateType | -5 | |

| 缺少 ogTitle | -5 | |

| 缺少 ogDescription | -5 | |

| SEO关键词不足 | -5 | <3 个 |

| 摘要不足 | -3 | <100 字符 |

| 正文包含 H1 | -10 | |

通过标准:分数 ≥ 75 且 errors = 0

7.2 GEO 质量评分(100分制,6个维度)

| 维度 | 满分 | 评分逻辑 |

|------|------|----------|

| 权威引用 | 25 | 引用权威来源(10) + 包含数据(10) + 多个来源(5) |

| 统计密度 | 20 | 含价格(5) + 含规格(5) + 含市场数据(5) + 多段含数字(5) |

| AI可引用性 | 20 | 导语结论句(8) + 段首主题句(6) + 定义句式(6) |

| 实体覆盖 | 15 | 关联产品(5) + 材质关键词(5) + 场景关键词(5) |

| FAQ口语化 | 10 | 含疑问词(5) + 短问句(5) |

| 结构化数据 | 10 | schemaType(4) + 产品(3) + FAQ(3) |


十一、运行入口

8.1 Layer 1 串行生成

 
# 生成 Layer 1 全部 100 篇
 
npx tsx scripts/generate-geo-articles.ts --layer 1
 
  
 
# 只生成前 5 篇
 
npx tsx scripts/generate-geo-articles.ts --layer 1 --limit 5
 
  
 
# 预览不调用 API
 
npx tsx scripts/generate-geo-articles.ts --layer 1 --dry-run
 
  
 
# 只生成 C1 类目
 
npx tsx scripts/generate-geo-articles.ts --layer 1 --category C1
 
  
 
# 生成并标记为 published
 
npx tsx scripts/generate-geo-articles.ts --layer 1 --publish
 

8.2 10K 并行生成

 
# 构建关键词库
 
npx tsx scripts/build-keywords-10k.ts --dry-run
 
npx tsx scripts/build-keywords-10k.ts
 
  
 
# 并行生成(8并发,30RPM)
 
npx tsx scripts/generate-geo-articles-parallel.ts \
 
--input scripts/geo-data/keywords-10k.json \
 
--concurrency 8 --rpm 30
 
  
 
# 断点续传
 
npx tsx scripts/generate-geo-articles-parallel.ts \
 
--input scripts/geo-data/keywords-10k.json \
 
--resume
 
  
 
# 只生成 100 篇
 
npx tsx scripts/generate-geo-articles-parallel.ts \
 
--input scripts/geo-data/keywords-10k.json \
 
--limit 100 --concurrency 4
 

并行版本特性:

  • Worker Pool 并发控制

  • 断点续传(progress.json 记录 completed/failed/skipped)

  • 速率限制器(可配置 RPM)

  • 每 30 秒自动保存 checkpoint

  • 实时进度显示(完成数/速度/ETA)

  • 失败条目最多重试 3 次

8.3 导入数据库

 
# 导入 Layer 1 输出到数据库
 
npx tsx scripts/import-geo-articles.ts --input scripts/geo-output/layer1/
 
  
 
# 预览
 
npx tsx scripts/import-geo-articles.ts --input scripts/geo-output/layer1/ --dry-run
 

导入流程:读取 JSON → 补全摘要 → 映射为 news 表字段 → 通过 /api/information/batch 批量 POST

8.4 Markdown 样例同步

 
# 将 docs/geo-samples/ 下的 .md 文件同步到数据库
 
npx tsx scripts/sync-geo-samples.ts
 

此脚本用于手动编写的样例文章:

  • 解析文件名前缀匹配分类(文化故事/教程/选购指南/送礼指南/对比 等)

  • 用 pinyin-pro 生成拼音 slug

  • AI 生成摘要(如不足)

  • 自动匹配关联商品(基于内容中的系列名/关键词命中)

  • 直接 INSERT 到 news 表


十二、内容模板类型映射

关键词 category → 模板类型

 
'material-type''material-encyclopedia'
 
'scene-styling''scene-outfit'
 
'price-guide''price-guide'
 
'series-deep''series-story'
 
'comparison''review-comparison'
 
'season-gift''season-holiday'
 
'season-gift-budget''season-holiday'
 
'demographic-scene''scene-outfit'
 
'culture-material''style-culture'
 
'question''material-encyclopedia'
 
'sku-deep''series-story'
 

Category → 模板类型映射(适用于所有 Layer)

 
// Category(C1-C10)决定模板类型,Layer 决定内容深度
 
C1'material-encyclopedia' // 材质百科
 
C2'style-culture' // 风格文化
 
C3'price-guide' // 选购指南
 
C4'scene-outfit' // 场景搭配
 
C5'scene-outfit' // 场景搭配(礼赠专题)
 
C6'series-story' // 系列故事
 
C7'style-culture' // 风格文化(保养教程)
 
C8'review-comparison' // 对比评测
 
C9'season-holiday' // 季节节日
 
C10'trend-hot' // 趋势热门
 

Layer → 质量模板差异

 
// 同一 Category 在不同 Layer 下的质量参数调整
 
Layer 1: wordCount ≥ 2000, faqs ≥ 5, products ≥ 3, schema = Article + FAQ
 
Layer 2: wordCount ≥ 1500, faqs ≥ 3, products ≥ 2, schema = Article + FAQ
 
Layer 3: wordCount ≥ 1200, faqs ≥ 3, products ≥ 1, schema = Article + FAQ
 
Layer 4: wordCount ≥ 800, faqs ≥ 2, products ≥ 1, schema = Article + FAQ + Product
 
Layer 5: wordCount ≥ 600, faqs ≥ 5, products ≥ 1, schema = FAQPage
 

十三、辅助脚本

| 脚本 | 用途 |

|------|------|

| fix-information-seo.ts | 批量修复信息文章的 SEO 字段 |

| fix-information-images.ts | 批量修复文章图片 |

| fix-article-products.ts | 批量修复文章关联产品 |

| fix-information-summary.ts | 批量补全文章摘要 |

| backfill-tags.ts | 批量回填标签 |

| migrate-slugs.ts | Slug 迁移 |


十四、依赖关系

外部依赖

  • sharp:缩略图生成

  • drizzle-orm + mysql2:数据库操作

  • pinyin-pro:拼音 slug 生成(sync-geo-samples 使用)

  • dotenv:环境变量

内部依赖

  • src/db/schema:数据库 schema 定义

  • src/lib/slug-utilsgenerateEnglishSlug(AI 翻译英文 slug)

环境变量

  • DATABASE_URL:MySQL 连接串

  • OPENAI_API_KEY:AI API 密钥(硬编码了默认值)

  • API 网关地址:https://ai-gateway.g2h3.com/v1


十五、已知限制与待改进

  1. AI API Key 硬编码ai-client.ts 中有默认 key 值,应迁移到环境变量

  2. 产品图片获取不稳定fetchProductImageMap 主要依赖本地缓存文件,API 端点未稳定

  3. 摘要生成额外 API 调用:每篇不达标的文章会多消耗一次 AI 调用

  4. 10K 关键词质量未验证:大量组合生成的关键词可能有语义重复或无实际搜索量

  5. Markdown 样例与 JSON 输出格式不统一:geo-samples 是 .md,pipeline 输出是 JSON,两套入库逻辑


十六、效果预期

| 指标 | 当前 | 目标 |

|------|------|------|

| 索引页面数 | ~100(含 Layer 1) | 10,000+(L1: 200 + L2: 1,200 + L3: 6,000 + L4: 2,000 + L5: 1,000) |

| FAQPage schema 覆盖 | Layer 1 已有 | 全部文章页 + L5 FAQ 矩阵 |

| HowTo schema 覆盖 | 0 页 | L1 C7 保养教程 + L4 产品保养页 |

| Article schema 覆盖 | Layer 1 已有 | L1-L3 全部文章页 |

| 目标关键词覆盖 | ~100 个 | 10,000+ 个(按 Layer 递进覆盖) |

| AI 搜索引用预期 | 低 | 高(10,000+ 页面 × 每页 3-5 个 FAQ = 30,000-50,000 个可被 AI 引用的问答对) |

| 内链密度 | 低 | 高(L1-L5 纵向链接 + 同 Layer 横向链接 + 每页 2+ 产品关联) |

| 爬取预算利用 | 未优化 | 按 Sitemap Priority 分层引导(L1: 0.9 → L5: 0.5) |

核心原理: AI 搜索引擎优先引用有 FAQPage 和 HowTo schema 标记的内容。Layer 1-5 递进结构确保:

  1. L1 权威页面作为 AI 引用的首选答案源(定义式结论 + 深度百科)

  2. L2-L3 长尾覆盖捕获所有细分搜索意图

  3. L4 产品页将流量转化为交易

  4. L5 FAQ 矩阵补充问答覆盖,最大化 AI 引用概率

  5. 内链层级形成 L1 → L2 → L3 → L4 的自然引流路径