跳到主要内容
IM智引科技

研究 / 外贸与 B2B 增长

AI Skill:页面覆盖度审计——找出注册表中无对应页面的词

注册表里躺着一批词,但对应的页面还没建——这是最容易被遗忘的增长机会。这个 Skill 用脚本做注册表与实际路由的差集比对,模型负责按业务价值排序并输出可执行的建页清单。

BLKTECH 编辑部2026年8月4日11 分钟难度 实战免费Node.jsAI Agent

覆盖度审计做三个方向的差集:注册表有但站点无(待建页面)、站点有但注册表无(未纳管页面,风险最高)、注册表有页面但未被索引(GSC 验证)。脚本负责集合运算,模型负责按 priority×搜索量排序并输出建页优先级清单。

AI Skill:页面覆盖度审计——找出注册表中无对应页面的词

三个方向的差集

覆盖度审计不只是“哪些词还没页面”,而是三个方向的完整比对:

        注册表                    实际站点
    ┌──────────────┐          ┌──────────────┐
    │              │          │              │
    │   A 区       │  B 区    │    C 区      │
    │ 有词无页面   │ 已覆盖   │ 有页面无词   │
    │              │          │              │
    └──────────────┘          └──────────────┘
区域 含义 风险/机会
A 区 注册表有词,站点无页面 机会:待建页面清单
B 区 两边都有 正常,但要验证是否被 GSC 索引
C 区 站点有页面,注册表无记录 风险最高:未纳管页面,可能正在抢词

C 区最危险:一个没有在注册表登记的页面,意味着它的 PKW 和 NKW 都没有定义,可能正在和 Pillar 页抢词而无人知晓。


Skill 说明书

# Skill:页面覆盖度审计

## 何时使用
- 用户要求检查内容缺口
- 规划下一季度内容日历前
- 定期(每月)覆盖度检查

## 输入
- `registry.json`(注册表)
- `sitemap.xml` 的 URL 或本地路径(实际站点页面清单)
- 可选:GSC 导出的 Coverage 报告 CSV(验证索引状态)

## 执行步骤

### Step 1:运行确定性脚本
执行 `scripts/coverage-audit.mjs`,获得三个区的 URL 清单。
必须跑脚本,不要人工比对 sitemap。

### Step 2:C 区优先处理(你来判断)
对每个未纳管页面(C 区),判断:
1. 这个页面应该存在吗?
   - 应该 → 输出补登注册表的建议(含推断的 PKW/intent_type/page_type)
   - 不应该(测试页/重复页/过时页)→ 建议 noindex 或 301 重定向
2. 如果应该存在,它的 PKW 是否与已有页面冲突?
   - 冲突 → 标为 error,需要先解决冲突再补登

### Step 3:A 区排序(你来判断)
对待建页面清单,按以下加权排序:
- priority 字段(注册表已有,权重 40%)
- monthly_volume(如有,权重 30%)
- 意图类型(commercial > engineering > informational,权重 20%)
- 是否有对应的 Pillar 已上线(有 Pillar 的 Cluster 优先,权重 10%)

输出 Top 10 待建页面,每项给出建议的 page_type 和内容要点。

### Step 4:B 区索引验证(如提供 GSC 数据)
比对 B 区页面与 GSC Coverage 报告:
- 已索引 → 通过
- 未索引(Discovered/Crawled but not indexed)→ 标为 warn,
  可能原因:内容太薄、无内链、canonical 指向别处

## 输出格式

页面覆盖度审计报告

生成时间:[YYYY-MM-DD] 注册表词数:[N] 站点页面数:[N] 覆盖率:[N]%(B 区 / 注册表总数)

ERROR:未纳管页面且存在词冲突([N] 项)

E1. /products/pump-manufacturer-china/

  • 未在注册表登记
  • 推断 PKW:pump manufacturer china
  • 冲突:与 /products/centrifugal-pumps/ 的 PKW centrifugal pump manufacturer 语义重叠
  • 建议动作:301 重定向到 /products/centrifugal-pumps/

WARN:未纳管页面([N] 项)

W1. /blog/pump-maintenance-tips/

  • 未在注册表登记
  • 推断 PKW:centrifugal pump maintenance
  • 推断 intent_type:informational
  • 推断 page_type:cluster-resource
  • 建议动作:补登注册表,NKW 加入 manufacturer, supplier, OEM, buy, quote

