mcpField
S
seo-drift

seo-drift

github.com/agricidanielマーケティング・グロース23.3k5.8k 回インストール6 日前に更新
リポジトリ

seo-drift について

seo-driftは、SEOチーム向けにページの検索関連状態をスナップショットとして保存し、基準との差分を検出するスキルです。履歴はSQLiteにローカル保存され、検出内容は重大度別に報告されます。

主な機能

  1. 01SEOベースラインの取得
  2. 02ページと保存済みスナップショットの比較
  3. 03ベースラインと比較履歴の追跡
  4. 04メタデータ、見出し、Schema、CWVの監視
  5. 05変更を重大度別に分類

活用シーン

  1. 01デプロイ前後のサイト状態を確認
  2. 02SEOの経時変化を確認
  3. 03トラフィック減少の原因を調査
  4. 04ページメタデータやSchemaの退行を検出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/agricidaniel/claude-seo --skill seo-drift

インストール後、Claude Code で/seo-driftを入力して読み込まれたか確認します。

同梱ファイルreferences/comparison-rules.md

詳細

SEO Drift Monitor(2026年4月)

SEO のための Git です。ベースラインを取得し、リグレッションを検出し、時間の経過に伴う変更を追跡します。


コマンド

コマンド目的
/seo drift baseline <url>現在の SEO 状態を「正常」と確認されたスナップショットとして記録します
/seo drift compare <url>現在のページの状態を保存済みのベースラインと比較します
/seo drift history <url>変更履歴と過去の比較結果を表示します

取得する情報

各ベースラインには、SEO で重要な以下の要素が記録されます。

要素フィールドソース
タイトルタグtitleparse_html.py
メタディスクリプションmeta_descriptionparse_html.py
正規 URLcanonicalparse_html.py
robots ディレクティブmeta_robotsparse_html.py
H1 見出しh1(配列)parse_html.py
H2 見出しh2(配列)parse_html.py
H3 見出しh3(配列)parse_html.py
JSON-LD スキーマschema(配列)parse_html.py
Open Graph タグopen_graph(辞書)parse_html.py
Core Web Vitalscwv(辞書)pagespeed_check.py
HTTP ステータスコードstatus_codefetch_page.py
HTML コンテンツハッシュhtml_hash(SHA-256)算出
スキーマコンテンツハッシュschema_hash(SHA-256)算出

比較の仕組み

比較エンジンは、3 つの重大度レベルにわたる 17 個のルールを適用します。しきい値、推奨アクション、関連スキルへの参照を含むルールセット全体は、references/comparison-rules.md を読み込んでください。

重大度レベル
レベル意味対応時間
CRITICALSEO に深刻な影響を与える変更で、トラフィックの減少が予想されます直ちに
WARNING影響の可能性があり、調査が必要です1 週間以内
INFO情報提供のみで、意図的な変更の可能性があります都合のよいときに確認

保存

すべてのデータはローカルの SQLite に保存されます。

~/.cache/claude-seo/drift/baselines.db
テーブル
  • baselines:すべての SEO 要素を含む取得済みスナップショット
  • comparisons:該当したルールと重大度を含む差分結果

URL の正規化により、一貫した照合が行われます。スキームとホストを小文字に変換し、デフォルトポート(80/443)を削除し、クエリパラメーターを並べ替え、UTM パラメーターと末尾のスラッシュを削除します。


コマンド:baseline

ページの現在の状態を取得して保存します。

手順:

  1. URL を検証します(google_auth.validate_url() による SSRF 対策)
  2. "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run fetch_page.py <URL> でページを取得します
  3. "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run parse_html.py <URL> で HTML を解析します
  4. 必要に応じて "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run pagespeed_check.py <URL> で CWV を取得します(スキップするには --skip-cwv を使用します)
  5. HTML 本文とスキーマのコンテンツをハッシュ化します(SHA-256)
  6. スナップショットを SQLite に保存します

