mcpField
B
blog-taxonomy

blog-taxonomy

github.com/infrasity-labs营销与增长15193 次安装18 周前更新
代码仓库

关于 blog-taxonomy

blog-taxonomy 用于管理内容文件及 CMS 平台中的博客标签、分类和主题集群。它从文章内容中建议分类体系,通过认证 API 同步到 CMS,并检查全站分类体系的健康状况。

主要功能

  1. 01根据内容建议标签和分类
  2. 02对候选词分组并排序
  3. 03通过 CMS API 同步分类体系
  4. 04审计内容稀少、孤立及重复标签
  5. 05支持 WordPress、Shopify、Ghost、Strapi 和 Sanity

适用场景

  1. 01为新博客文章建议标签
  2. 02将分类和标签同步到 CMS
  3. 03查找全站未使用或覆盖率低的标签
  4. 04检查文章间分类体系的一致性

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/infrasity-labs/dev-gtm-claude-skills --skill blog-taxonomy

安装后在 Claude Code 中输入/blog-taxonomy确认已加载。

详细介绍

博客分类体系

跨 CMS 平台管理标签、分类和主题集群。

命令

命令用途
/blog taxonomy suggest <file>从内容中提取候选标签和分类
/blog taxonomy sync <cms>通过经过身份验证的 API 将分类体系推送到 CMS
/blog taxonomy audit [directory]检查内容单薄的标签、孤立标签和分类体系膨胀问题

标签建议工作流

第 1 步:解析内容结构

读取目标文件并提取:

  • 所有 H2 和 H3 标题(主要主题信号)
  • 加粗和斜体短语(强调信号)
  • 已有的 frontmatter 标签/分类(如果存在)
第 2 步:频率分析

扫描正文,查找高频短语:

  • 1 个词的术语:至少出现 4 次(不包括停用词)
  • 2 个词的短语:至少出现 3 次
  • 3 个词的短语:至少出现 2 次

排除常见的非标签词:冠词、介词、连词、代词。

第 3 步:语义分组

将相关候选项归为集群:

  • 合并单复数变体(保留更常见的形式)
  • 合并带连字符和不带连字符的形式
  • 将同义词归入频率最高的术语
第 4 步:去重和排序
  • 对 slug 化名称进行模糊匹配(Levenshtein 距离 <= 2)
  • 为每个候选项评分:(frequency * 2) + (heading_presence * 5) + (emphasis * 1)
  • 返回排名前 5-10 的建议
输出格式
## Tag Suggestions: [Post Title]

| Rank | Tag | Score | Source |
|------|-----|-------|--------|
| 1 | content-marketing | 18 | H2 + 6 mentions |
| 2 | seo-strategy | 14 | H3 + 4 mentions |
| 3 | keyword-research | 11 | 5 mentions + bold |

### Suggested Categories
- Primary: [best-fit category]
- Secondary: [optional second category]

CMS 适配器

适配器概览
CMSAPI 类型身份验证方式标签模型
WordPressREST应用程序密码(base64)带 ID 的一等实体
ShopifyGraphQL(Admin API)Admin API 访问令牌Article 上的字符串数组
GhostREST(Admin API)使用 JWT 签名的 API 密钥一等实体
StrapiREST 或 GraphQLAPI 令牌(Bearer)用户定义的内容类型
SanityGROQ / Mutations项目令牌(Bearer)文档类型
WordPress 适配器

列出标签:

GET {CMS_URL}/wp-json/wp/v2/tags?per_page=100&search={keyword}
Authorization: Basic {base64(username:app_password)}

创建标签:

POST {CMS_URL}/wp-json/wp/v2/tags
Body: {"name": "Tag Name", "slug": "tag-name", "description": "Optional"}

列出分类(分层结构,支持 parent 字段):

GET {CMS_URL}/wp-json/wp/v2/categories?per_page=100

创建分类:

POST {CMS_URL}/wp-json/wp/v2/categories
Body: {"name": "Category", "slug": "category", "parent": 0}

为文章分配标签:

POST {CMS_URL}/wp-json/wp/v2/posts/{id}
Body: {"tags": [1, 2, 3], "categories": [4]}

分页:根据 X-WP-TotalPages 标头获取完整列表。

Shopify 适配器

Shopify 的标签是 Article 对象上的字符串数组,而非一等实体。

更新文章标签(GraphQL Admin API):

mutation {
  articleUpdate(id: "gid://shopify/Article/123", article: {
    tags: ["tag-one", "tag-two", "tag-three"]
  }) {
    article { id tags }
    userErrors { field message }
  }
}

列出所有正在使用的标签(GraphQL):

