コンテンツへ移動

Search Consoleインサイト

自分のSearch Consoleデータから5つのレポートを算出します。指定した順位範囲のクエリ、CTRの見直し候補、クエリとページの重複、クエリのクラスター、期間ごとの変化です。3つは同期済みの履歴を使い、2つはキャッシュされたライブリクエストを共有します。対象はこれらの分析に限られ、外部キーワード分析サービスの全データや全機能を提供するものではありません。

読み取り専用のSearch Console連携と履歴同期を基盤にしています。同ページのseo-pro:gsc-syncを実行していれば、5つのうち3つは追加のAPI呼び出しコストなしで利用できます。

前提条件

3つのスナップショット分析は、永続保存されたseo_gsc_metricsの履歴を読み取ります。先にseo-pro:gsc-syncを定期実行してください。Search Consoleの履歴を参照してください。同期した日数が多いほど、長い期間の推移を比較できます。

5つの分析

1. 上位表示に近いキーワード

表示回数で加重した平均掲載順位が5〜20位にあるクエリを、表示回数順に並べます。関連性や内部リンクの見直しに使ってください。この範囲にあることは、少し変更すれば1ページ目に上がるという根拠にはなりません。

2. CTRの改善候補

順位は良いものの、その順位から期待されるクリック率を下回るクエリです。実際のCTRを、業界データを組み合わせた順位別CTR曲線と比較します。表示回数があり、期待値を大きく下回るクエリをタイトル・ディスクリプションの書き換え候補として、推定される取り逃したクリック数の順に並べます。AIメタデータ提案の入力にも適した一覧で、どのクエリに向けて書き換えを検討すべきかが分かります。

3. カニバリゼーション

同じ検索語に対して、自分のURLが2つ以上表示されるクエリです。重複が必ず有害とは限りません。統合や差別化を行う前に、それぞれのページが異なる検索意図を満たしているかを確認してください。

4. クエリのクラスター

各ページが実際に検索結果に表示されるクエリをページ別にまとめます。Googleでそのページがどのトピックに関連付けられているかを示します。意図したトピックから外れつつあるページや、狙っていなかった有用な検索語で表示されているページを見つけるのに役立ちます。

5. 前の期間との推移比較

今回の期間と、その直前の同じ長さの期間を比べ、クリック数、表示回数、掲載順位、CTRの変化が大きいクエリを示します。掲載順位を比べるのは、両方の期間で流入があったクエリだけです。新規のクエリや完全に流入がなくなったクエリには、比較できる値がないためです。

数値の取得元:ライブとスナップショット

各分析は、必要な答えを正しく得られる最も低コストな情報源を使います。保存済みの履歴はディメンションごとに分かれているため、どのクエリがどのページに対応したかを復元できません。その組み合わせが必要な2つの分析だけがライブ取得を行い、1つのキャッシュ付きリクエストを共有します。

分析情報源理由
上位表示に近いキーワードローカルのスナップショット必要なクエリ別の順位と表示回数は同期済みの履歴にあります。API呼び出しコストはありません。
CTRの改善候補ローカルのスナップショット同じ自社データを使います。期待CTR曲線は静的な基準値で、外部照会ではありません。
推移の差分ローカルのスナップショット実際の日別履歴が必要で、同期が保存するデータがそのまま使えます。
カニバリゼーションライブ(クエリ × ページ)クエリとページの組は保存していません。すべての組を永続保存すると、保存量が大きく増えるためです。
クエリのクラスターライブ分析3の取得を共有同じ組のデータを、クエリ別ではなくページ別にまとめます。

そのため、インサイトページの表示で発生するSearch Analyticsリクエストは最大1回で、search_console.cache_ttl秒間キャッシュします。組み合わせを使う分析がライブなのは意図的です。カニバリゼーションとクラスターは現時点の状況を知るための分析で、共有キャッシュが繰り返しのリクエストを抑えます。トークン更新には追加の認証リクエストが必要になる場合があり、Googleの割り当て上限も適用されます。スナップショット分析はネットワークにアクセスしません。

ダッシュボードでの表示

Filamentプラグインをインストールすると、SEOナビゲーショングループにインサイトが表示され、ページタイトルはSearch Console インサイトです。連携が有効な場合だけ表示され、読み取り専用です。各分析が1つのセクションになり、スナップショット分析にデータがなければ履歴同期を促します。組み合わせデータのライブ取得が失敗した場合も、サニタイズした通知をその場に表示し、ページ全体を表示不能にしません。

設定

設定はすべてconfig/seo-pro.phpsearch_console.insightsにあります。デフォルト値を出発点に、サイトの規模に合わせてしきい値を調整してください。

php
'search_console' => [
    // ...
    'insights' => [
        // Rolling window (days) the snapshot surfaces aggregate over,
        // anchored to the latest synced day.
        'window_days' => 28,

        // Max rows a surface returns to its panel section.
        'max_rows' => 50,

        // (1) Striking distance: impression-weighted position in [min,max]
        // with at least this many impressions.
        'striking_distance' => [
            'min_position' => 5.0,
            'max_position' => 20.0,
            'min_impressions' => 30,
        ],

        // (2) CTR opportunity: queries ranking at/above max_position, with at
        // least min_impressions, whose CTR is at least min_gap_ratio below the
        // expected curve.
        'ctr_opportunity' => [
            'max_position' => 10.0,
            'min_impressions' => 50,
            'min_gap_ratio' => 0.30,
        ],

        // Optional override of the expected CTR-by-position curve
        // (position => percent). null uses the built-in blended curve.
        'ctr_curve' => null,

        // (3) Cannibalization: a query with this many URLs each drawing at
        // least min_impressions.
        'cannibalization' => [
            'min_urls' => 2,
            'min_impressions' => 10,
        ],

        // (4) Query clustering: queries per page above min_impressions.
        'clustering' => [
            'min_impressions' => 10,
            'max_queries_per_page' => 15,
        ],

        // (5) Trend deltas: surface queries with at least this many
        // impressions in either period.
        'trend' => [
            'min_impressions' => 20,
        ],

        // The shared live (query,page) fetch for surfaces 3 + 4.
        'pair_days' => 28,
        'pair_row_limit' => 5000,
    ],
],

期待CTR曲線

CTR改善候補の曲線は、公表された自然検索の順位別平均CTRを組み合わせた経験則です。比較の目安であり、特定のサイトについての断定ではありません。ここで指摘されたクエリは見直し候補であり、問題が証明されたわけではありません。自分で測定した曲線があれば、position => percentのマップとしてinsights.ctr_curveに設定してください。

関連ページ

rankbeam/laravel-seoはMITライセンスで公開されています。