分析: 計測、診断、レポート作成
ファーストパーティデータ(Search Console、Bing Webmaster、GA4、サーバーログ)を意思決定に変えます。固定的な判断ツリーで低下を診断し、変更を正直に測定します。
いつ使うか/使わないか
以下のために使用します:
- Search Console、Bing Webmaster、GA4のエクスポートデータ。
- トラフィック低下やアルゴリズムアップデートに関する質問。
- CTR最適化のターゲット。
- カニバリゼーション。
- クロールログ分析。
- KPIダッシュボード。
- 事前/事後テスト。
以下のためには使用しません:
- サイト内の欠陥を探す → seo-technical、seo-audit。このスキルは、低下ツリーがそれらを指している場合に呼び出します。
- 新しいページのキーワードアイデア → seo-keywords。
- 競合の可視性 → seo-competitors。
収集する入力
- Search Console パフォーマンスエクスポート。
- UIエクスポート:
Queries.csv/Pages.csv(上位1,000行のみ)。 - APIまたはLooker Studioエクスポート(クエリ+ページ行を含むもの): カニバリゼーションに必要。API制限: リクエストあたり25,000行、種類あたり1日約50,000行(google-rules §11)。
- 比較用: 同じ長さ、平日に揃えた2つの期間、最後の2~3日を除外(GSCデータは遅延します)。
- UIエクスポート:
- ブランド正規表現。 ブランド名とそのスペルミス。(例)
acme|acme ?corp|アックメ - オプション:
- Bing Webmasterエクスポート(同じ形式。
gsc_analyzeで動作)。 - GA4オーガニックランディングページレポート。
- サーバーアクセスログ(
.log/.gz)。 - サイト変更、デプロイ、移行の日付。
- Bing Webmasterエクスポート(同じ形式。
- 低下の場合: いつ始まったか、どのセクション/国/デバイスか、コンバージョンも低下したか。
ワークフロー
A. 好機分析(GSC/Bingエクスポート)
-
分析を実行:
mkdir -p seo-work python3 "${CLAUDE_PLUGIN_ROOT}/scripts/gsc_analyze.py" Queries.csv --brand "brand|brnd" --min-impressions 50 > seo-work/gsc.json python3 "${CLAUDE_PLUGIN_ROOT}/scripts/gsc_analyze.py" query_page.csv --brand "brand" > seo-work/gsc-qp.json # カニバリゼーションフラグ:
--striking-from 4 --striking-to 20(デフォルト); 大規模サイトでは--min-impressionsを引き上げます。 -
striking_distance(順位4~20、est_extra_clicks_at_pos3[推定値]でソート)を読みます。これらは最初に改善するページです。それぞれをクエリと共にseo-onpage / seo-contentに渡します。 -
ctr_underperformersを読みます。CTRがこのサイト自身のその順位における中央値CTR(ctr_curve_used; データが少なすぎる場合はデフォルトにフォールバック)の半分未満である上位10クエリ。- 原因: 弱いタイトル/スニペット、結果の上のSERP機能やAI Overview、または意図の不一致。
- 書き換える前に、WebSearchで実際のSERPを調査します。
-
question_queries: FAQセクションや回答優先のパッセージ(seo-content、seo-ai-search)のための素材。 -
brand_split: 非ブランドクリックを別途報告します。ブランド需要はSEOパフォーマンスではありません。 -
cannibalization: 2ページ以上がそれぞれインプレッションの10%以上を獲得しているクエリ。ケースごとに判断: 統合+301、意図の差別化、または内部リンクを主要ページに向ける。すべての分割が問題とは限りません: 両方のページがうまくランクしている場合はそのままにします。
B. 期間比較とトラフィック低下診断
-
比較を実行:
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/gsc_analyze.py" last_28d.csv --compare prev_28d.csv > seo-work/gsc-compare.json各損失クエリには
likely_causeが付けられます:- "rankings dropped"(ランキング低下)
- "fewer impressions at similar rank"(同程度の順位でインプレッション減少)
- "CTR fell at similar rank"(同程度の順位でCTR低下)
これらはヒューリスティックです。「矛盾しない」という表現で伝えます。
-
低下ツリーを順番に辿り、証拠が裏付ける最初のブランチで停止します。各ブランチの証拠を記録します:
-
低下は本物か?
- GSCクリックとGA4オーガニックセッションを比較し、トレンドの方向性を確認(10~20%のレベル差は許容)。
- GA4のみの低下 → トラッキング/同意/タグの問題であり、SEOではない。
- 前年同期比で季節性を排除。
-
技術的な問題。 並行して実行:
robots_check.pysitemap_check.pypage_audit.py(損失の大きい上位URLに対して)crawl.py(影響を受けたセクションに対して)
以下を確認:
- noindex、正規URLの変更、5xx/429、robotsブロック、リダイレクト変更、ボットチャレンジ(
bot-challenge)。 - 低下日当日のデプロイ。
- Search Console ページインデックスレポートの「除外」の急増(seo-technical)。
-
アルゴリズムアップデート。 低下日をGoogle Search Status Dashboard(
https://status.search.google.com/→ ランキングインシデント;取得可能)と比較します。形状が重要:- アップデート日におけるサイト全体の段階的変化は、システムの再評価(有用なコンテンツ / コア / スパム)と一致します。google-rules §4を参照。
- セクション固有の変化は、ページレベルの問題を示します。
- Search Consoleに手動対策が表示されていない限り、「ペナルティ」とは決して言いません。
-
季節性 / 需要。 GSCの前年同期比(16ヶ月分のデータ;google-rules §11)、および主要クエリのGoogle Trends。安定した順位でインプレッション減少 = 需要の減少。
-
SERPの置き換え。 順位は安定しているがCTRが低下。WebSearchでクエリを確認:
- AI Overviewが存在するか?新しい機能(動画、PAA、ショッピング、フォーラム)は?広告は?
- Search Consoleの「Search generative AI performance」レポートは利用可能か?(google-rules §10)
-
競合。 特定のURLに順位を奪われた → seo-competitors(勝者のページを
compare_pages)。Wayback CDXで競合のページがいつ変更されたかを確認。
-
-
ログデータが利用可能な場合:
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/log_analyze.py" access.log access.log.1.gz --verify-dns --sitemap-urls seo-work/urls.txt > seo-work/logs.json以下を確認:
- 1日あたりのGooglebotヒット数の減少(クロール容量の問題: 5xx/429またはサーバー応答遅延;google-rules §1)。
- ボットに提供されたエラー。
- パラメータURLの割合(クロールの無駄)。
- サイトマップパスがクロールされていない。
- 偽の「Googlebot」IP(
unverified_ips)。 - AIボット(OAI-SearchBot、Claude-SearchBot、PerplexityBot)がサイトに到達しているかどうか。
C. レポートとダッシュボード
- KPI。 先行指標と遅行指標を区別:
- 先行: インデックスされたページ(GSC)、インプレッション、ターゲットクラスターの平均順位、CWV合格率、クロールエラー。
- 遅行: 非ブランドクリック、オーガニックコンバージョン/収益(GA4)、AI引用率(seo-ai-search)。
- 無料ダッシュボード: ネイティブのSearch Consoleコネクタ(サイト+URLインプレッションテーブル)とGA4コネクタを使用したLooker Studio。ページ:
- 概要。
- 非ブランドトレンド(正規表現フィルター)。
- クラスター(URLパスグループ化)。
- 好機(順位4~20)。
- CWV(CrUXコネクタ、または
psi.pyスナップショット)。
- 月次レポート: 何が変わったか、なぜか(証拠付き)、何をしたか(SEO-WORKLOG.mdから)、次に何をするか。
D. SEO変更の効果測定
- 事前登録。 変更前に、ワークログに以下を書き留めます:
- 変更されたURL。
- コントロールURL(類似、未変更)。
- メトリック(ターゲットクエリのクリック/インプレッション/CTR/順位)。
- 期待される方向性。
- 期間: インデックス後4週間以上;URLインスペクションで再クロール日を確認。
- 両グループの前後で同じ長さの期間をエクスポートし、各グループで
gsc_analyze.py after.csv --compare before.csvを実行します。 - 処置グループの変化からコントロールグループの変化を引いたものを報告します。ページ数が少ないかクリック数が少ない場合は、「結論が出ない」と言います。単一の事前/事後比較から因果関係を主張してはいけません。
ランクトラッキング
-
無料: クエリごとのSearch Console平均順位(インプレッション加重、全ロケーション)。トレンドには十分ですが、「今の自分の位置」を表示するビューではありません。
-
有料: 固定キーワードリストの日次順位、ロケーション/デバイス別、SERP機能付き。以下の場合に正当化:
- ローカルまたは複数都市のランクが重要な場合、
- クライアント契約でランクレポートが必要な場合、または
- まだインプレッションがないキーワードを追跡する必要がある場合。
オプション: Semrush Position Tracking、Ahrefs Rank Tracker、SE Ranking、またはスクリプトチェック用のDataForSEO SERP API(tools.md)。
チェックリスト
| チェック項目 | ルール | ソース |
|---|---|---|
| 比較期間は同じ長さ、平日揃え、最後の2~3日を除外 | GSCデータは2~3日遅延 | google-rules §11 [Googleドキュメント] |
| GSCデータ保持期間 | 16ヶ月 | google-rules §11 [Googleドキュメント] |
| 「ペナルティ」という主張 | 手動対策レポートエントリがある場合のみ | google-rules §4 [Googleドキュメント] |
| AI Overviews/AI Modeのトラフィック | パフォーマンス → Web内にカウント;別途クリックはなし | google-rules §10 [Googleドキュメント] |
| Googlebotクロール率低下 | 5xx/429/応答遅延と一致 | google-rules §1 [Googleドキュメント] |
| CTR期待値 | まずサイト自身の曲線;デフォルトはヒューリスティック | ヒューリスティック |
| カニバリゼーションの閾値 | 2ページ以上がインプレッションの10%以上、かつ100インプレッション以上 | ヒューリスティック |
データ: 無料 vs 有料
無料でここにあるほとんどすべてをカバーできます。 Search Console(+API)、Bing Webmaster(+そのAIパフォーマンスレポート、利用可能な場合;google-rules §10)、GA4、Looker Studio、サーバーログ、Google Search Status Dashboard、Google Trends。
有料で追加されるもの(${CLAUDE_PLUGIN_ROOT}/references/tools.mdを参照):
- Semrush / Ahrefs。
- 競合の可視性履歴とキーワードの動き(自社データはGSCの方が優れています)。
- アルゴリズム変動センサー(Semrush Sensor)で、低下が業界全体かどうかを確認。
- 「自分だけか?」という疑問に対するアップデート時の正当化。
- コスト節約術: 完全なプロジェクトではなく、無料のSensorページと1競合のOrganic Research履歴を確認。
- ランクトラッカー: 上記参照。マネーキーワードのみを追跡し、重要なロケーション/デバイスに制限します。ほとんどのツールはキーワード×ロケーション×デバイス×頻度で課金されるため、変動の少ないセットでは日次より週次の方が望ましい。
- Screaming Frog Log File Analyser(
## Screaming Frog)。ログが巨大でユーザーがGUIを好む場合に有用。log_analyze.pyは中核的な質問を無料でカバーします。
サードパーティのトラフィック数値には[ベンダーデータ] / [推定値]とラベルを付けます。これらはモデル化されたものであり、測定されたものではありません。
出力
seo-work/gsc.jsonなど、および簡潔な発見事項の要約:- 上位10のストライキングディスタンス好機: クエリ、ページ、推定追加クリック数
[推定値]。 - 上位のCTR修正点。
- カニバリゼーションの判断。
- 上位10のストライキングディスタンス好機: クエリ、ページ、推定追加クリック数
- 低下診断: 各ブランチに✅/❌と証拠を付けたツリー、「矛盾しない」という表現での最も可能性の高い説明、および適切なスキルにルーティングされる次のアクション。
- KPI/ダッシュボード仕様(Looker Studioデータソース、フィールド、フィルター)または月次レポートのドラフト。
- 実験記録(事前登録+結果)。
落とし穴と誤解
- 平均順位はすべてのクエリ/ロケーションにわたるインプレッション加重です。新しい2ページ目のランキングは、トラフィックが増加している間に平均を下げる可能性があります。
- UIエクスポートは1,000行に制限されており、匿名化されたクエリは非表示になるため、合計はチャートと一致しません。
- アップデート日における低下は、そのアップデートが原因であることの証明にはなりません。 最初に技術的原因とトラッキング原因を除外します。
- 季節性ビジネスでは前月比より前年同期比が優れています。
- クリックが減少しつつインプレッションが維持されているのは、多くの場合AI Overviewsまたは別のSERP機能であり、ランキング損失ではありません。
- **GA4の「オーガニック」**は同意モードとチャネルグルーピングに依存するため、低下日の設定変更を確認してください。
- クリックベイトのタイトルでCTRを最適化しないでください。 Googleはそれらを書き換える可能性があります(google-rules §3)。
作業を記録する
SEO-WORKLOG.md(${CLAUDE_PLUGIN_ROOT}/references/worklog.md)に追記:
- 使用したエクスポート(日付範囲)。
- 実行したスクリプト。
- 証拠タグ付きの発見事項。
- 診断結果。
- 事前登録された実験。
- 有料ツールの使用状況。
- 再確認日(例:「タイトルテストのために2026-11-21にGSCを再取得」)。