mcpField
S
seo-drift

seo-drift

github.com/agricidanielマーケティング・グロース89471 回インストール2 週間前に更新
リポジトリ

seo-drift について

seo-driftは、ページのベースラインを保存し、SEOの変化を追跡するCodexスキルです。スナップショットを比較して重要度別に分類し、ベースラインと比較履歴をローカルのSQLiteに保存します。

主な機能

  1. 01ページのSEOベースライン取得
  2. 02現在の状態とスナップショットの比較
  3. 03重要度別の変更分類
  4. 04ローカルSQLiteでの履歴管理
  5. 05任意のHTML比較レポート

活用シーン

  1. 01デプロイ後のSEO変更確認
  2. 02ページの変化や回帰の継続監視
  3. 03トラフィック低下に関連する変更の調査

インストール

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

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

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

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

詳細

SEO ドリフトモニター(2026年4月)

共有データキャッシュ

ステップ 0 -- 共有データキャッシュを確認します:

情報を収集する前に、関連する SEO スキルで再利用できるコンテキストがないか .seo-cache/ を確認します。 スキーマと依存関係マップについては、../seo/references/shared-data-cache.md を参照してください。

次のキャッシュファイルが存在する場合は確認します:

  • .seo-cache/site-meta.json:ドメイン、ビジネスタイプ、業界、クロールのコンテキスト

  • .seo-cache/audit-scores.json:以前のフル監査での優先項目

  • .seo-cache/pages/{url-slug}/page-analysis.json:URL が指定されている場合のページレベルのコンテキスト

  • 見つかった場合:明らかに有効なフィールドを解析して使用します(「[日付] の [X] をキャッシュから使用」と記録します)

  • 見つからない、破損している、または関連性がない場合:新たな証拠の収集を続けます

  • ユーザーが「refresh」または「re-run」と指示した場合:キャッシュの読み込みを無視し、書き込み時に上書きします

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 (array)parse_html.py
H2 見出しh2 (array)parse_html.py
H3 見出しh3 (array)parse_html.py
JSON-LD スキーマschema (array)parse_html.py
Open Graph タグopen_graph (dict)parse_html.py
Core Web Vitalscwv (dict)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/codex-seo/drift/baselines.db
テーブル
  • baselines:すべての SEO 要素を含む取得済みスナップショット
  • comparisons:発動したルールと重大度を含む差分結果

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


コマンド:baseline

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

手順:

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

実行:

python scripts/drift_baseline.py <url>
python scripts/drift_baseline.py <url> --skip-cwv

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


コマンド:compare

ページの現在の状態を取得し、最新のベースラインと比較します。

手順:

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

実行:

python scripts/drift_compare.py <url>
python scripts/drift_compare.py <url> --baseline-id 5
python scripts/drift_compare.py <url> --skip-cwv

出力: 発動したすべてのルール、変更前後の値、重大度、対応策を含む JSON。

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

python scripts/drift_report.py <comparison_json_file> --output drift-report.html

コマンド:history

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

実行:

python scripts/drift_history.py <url>
python scripts/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/見出し構造が変更されたE-E-A-T を確認するには、/seo content <url> を実行してください
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 取得は、SSRF 保護(プライベート IP、ループバック、予約済みアドレス範囲、GCP メタデータエンドポイントをブロック)を適用する scripts/fetch_page.py を経由します
  • curl や subprocess による 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?

共有データキャッシュへの書き込み

すべての作業が完了したら、ワークフローで永続的な知見が得られた場合に、簡潔な JSON の概要を .seo-cache/ に書き込みます。 ../seo/references/shared-data-cache.md のスキーマと命名規則を使用し、少なくとも cache_type、analyzed_at、ソース URL/ドメイン、主な知見、問題、推奨事項、ツールの制限事項を含めてください。.gitignore に .seo-cache/ がない場合は追加してください。

コメント