mcpField
S
seo-drift

seo-drift

github.com/infrasity-labsマーケティング・グロース15088 回インストール18 週間前に更新
リポジトリ

seo-drift について

seo-driftは、SEO状態のスナップショット取得とページ変更の監視を行うスキルです。サイト更新の影響を確認するチーム向けに、基準データをローカル保存し、差分を重大度別に報告します。

主な機能

  1. 01ページのSEO基準スナップショット取得
  2. 02現在のページと保存済み基準の比較
  3. 03基準データと比較履歴の確認
  4. 04メタデータ、見出し、スキーマの変更検出
  5. 05Core Web Vitalsとステータスコードの追跡
  6. 06重大度別の差分レポート

活用シーン

  1. 01デプロイ前後のSEO変化の確認
  2. 02ページのSEO変動の継続監視
  3. 03トラフィック低下時のページ変更調査

インストール

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

$npx skills add https://github.com/infrasity-labs/dev-gtm-claude-skills --skill seo-drift

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

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

詳細

SEOドリフトモニター(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
canonical 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 (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/seo-skills/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?

コメント