blog-seo-check について
blog-seo-checkは、執筆後のブログ記事をオンページSEOの基準で検証するスキルです。メタデータ、リンク、見出し、URL、引用を確認し、修正案付きの合否レポートを作成します。
主な機能
- 01タイトル、説明、見出しを確認
- 02内部・外部リンクを監査
- 03重複URLやリンクの問題を検出
- 04canonicalとソーシャルタグを検証
- 05URL構造と引用を確認
- 06修正案付きSEOレポートを作成
活用シーン
- 01公開前の記事チェック
- 02内部リンクの重複や不足の発見
- 03メタデータと見出し構造の確認
- 04公開統計の引用検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ infrasity-labs/ dev-gtm-claude-skills --skill blog-seo-checkインストール後、Claude Code で/blog-seo-checkを入力して読み込まれたか確認します。
詳細
ブログ SEO チェック:執筆後の検証
完成したブログ記事に対して、包括的なページ内 SEO 検証を実行し、不合格項目ごとに具体的な修正方法を添えた合否チェックリストを生成します。執筆後に実行することを想定しており、公開前に問題を見つけられます。
ワークフロー
ステップ 1:コンテンツを読む
対象ファイルを読み込み、以下を抽出します。
- フロントマター - タイトル、説明、日付、最終更新日、著者、タグ、canonical、og:image、スラッグ/URL
- 見出し構成 - H1、H2、H3 の階層と全文
- リンク - アンカーテキストを含む、すべての内部リンクと外部リンク
- メタタグ - OG タグ、Twitter Card タグ、canonical URL
- 本文コンテンツ - キーワードと構造の分析に使用する全文
ユーザーがファイルパスではなく URL を指定した場合は、WebFetch を使用してページを取得し、関連する要素を抽出します。
ステップ 2:タイトルタグの検証
| チェック項目 | 合格基準 |
|---|---|
| 文字数 | 40~60 文字(検索結果ページで省略されない) |
| キーワードの配置 | タイトルの前半に主要キーワードが含まれている |
| パワーワード | パワーワードが 1 つ以上含まれている(例:ガイド、ベスト、方法、理由、必須、実証済み、完全版) |
| 省略のリスク | 60 文字で省略されても重要な意味が失われない |
| 独自性 | 汎用的ではなく、コンテンツに特化している |
ステップ 3:メタディスクリプション
| チェック項目 | 合格基準 |
|---|---|
| 文字数 | 150~160 文字 |
| 統計情報の記載 | 具体的な数値またはデータポイントが 1 つ以上含まれている |
| 価値提案 | 読者にとって明確なメリットまたは価値提案で締めくくられている |
| キーワードの有無 | 主要キーワードが自然に含まれている(詰め込みなし) |
| キーワードの詰め込みなし | キーワードは最大 1 回だけ使用されている |
| 行動喚起 | 行動(学ぶ、発見する、確認する、見る)を促している |
ステップ 4:見出しの階層
| チェック項目 | 合格基準 |
|---|---|
| H1 が 1 つ | H1 タグがちょうど 1 つ(タイトル) |
| 階層の飛ばしなし | H1 -> H2 -> H3 の順で、H1 -> H3 や H2 -> H4 になっていない |
| 見出し内のキーワード | 2~3 個の見出しに主要キーワードが含まれている(自然で、無理がない) |
| 疑問形 | H2 見出しの 60~70% が疑問形 |
| H2 の数 | 標準的なブログ記事では H2 セクションが 6~8 個 |
| 見出しの長さ | 各見出しが 70 文字未満 |
ステップ 5:内部リンク
| チェック項目 | 合格基準 |
|---|---|
| リンク数 | 記事あたり内部リンクが 3~10 個 |
| アンカーテキスト | 内容が分かる表現(「ここをクリック」や「続きを読む」ではない) |
| 双方向リンク | リンク先のページからもリンクされているか確認する(されていない場合はフラグを付ける) |
| 孤立ページでないこと | 記事からサイト内の他のページへ 3 件以上リンクしている |
| リンクの分散 | リンクが記事全体に分散しており、一箇所に集中していない |
| 自己リンクなし | 記事自身にリンクしていない |
Grep と Glob を使用してプロジェクト内の既存のブログコンテンツを検索し、可能な範囲で双方向リンクを確認します。
ステップ 5.5:リンクの重複排除
| チェック項目 | 合格基準 |
|---|---|
| URL の重複なし | 本文コンテンツ内で各 URL の出現は最大 1 回 |
| 最適なリンクを残す | 重複がある場合は、最も説明的なアンカーテキストのものを残す |
| ナビゲーションは対象外 | ヘッダー/フッターのナビゲーションリンクは本文の重複排除の対象外 |
| フラグメントの正規化 | #フラグメントが異なる URL も同一の URL として扱う |
重複が見つかった場合は、次の手順を実行します。
- URL を正規化する(末尾のスラッシュ、クエリパラメーター、フラグメントを削除)
- アンカーテキストの説明性に基づいて各リンクを採点する(キーワードを含むもの > 汎用的なもの)
- 最も高得点のリンクを残し、他を削除するよう推奨する
- 重複 1 件につき、SEO 最適化スコアから 1 点差し引く
Google はページごとに URL あたり 1~2 個のアンカーテキストを記録します(Zyppy 2023)。最適な方法:本文コンテンツ内で同じ URL へリンクするのは 1 回、2,000 語あたりの内部リンクは 5~10 個、ページ全体のリンク数は最大約 50 個です。
ステップ 6:外部リンク
| チェック | 合格基準 |
|---|---|
| ソースのランク | ランク 1~3 のソースへのリンクのみ(信頼できる情報源。SEO ブログは不可) |
| リンク切れ | WebFetch を使用して、主要な外部リンクにアクセスできることを確認する |
| Rel 属性 | 外部リンクに適切な rel 属性が設定されている(スポンサーまたは UGC の場合は nofollow) |
| リンク数 | 信頼できる情報源への外部リンクが 3 件以上ある |
| 競合他社へのリンクなし | 不必要に直接の競合他社へリンクしていない |
FLOW の証拠 3 点セット(引用)
投稿に含まれる公開統計について、次の 3 つの要素すべてを確認します。
- 年の記載が統計の前に本文中にある(「2026 年には」または「2026 年第 1 四半期時点で」など)。括弧内に埋もれていてはいけません。
- インライン引用には、発行元と文書のタイトル(またはレポート名)の両方を記載する。
- 投稿末尾のソースブロックに、引用した各ソースの URL と
retrieved YYYY-MM-DDを記載する。
3 つの要素のいずれかを満たさない投稿では、検証できない主張を削除するか、検証済みの代替情報に置き換えます。skills/blog/references/flow-alignment.md を参照してください。1 回のプロンプトでチェックする場合は、/blog flow optimize を参照してください。
ステップ 7:Canonical URL
| チェック | 合格基準 |
|---|---|
| 設定済み | Canonical URL が frontmatter または meta タグで定義されている |
| 正しい形式 | 完全な絶対 URL(https://domain.com/path) |
| 末尾のスラッシュ | サイトの規約に一貫している(末尾のスラッシュが混在していない) |
| 自己参照 | Canonical がページ自体を指している(意図的なクロスドメインの場合を除く) |
ステップ 8:OG メタタグ
| チェック | 合格基準 |
|---|---|
| og:title | 設定されており、title タグと一致するか、内容を補完している |
| og:description | 設定されており、150~160 文字で、ソーシャル共有に適している |
| og:image | 設定されており、最小サイズが 1200x630 で、絶対 URL になっている |
| og:type | ブログ投稿では "article" に設定されている |
| og:url | 設定されており、canonical URL と一致している |
| og:site_name | 設定されており、サイト名またはブランド名と一致している |
ステップ 9:Twitter Card
| チェック | 合格基準 |
|---|---|
| twitter:card | ブログ投稿では "summary_large_image" に設定されている |
| twitter:title | 設定されており、70 文字未満 |
| twitter:description | 設定されており、200 文字未満 |
| twitter:image | 設定されており、og:image と同一または類似している |
| twitter:site | サイトに Twitter/X アカウントがある場合は設定されている |
ステップ 10:URL 構造
| チェック | 合格基準 |
|---|---|
| 長さ | 短い(パス部分が 75 文字未満) |
| キーワードの有無 | 主要キーワードまたはそれに近い語句が URL スラッグに含まれている |
| 日付なし | URL に /2025/ や /2026/ の日付部分が含まれていない |
| 特殊文字なし | 小文字、数字、ハイフンのみを使用している |
| 小文字 | URL パス全体が小文字である |
| ストップワードなし | スラッグ内の「the」「a」「and」「of」の使用が最小限である |
| ファイル拡張子なし | URL に .html や .php が含まれていない(クリーン URL) |
ステップ 11:レポートの生成
次の形式で包括的な SEO 検証レポートを出力します。
## SEO Validation Report: [Title]
**File**: [path or URL]
**Date**: [check date]
**Overall**: [X/Y checks passed] - [PASS/NEEDS WORK/FAIL]
### Results
| # | Check | Status | Details | Fix |
|---|-------|--------|---------|-----|
| 1 | Title length | PASS | 52 chars | - |
| 2 | Title keyword | PASS | "keyword" in first half | - |
| 3 | Title power word | FAIL | No power word found | Add "Guide", "Essential", or "Complete" |
| 4 | Meta description length | PASS | 155 chars | - |
| 5 | Meta description stat | FAIL | No number found | Add a key statistic from the post |
| ... | ... | ... | ... | ... |
### Summary
**Passed**: [N] checks
**Failed**: [N] checks
### Priority Fixes
1. [Most impactful fix - what to change and where]
2. [Second most impactful fix]
3. [Third most impactful fix]
### Notes
- [Any observations about overall SEO health]
- [Suggestions for improvement beyond the checklist]
ステータス値:
- PASS - 基準を満たしています
- FAIL - 基準を満たしていません。修正案を提示します
- WARN - 基準を部分的に満たしているか、例外的なケースです。推奨事項を提示します
- N/A - 該当しません(例:サイトに X アカウントがない場合、Twitter Card タグは不要)
オプション:ライブパフォーマンスチェック(blog-google)
投稿に公開済み URL があり、blog-google の認証情報を利用できる場合:
- 認証情報を確認します:
python3 skills/blog-google/scripts/run.py google_auth --check --json - Tier 0 以上の場合、PageSpeed を実行します:
python3 skills/blog-google/scripts/run.py pagespeed_check <url> --json - レポートに以下を追記します:
- Lighthouse の Performance、Accessibility、Best Practices、SEO のスコア
- CWV のフィールドデータ(LCP、INP、CLS)と信号機評価
- 推定削減量を添えた上位 3 件の改善機会
- 認証情報を利用できない場合、または URL が未公開の場合は、何も表示せずに処理を終了します。