待建页面清单(Top 10,按优先级)

# PKW intent page_type priority 月搜索量 建议 slug
1 centrifugal pump for mining dewatering engineering cluster-app 5 320 /applications/centrifugal-pump-mining/
2

每项附内容要点(3–5 条)。

已覆盖但未被索引([N] 项,如有 GSC 数据)

/applications/pump-hvac/

  • GSC 状态:Crawled - currently not indexed
  • 可能原因:内容 320 词(偏薄),无内链指向该页
  • 建议动作:扩充内容至 800+ 词,从 Pillar 页添加内链

## 禁止行为
- 不要自动创建页面(只输出清单)
- 不要跳过 C 区分析——未纳管页面是最高优先级
- 待建页面清单不要超过 10 项(避免清单太长无法执行)

确定性脚本

// scripts/coverage-audit.mjs
import fs from 'fs/promises';

const registry = JSON.parse(await fs.readFile('registry.json', 'utf8'));

// 从 sitemap 提取实际页面 URL
async function getSitemapUrls(sitemapPath) {
  const xml = await fs.readFile(sitemapPath, 'utf8');
  const matches = [...xml.matchAll(/<loc>(.*?)<\/loc>/g)];
  return matches.map(m => {
    const url = new URL(m[1]);
    return url.pathname;
  });
}

const sitemapUrls = await getSitemapUrls('dist/sitemap-0.xml');
const sitemapSet = new Set(sitemapUrls);

// 注册表中的 page_slug 集合(去重,因为一个页面可以有多行)
const registrySlugs = new Set(
  registry
    .filter(r => r.status === 'active')
    .map(r => r.page_slug)
);

// A 区:注册表有,站点无
const missingPages = [...registrySlugs].filter(s => !sitemapSet.has(s));

// C 区:站点有,注册表无
const unmanagedPages = sitemapUrls.filter(u => !registrySlugs.has(u));

// B 区:两边都有
const covered = [...registrySlugs].filter(s => sitemapSet.has(s));

// A 区页面的详细信息(含 priority 和搜索量,供模型排序)
const missingDetails = missingPages.map(slug => {
  const rows = registry.filter(r => r.page_slug === slug);
  return {
    slug,
    pkw: rows[0]?.pkw,
    intent: rows[0]?.intent_type,
    pageType: rows[0]?.page_type,
    priority: rows[0]?.priority,
    monthlyVolume: rows[0]?.monthly_volume ?? null,
    allKeywords: rows.map(r => r.keyword),
  };
});

console.log(JSON.stringify({
  summary: {
    registryPages: registrySlugs.size,
    sitemapPages: sitemapUrls.length,
    covered: covered.length,
    missing: missingPages.length,
    unmanaged: unmanagedPages.length,
    coverageRate: ((covered.length / registrySlugs.size) * 100).toFixed(1) + '%',
  },
  // A 区:待建页面
  missingPages: missingDetails,
  // C 区:未纳管页面(最高优先级)
  unmanagedPages,
  // B 区:已覆盖(供 GSC 索引状态验证)
  coveredPages: covered,
}, null, 2));

与死链审计的边界

站内已有的「Sitemap × 实际路由差异审计」Skill 检查的是技术层面的一致性(sitemap 里有但实际 404、实际存在但 sitemap 遗漏)。

覆盖度审计检查的是策略层面的一致性(注册表规划了但没建、建了但没规划)。

两者输入不同、判定标准不同、修复动作不同——不要合并成一个 Skill,会让说明书的判定规则变得模糊。


GSC 索引验证的补充说明

B 区页面存在不等于被索引。常见的“建了但没进索引”原因:

GSC 状态 含义 修复方向
Discovered - currently not indexed 发现了但没爬 增加内链,提交 URL
Crawled - currently not indexed 爬了但没收录 内容太薄或价值不足,扩充内容
Duplicate without user-selected canonical 判定为重复内容 检查是否与其他页面内容过于相似
Excluded by ‘noindex’ tag 被 noindex 了 检查是否误加了 noindex

pSEO 批量生成的页面最容易出现 Crawled - currently not indexed——因为内容相似度高。这也是为什么第27篇强调每个场景页必须有独有的技术内容。


→ AI Skill:Cannibalization 诊断——同站竞争页面识别

NEXT ACTION / 下一步

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

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

继续

RELATED / 相关推荐

接着读这些

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