{
  articles(first: 250) {
    edges {
      node { id title tags }
    }
  }
}

身份验证标头:X-Shopify-Access-Token: {token}

注意:REST API 已于 2024 年 10 月标记为旧版。自 2025 年 4 月起,新应用必须使用 GraphQL。

Ghost 适配器

列出标签:

GET {CMS_URL}/ghost/api/admin/tags/?limit=all
Authorization: Ghost {jwt_token}

创建标签:

POST {CMS_URL}/ghost/api/admin/tags/
Body: {"tags": [{"name": "Tag Name", "slug": "tag-name"}]}

JWT 生成:使用 Admin API 密钥签名(id:secret 格式),iat = 当前时间,exp = 5 分钟, audience = /admin/。

Strapi 适配器

端点根据内容类型自动生成。典型配置:

GET {CMS_URL}/api/tags?pagination[pageSize]=100
POST {CMS_URL}/api/tags
Body: {"data": {"name": "Tag Name", "slug": "tag-name"}}
Authorization: Bearer {api_token}

Strapi v4+ 使用 data 包装结构。请检查内容类型架构中的字段名称。

Sanity 适配器

查询标签(GROQ):

*[_type == "tag"] { _id, name, slug }

创建标签(Mutations API):

POST https://{project_id}.api.sanity.io/v2024-01-01/data/mutate/{dataset}
Body: {"mutations": [{"create": {"_type": "tag", "name": "Tag", "slug": {"current": "tag"}}}]}
Authorization: Bearer {token}

分类体系审计工作流

第 1 步:清点

扫描目标目录中的所有文章(或从 CMS 获取)。建立映射:

  • tag_name -> [使用此标签的文章文件/ID 列表]
  • category_name -> [文章文件/ID 列表]
第 2 步:健康检查
检查项阈值操作
内容单薄的标签归档页每个标签 < 5 篇文章建议设置 noindex 或合并
孤立标签0 篇文章建议删除
标签膨胀标签总数 > 50建议整合
分类层级深度> 3 层建议扁平化
未分类文章未分配分类分配到合适的分类
重复 slugslug 相同,名称不同合并到规范版本
步骤 3:建议

按优先级对发现的问题分组:

  • 严重:孤立标签会生成空存档页面(浪费爬取资源)
  • 高:内容少于 3 篇的标签(用户体验差,SEO 信号弱)
  • 中:标签数量超过 50(分类体系被稀释,导航更困难)
  • 低:命名不一致(大小写混用,连字符与空格混用)
输出格式
## Taxonomy Audit: [Site/Directory]

**Total tags**: [n] | **Total categories**: [n]
**Healthy**: [n] | **Thin**: [n] | **Orphan**: [n]

### Critical Issues
- [orphan tags list]

### Recommendations
1. Merge [tag-a] and [tag-b] (same topic, [n] combined posts)
2. Delete orphan tags: [list]
3. Add noindex to tag archives with < 5 posts

全站指南

  • 每个网站设置 5-10 个主要分类(宽泛主题)
  • 创建存档页面前,标签至少应有 5 篇内容
  • 使用统一的 slug 格式:小写字母,以连字符分隔
  • 每篇内容必须且只能有 1 个主要分类
  • 每篇内容推荐使用 3-8 个标签,绝不超过 15 个

环境变量

变量用途示例
CMS_TYPE平台标识符wordpress, shopify, ghost, strapi, sanity
CMS_URLCMS 的基础 URLhttps://example.com
CMS_API_KEY身份验证凭据应用密码、API 令牌或密钥

这些变量必须在 shell 环境中设置。切勿将凭据存储在文件中或 提交到版本控制系统。该技能会在运行时通过 $CMS_TYPE、$CMS_URL 和 $CMS_API_KEY 读取这些变量。

错误处理

  • 缺少环境变量:如果未设置 CMS_TYPE、CMS_URL 或 CMS_API_KEY,请说明缺少哪个变量,并提供预期格式
  • 凭据无效:如果 CMS API 返回 401/403,请报告“身份验证失败 - 请检查 CMS_API_KEY”,且不要重试
  • 连接超时:如果 10 秒后仍无法访问 CMS 端点,请报告超时,并建议检查 CMS_URL
  • 标签 slug 重复:如果 CMS 中已存在该标签,请跳过创建,并注明“标签已存在:[名称]”
  • 速率限制:如果 CMS API 返回 429,请等待后重试一次。如果限制仍然存在,请予以报告
  • 不支持的 CMS:如果 CMS_TYPE 不属于 5 个受支持的平台之一,请列出有效选项并退出

评论

支持 Markdown