ブログSEOチェック -- 記事作成後のバリデーション
ブログ記事作成後に包括的なオンページSEOバリデーションを実行し、合格・不合格のチェックリストと各不合格項目の具体的な修正方法を生成します。公開前に問題を発見するために、記事作成後に実行するように設計されています。
ワークフロー
ステップ 1: コンテンツを読む
対象ファイルを読み込み、以下を抽出します:
- フロントマター - タイトル、説明、日付、最終更新日、著者、タグ、
正規URL、og:image、スラッグ/URL
- 見出し構造 - 見出しテキスト全体を含むH1、H2、H3の階層
- リンク - アンカーテキストを含むすべての内部リンクと外部リンク
- メタタグ - OGタグ、Twitter Cardタグ、正規URL
- 本文 - キーワードと構造分析のための全文
ユーザーがファイルパスではなくURLを提供した場合は、WebFetchを使用してページを取得し、関連要素を抽出します。
ステップ 2: タイトルタグのバリデーション
| チェック | 合格基準 |
|---|
| 文字数 | 40~60文字(SERPで切り捨てられない) |
| キーワード配置 | 主要キーワードがタイトルの前半にある |
| パワーワード | 少なくとも1つのパワーワードを含む(例: ガイド、ベスト、方法、なぜ、必須、実証済み、完全) |
| 切り捨てリスク | 60文字で切り捨てられても重要な意味が失われない |
| 独自性 | 一般的ではない - コンテンツに特化している |
ステップ 3: メタディスクリプション
| チェック | 合格基準 |
|---|
| 文字数 | 150~160文字 |
| 統計を含む | 少なくとも1つの具体的な数字またはデータポイントを含む |
| 価値提案 | 明確な読者にとってのメリットまたは価値提案で終わる |
| キーワード存在 | 主要キーワードが自然に出現する(詰め込まれていない) |
| キーワードの詰め込みなし | キーワードは最大1回出現する |
| 行動喚起 | 行動を示唆する(学ぶ、発見する、見つける、確認する) |
ステップ 4: 見出し階層
| チェック | 合格基準 |
|---|
| 単一のH1 | 正確に1つのH1タグ(タイトル) |
| レベルをスキップしない | H1 -> H2 -> H3、H1 -> H3 や H2 -> H4 は不可 |
| 見出し内のキーワード | 2~3つの見出しに主要キーワードがある(自然で、強制されていない) |
| 疑問形式 | H2見出しの60~70%が疑問文である |
| H2の数 | 標準的なブログ記事で6~8個のH2セクション |
| 見出しの長さ | 各見出しが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: 外部リンク
| チェック | 合格基準 |
|---|
| ソースの階層 | 信頼できる(Tier 1~3)ソースのみにリンクしている(SEOブログではない) |
| リンク切れ | WebFetchを使用して主要な外部リンクが到達可能か確認する |
| rel属性 | 外部リンクに適切なrel属性がある(スポンサー/ユーザー生成コンテンツの場合はnofollow) |
| リンク数 | 信頼できる情報源への外部リンクが少なくとも3つ |
| 競合他社へのリンクなし | 不必要に直接の競合他社にリンクしていない |
ステップ 7: 正規URL
| チェック | 合格基準 |
|---|
| 存在する | 正規URLがフロントマターまたはメタタグで定義されている |
| 正しい形式 | 完全な絶対URL(https://domain.com/path) |
| 末尾のスラッシュ | サイトの規則と一致している(末尾のスラッシュが混在していない) |
| 自己参照 | 正規URLがページ自身を指している(意図的なクロスドメインの場合は除く) |
ステップ 8: OGメタタグ
| チェック | 合格基準 |
|---|
| og:title | 存在し、タイトルタグと一致または補完している |
| og:description | 存在し、150~160文字で、ソーシャル共有に魅力的 |
| og:image | 存在し、最低1200x630ピクセル、絶対URL |
| og:type | ブログ記事の場合は「article」に設定 |
| og:url | 存在し、正規URLと一致 |
| og:site_name | 存在し、サイト/ブランド名と一致 |
ステップ 9: Twitterカード
| チェック | 合格基準 |
|---|
| 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バリデーションレポート: [タイトル]
**ファイル**: [パスまたはURL]
**日付**: [チェック日]
**総合評価**: [合格したチェック数/全チェック数] - [合格/改善必要/不合格]
### 結果
| # | チェック | ステータス | 詳細 | 修正方法 |
|---|----------|-----------|------|----------|
| 1 | タイトル長 | 合格 | 52文字 | - |
| 2 | タイトルキーワード | 合格 | 「キーワード」が前半にある | - |
| 3 | タイトルのパワーワード | 不合格 | パワーワードが見つからない | 「ガイド」「必須」「完全」などを追加 |
| 4 | メタディスクリプションの長さ | 合格 | 155文字 | - |
| 5 | メタディスクリプションの統計 | 不合格 | 数字が見つからない | 投稿の主要な統計を追加 |
| ... | ... | ... | ... | ... |
### サマリー
**合格**: [N] チェック
**不合格**: [N] チェック
### 優先修正項目
1. [最も影響が大きい修正 - 何をどこで変更するか]
2. [2番目に影響が大きい修正]
3. [3番目に影響が大きい修正]
### 備考
- [全体的なSEOの健全性に関する観察]
- [チェックリストを超えた改善の提案]
ステータス値:
- 合格 - 基準を満たしている
- 不合格 - 基準を満たしていない、修正方法を提供
- 警告 - 部分的に基準を満たしている、またはエッジケース、推奨事項を提供
- 該当なし - 該当しない(例: サイトに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のパフォーマンス、アクセシビリティ、ベストプラクティス、SEOスコア
- CWVフィールドデータ(LCP、INP、CLS)と信号機評価
- 推定節約額を含む上位3つの改善機会
- 認証情報が利用できない場合やURLが公開されていない場合は、自動的にスキップされます。