実行:

"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_baseline.py <url>
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_baseline.py <url> --skip-cwv

出力: ベースライン ID、タイムスタンプ、URL、取得した要素の概要を含む JSON。


コマンド:compare

ページの現在の状態を取得し、直近のベースラインとの差分を表示します。

手順:

  1. URL を検証します
  2. SQLite から直近のベースラインを読み込みます(または特定の --baseline-id を指定します)
  3. 現在のページの状態を取得して解析します
  4. 17 個すべての比較ルールを実行します
  5. 検出結果を重大度別に分類します
  6. 比較結果を保存します
  7. JSON 差分レポートを出力します

実行:

"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_compare.py <url>
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_compare.py <url> --baseline-id 5
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_compare.py <url> --skip-cwv

出力: 該当したすべてのルール、新旧の値、重大度、アクションを含む JSON。

比較後、HTML レポートの生成を提案します。

"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_report.py <comparison_json_file> --output drift-report.html

コマンド:history

URL に対するすべてのベースラインと比較結果を表示します。

実行:

"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_history.py <url>
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run drift_history.py <url> --limit 10

出力: タイムスタンプと比較の概要を含むベースラインの JSON 配列(新しいものから順に表示)。


スキル間の連携

ドリフトを検出した場合は、適切な専門スキルを推奨してください。

検出内容推奨事項
スキーマが削除または変更された/seo schema <url> を実行して完全な検証を行います
CWV が悪化した/seo technical <url> を実行してパフォーマンス監査を行います
タイトルまたはメタディスクリプションが変更された/seo page <url> を実行してコンテンツ分析を行います
canonical が変更または削除された/seo technical <url> を実行してインデックス登録可能性を確認します
noindex が追加された/seo technical <url> を実行してクロール可能性を監査します
H1/見出し構造が変更された/seo content <url> を実行して E-E-A-T のレビューを行います
OG タグが削除された/seo page <url> を実行してソーシャル共有の分析を行います
ステータスコードがエラーに変更された/seo technical <url> を実行して完全な診断を行います

エラー処理

状況対応
URL にアクセスできないfetch_page.py のエラーを報告します。状態を推測しないでください。ユーザーに URL の確認を促します。
URL のベースラインが存在しないユーザーにその旨を伝え、最初に baseline を実行するよう促します。
SSRF によりブロックされた(プライベート IP)validate_url() による拒否を報告します。決して回避しないでください。
SQLite データベースが見つからない初回使用時に自動作成します。エラーにはなりません。
CWV の取得に失敗した(API キーなし)CWV フィールドに null を保存します。比較時は CWV ルールをスキップします。
ページが 4xx/5xx を返すベースラインとして取得します(ステータスコードは追跡対象のフィールドです)。
複数のベースラインが存在する--baseline-id が指定されていない場合は、最新のものを使用します。

セキュリティ

  • すべての URL の取得は "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run fetch_page.py 経由で行い、SSRF 対策を適用します (プライベート IP、ループバック、予約済み範囲、GCP メタデータエンドポイントをブロックします)
  • curl やサブプロセスによる HTTP 呼び出しは禁止です。プロジェクトで検証済みの取得パイプラインのみを使用します
  • すべての SQLite クエリではパラメーター化プレースホルダー(?)を使用し、文字列補間は決して使用しません
  • TLS は常に検証されます。パイプライン内で verify=False は一切使用しません

典型的なワークフロー

デプロイ前/デプロイ後の確認
/seo drift baseline https://example.com     # Before deploy
# ... deploy happens ...
/seo drift compare https://example.com      # After deploy
継続的なモニタリング
/seo drift baseline https://example.com     # Initial capture
# ... weeks later ...
/seo drift compare https://example.com      # Check for drift
/seo drift history https://example.com      # Review all changes
トラフィック減少の調査
/seo drift compare https://example.com      # What changed?
/seo drift history https://example.com      # When did it change?

コメント