content-brief について
content-briefは、キーワード指標や競合見出しの分析を含むSEOコンテンツブリーフを、指定キーワードから作成します。固定フィールド形式で解析と振り分けに対応し、Notionのワークフローを使うコンテンツチーム向けです。
主な機能
- 01キーワード指標と検索意図の分類
- 02上位検索結果の見出し分析
- 03構造化されたSEOブリーフの作成
- 04優先度の採点と振り分け
- 05解析・検証スクリプト
- 06Notionワークフローの手順
活用シーン
- 01指定キーワードからブリーフを作成
- 02CSVのキーワード一覧を処理
- 03優先度に応じてNotion登録用に振り分け
- 04引き継ぎ前のブリーフ項目確認
MCP 対応
キーワード指標の取得にAhrefs MCPを、ブリーフページやカレンダー項目の作成・更新にNotion MCPを利用できます。これらのMCP接続がない場合の手動手順も記載されています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ infrasity-labs/ dev-gtm-claude-skills --skill content-briefインストール後、Claude Code で/content-briefを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/error-handling.mdnotion-schema.mdrouting-logic.mdscripts/brief_validator.pytext_parser.py詳細
コンテンツブリーフ — キーワードからNotion用ブリーフを生成
ターゲットキーワードから、構成化されたSEOコンテンツブリーフを生成します。出力は必須のDirectionプロンプト形式に従うため、text_parser.pyスクリプトで各フィールドを抽出し、手動で整えることなくNotionに登録できます。
呼び出しトリガー
明示的なフレーズ(次のいずれか):
- 「[keyword]のコンテンツブリーフを作成して」
- 「このキーワードのブリーフを作成して:[keyword]」
- 「[topic]のコンテンツブリーフ」
- 「[keyword]のブリーフを生成して」
- 「[keyword]のブリーフを書いて」
- 「コンテンツブリーフスキルを実行して」
暗黙的な兆候:
- ユーザーがキーワードを提示し、SEO仕様、編集仕様、または執筆依頼を求めている
- ユーザーがキーワードリストを貼り付け、ブリーフを求めている
トリガーされたら、すぐに実行してください。キーワード以外の事前ヒアリングは不要です。
ヒアリング(質問は1つ、任意)
キーワードが明確な場合は、質問せずにブリーフを作成してください。
次の両方に該当する場合に限り、確認の質問を1つしてください。
- ターゲット読者またはクライアントを文脈から推測できない
- 読者によってコンテンツの切り口が大きく変わる(例:「プロジェクト管理ソフトウェア」の対象がプロジェクトマネージャーか開発者か)
簡単な確認 —「[keyword]」の主な読者は誰ですか?
- [推定されるペルソナA — 例:人事部長]
- [推定されるペルソナB — 例:オペレーションマネージャー]
- 教えてください
質問の理由:読者によってH1、コンテンツの切り口、執筆者向けの注記が変わります。質問を1つすることで、的外れなブリーフを防げます。
質問は最大1つです。読者を推測できる場合は、質問せずに進めてください。
データ収集(ブリーフ作成前)
Directionプロンプト形式の出力を生成する前に、次の手順を実行してください。
Step 1 — キーワード指標
優先: Ahrefs MCP(keywords_explorer_overview)→ 検索ボリューム、KD、CPC、SERPデータ。
代替手段(Ahrefs MCPがない場合): WebSearchを使って推定します。
[keyword] search volume KD CPC site:ahrefs.com OR site:semrush.com OR site:moz.comを検索- 入手できる検索ボリューム、KD、CPCの推定値を抽出
- データが見つからない場合は、VOLUME/CPC/DIFFICULTYを
[not available — add manually]に設定
Step 2 — 競合のH2/H3分析
- WebSearchで
[keyword]を検索し、オーガニック検索結果の上位3件を特定します(広告、地図、強調スニペットは除外) - 各URLをWebFetchし、H2とH3の見出しをすべて抽出します
- 注:競合の構成はH2_OUTLINEの参考にします。コピーせず、ギャップ分析に活用してください。
Step 3 — 検索意図の分類
キーワードとSERPの種類に基づき、次の4つの選択肢のうち、必ずいずれか1つに分類します。
Informational— ユーザーが情報を得ようとしているCommercial— ユーザーが購入前に選択肢を比較しているTransactional— ユーザーが行動または購入する準備ができているNavigational— ユーザーが特定のブランドまたはサイトを探している
Step 4 — 優先度のスコアリング
references/routing-logic.mdの振り分けロジックを適用します。
- HIGH:検索ボリューム > 200、KD < 40、かつ検索意図がCommercialまたはTransactional
- MEDIUM:HIGHの条件を満たさないが、相応の検索ボリュームまたは戦略的重要性がある
- LOW:検索ボリュームが少ない、難易度が高い、またはコンバージョン価値が限られるInformational
Directionプロンプトの出力形式(必須)
この形式は変更できません。 text_parser.pyスクリプトは、ラベルと完全一致する形でデータを抽出します。ラベルが以下の形式から少しでも異なると(大文字・小文字の違い、余分なスペース、アンダースコアの欠落など)、Notionのプロパティが空になります。
データを収集した後、次の構成をそのまま使ってブリーフを出力してください。
TARGET_KEYWORD: [keyword]
VOLUME: [number or "not available"]
CPC: [decimal or "not available"]
DIFFICULTY: [0-100 integer or "not available"]
SEARCH_INTENT: [Informational | Commercial | Transactional | Navigational]
AUDIENCE: [persona — job title or role]
RECOMMENDED_H1: [final proposed title]
CONTENT_ANGLE: [one paragraph describing the unique angle, why this beats competitors, what the post must do]
WORD_COUNT: [number]
SCHEMA: [schema type — e.g., FAQ, HowTo, Article, FAQ + HowTo]
PRIORITY: [HIGH | MEDIUM | LOW]
H2_OUTLINE:
- H2: [heading]
- H3: [subheading]
- H3: [subheading]
- H2: [heading]
- H3: [subheading]
FAQ:
- Q: [question the audience actually searches]
- Q: [question]
- Q: [question]
INTERNAL_LINKS:
- [anchor text] → [relative URL or page title if URL unknown]
WRITER_NOTES:
[one paragraph of specific guidance: tone, POV, what to avoid, key differentiators to emphasize, CTAs, any client-specific requirements]
重要なルール:
- すべてのフィールドラベルは、表示どおりに正確に記載してください(すべて大文字、単語間はアンダースコア)
- SEARCH_INTENTの値は、4つの選択肢のいずれかと完全に一致している必要があります(先頭大文字)
- PRIORITYの値は、HIGH、MEDIUM、LOWのいずれかと完全に一致している必要があります
- H2_OUTLINE、FAQ、INTERNAL_LINKS、WRITER_NOTESはブロックフィールドです。内容は次の行以降に記載します
- TARGET_KEYWORDより前、およびWRITER_NOTESブロックより後に、追加のテキストを記載しないでください
ワークフローのアーキテクチャ(9 ノード)
| ノード | 役割 | ツール |
|---|---|---|
| 1 — 入力 | キーワードと、任意のクライアント/オーディエンス情報を受け取る | ユーザーメッセージ |
| 2 — キーワード指標 | 検索ボリューム、KD、CPC、SERP タイプを取得する | Ahrefs MCP または WebSearch にフォールバック |
| 3 — SERP スクレイピング | オーガニック検索結果の上位 3 件から H2/H3 を抽出する | WebFetch |
| 4 — ブリーフ生成 | Direction プロンプトを通じてデータを処理し、構造化された出力を生成する | Claude(このスキル) |
| 5 — テキストパーサー | ラベル付きフィールドを抽出し、構造化変数に変換する | scripts/text_parser.py |
| 6 — 条件付きルーター | PRIORITY の値に基づいて振り分ける | ルーティングロジック |
| 7A — Notion 作成(HIGH) | ページを作成し、Status = "Briefed: Ready for Assignment" に設定する | Notion MCP |
| 7B — Notion 作成(MED/LOW) | ページを作成し、Status = "Briefed: Weekly Review Queue" に設定する | Notion MCP |
| 8A — Slack 通知(HIGH のみ) | ブリーフの要約と Notion リンクをチャンネルに投稿する | Slack MCP |
| 9 — カレンダー同期 | Content Calendar データベースにリンク付きエントリーを作成する | Notion MCP |
MCP コネクターのない Claude Code では、ノード 1~5 が自動的に実行されます。ノード 6~9 では、すぐに貼り付けられる要約を生成し、Notion への手動登録方法をユーザーに案内します。
バッチ処理モード
トリガー:ユーザーが Target Keyword 列(任意で Priority Override 列)を含む CSV を渡します。
処理:
- CSV を読み込めることと、
Target Keyword列が存在することを確認する - 各キーワードをパイプライン全体に順番に通す
- すべてのブリーフを順番に出力し、
---で区切る - すべてのブリーフの後に、要約テーブル(キーワード | 優先度 | 文字数 | スキーマ)を出力する
想定スループット:20 件のブリーフを 20~25 分で処理(1 件あたり 60~75 秒)。
キーワードの処理に失敗した場合(SERP データがない、検索意図が曖昧など)は、要約テーブルに [FAILED — reason] と記載し、残りのキーワードの処理を続けます。
Notion への送信(MCP が利用可能な場合)
references/notion-schema.md を使って、パーサーの出力を Notion のプロパティに対応付けます。
PRIORITY に応じた 2 つの経路:
HIGH:
- Status → "Briefed: Ready for Assignment"
- Target Publish Date → 今日 + 14 日
- Slack 通知をトリガーする(ノード 8A)
MEDIUM:
- Status → "Briefed: Weekly Review Queue"
- Target Publish Date → 今日 + 28 日
LOW:
- Status → "Briefed: Weekly Review Queue"
- Target Publish Date → 今日 + 42 日
ページの作成後、Calendar Sync(ノード 9)を実行し、Content Calendar データベースにリンク付きエントリーを作成します。
作成前の事前確認:Notion に同じ TARGET_KEYWORD を持つ既存ページがないかクエリします。見つかった場合は、重複を防ぐため create_page ではなく update_page に振り分けます。
マルチクライアント設定
各クライアントには以下を用意します。
- 個別の Notion インテグレーショントークン
- 個別のデータベース ID
- クライアント固有の Direction プロンプトのバリエーション(オーディエンス、トーン、内部リンクのベース URL を調整)
新しいクライアントのオンボーディングには、コネクターの設定とブリーフ 1 件のエンドツーエンドのテストに約 45~60 分かかります。
Notion MCP に接続されていない場合の出力
Notion MCP が利用できない場合は、Direction プロンプトの出力を生成した後、以下を追加します。
---
NOTION PUSH: Not connected. To add this brief to Notion manually:
1. Open your Notion database
2. Create a new page
3. Paste the following field values:
[formatted summary of all extracted fields]
Or run: python scripts/text_parser.py brief.txt --output json
to get a JSON payload ready for the Notion API.
---
検証ゲート
出力を生成した後、以下を意識的に確認します。
- 11 個の単純フィールドがすべて存在し、空ではない
- SEARCH_INTENT が有効な 4 つの値のいずれかである
- PRIORITY が正確に HIGH、MEDIUM、LOW のいずれかである
- H2_OUTLINE に H2 が 4 つ以上あり、それぞれに H3 が 1 つ以上ある
- FAQ に質問が 3 つ以上ある
- INTERNAL_LINKS に項目が 2 つ以上ある
- WRITER_NOTES が内容のある段落であり、プレースホルダーではない
自動検証を行うには、出力ファイルに対して scripts/brief_validator.py を実行します。
エラー処理
| 状況 | 動作 |
|---|---|
| キーワードデータを利用できない | 数値フィールドに「利用不可」と設定し、編集者に手動で確認するよう指示するメモをWRITER_NOTESに追加します |
| SERPのスクレイピングがブロックされた(403/有料コンテンツ) | スクレイピングをスキップし、WRITER_NOTESに「競合のアウトラインを利用できない」と記載して、ブリーフの作成を続行します |
| 検索意図が曖昧 | デフォルトでInformationalに設定し、WRITER_NOTESに「検索意図が曖昧 — ライターへのブリーフ作成前に確認」と記載します |
| Notionの選択値が一致しない | 値の大文字・小文字を正確に指定します。Notionの選択項目では大文字・小文字が区別されます |
| キーワードの重複が検出された | create_pageではなくupdate_pageに振り分けます |
| 解析したブリーフに空のプロパティが3つ以上ある | 手動確認が必要であることを示し、Notionに送信しません |
| キーワードのバッチ処理に失敗 | サマリーテーブルに記録し、処理を続けます |
| CSVにTarget Keyword列がない | 処理を停止し、列名をユーザーに確認します |
失敗箇所の一覧については、references/error-handling.mdを参照してください。
ツール
| スクリプト | 役割 |
|---|---|
scripts/text_parser.py | Directionプロンプトの出力からラベル付きフィールドを抽出し、構造化されたdictに変換します。python text_parser.py brief.txt --output json |
scripts/brief_validator.py | 必須フィールドがすべてそろっていること、値が許可された選択肢に含まれていることを検証します。python brief_validator.py brief.txt |
参考資料
references/notion-schema.md— Notionデータベースのプロパティ設定(名前、型、許可された値)references/routing-logic.md— 優先度スコアリングのルールと公開日の計算方法references/error-handling.md— 既知の失敗箇所と対処方法
拒否すべきアンチパターン
- 必須のDirectionプロンプトのラベル形式から逸脱する(パーサーが動作しなくなります)
- フィールドラベルを小文字または大文字・小文字が混在した形式で使用する(TARGET_KEYWORDではなくTarget_Keyword)
- SEARCH_INTENTに許可された4つの値以外を設定する
- キーワードとSERPのデータを収集する前にブリーフを作成する
- 処理を開始する前に複数の聞き取り質問をする
- あいまいなWRITER_NOTESを記述する(「このトピックについて良い記事を書く」など)
- データがない場合にキーワード指標を捏造する — 必ず「利用不可」として示します
- 空のフィールドが3つ以上ある状態でNotionに送信する