mcpField
B
blog-taxonomy

blog-taxonomy

github.com/infrasity-labsマーケティング・グロース15193 回インストール18 週間前に更新
リポジトリ

blog-taxonomy について

blog-taxonomyは、記事ファイルやCMSにおけるブログのタグ、カテゴリー、トピッククラスターを管理するスキルです。記事内容から分類候補を提案し、認証済みAPIでCMSへ同期するとともに、サイト全体の分類状態を監査します。

主な機能

  1. 01記事内容からタグとカテゴリーを提案
  2. 02候補語のグループ化と順位付け
  3. 03CMS API経由で分類情報を同期
  4. 04記事数の少ないタグ、孤立タグ、重複タグを監査
  5. 05WordPress、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 見出し(主要なトピックを示す要素)
  • 太字および斜体のフレーズ(強調を示す要素)
  • 存在する場合は、既存のフロントマターのタグ/カテゴリー
ステップ 2:頻度分析

本文をスキャンして、出現頻度の高いフレーズを確認します。

  • 1 語の用語:最低 4 回(ストップワードを除く)
  • 2 語のフレーズ:最低 3 回
  • 3 語のフレーズ:最低 2 回

一般的なタグ以外の単語(冠詞、前置詞、接続詞、代名詞)は除外します。

ステップ 3:意味によるグループ化

関連する候補をクラスターにまとめます。

  • 単数形と複数形の異なる表記を統合します(出現頻度の高い形を残します)
  • ハイフン付きとハイフンなしの表記を統合します
  • 同義語を出現頻度が最も高い用語の下にまとめます
ステップ 4:重複排除と順位付け
  • スラッグ化した名前を対象に、あいまい一致を行います(レーベンシュタイン距離 <= 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 階層階層のフラット化を推奨
未分類の投稿カテゴリーが割り当てられていない適切なカテゴリーを割り当てます
重複するスラッグ同じスラッグで名前が異なる正規版に統合します
ステップ 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 件の投稿を付けます
  • スラッグ形式を統一します:小文字、ハイフン区切り
  • 各投稿にはメインカテゴリを必ず 1 つだけ設定します
  • 投稿ごとのタグ数は 3~8 個を推奨し、15 個を超えないようにします

環境変数

変数用途例
CMS_TYPEプラットフォーム識別子wordpress, shopify, ghost, strapi, sanity
CMS_URLCMS のベース URLhttps://example.com
CMS_API_KEY認証情報アプリケーションパスワード、API トークン、またはキー

これらはシェル環境に設定する必要があります。認証情報をファイルに保存したり、 バージョン管理にコミットしたりしないでください。このスキルは実行時に $CMS_TYPE、$CMS_URL、 および $CMS_API_KEY を通じてこれらの値を読み取ります。

エラー処理

  • 環境変数がない場合:CMS_TYPE、CMS_URL、または CMS_API_KEY が設定されていない場合は、不足している変数を報告し、想定される形式を提示します
  • 認証情報が無効な場合:CMS API が 401/403 を返した場合は、「Authentication failed - check CMS_API_KEY」と報告し、再試行しません
  • 接続タイムアウト:10 秒経過しても CMS エンドポイントに到達できない場合は、タイムアウトを報告し、CMS_URL の確認を提案します
  • タグスラッグの重複:CMS にタグがすでに存在する場合は、作成をスキップし、「Tag already exists: [name]」と記録します
  • レート制限:CMS API が 429 を返した場合は、待機して 1 回再試行します。制限が続く場合は報告します
  • サポート対象外の CMS:CMS_TYPE がサポート対象の 5 つのプラットフォームのいずれでもない場合は、有効な選択肢を一覧表示して終了します

コメント