見出し画像

【SEO担当者必読】GASを使ったSearch Console APIの使い方とカニバリゼーション対策!

株式会社エイチームライフデザインで、人材領域のコンテンツマーケティングを担当している大島です。

オウンドメディアやキュレーションメディア、ポータルサイトなど、SEOに取り組んでいる中で必ず出てくる問題がURL同士のキーワードカニバリゼーション、通称「カニバリ」ではないでしょうか。

<キーワードカニバリゼーションとは?(通称:カニバリ)>
SEOにおいてカニバリゼーションとは、サイト内の似たようなページが「同一の検索KW」や「同一の検索意図」で競合してしまう状態を指します。
特定の検索意図に対して評価が分散してしまい、狙ったKWで順位上がらないなどのデメリットがあります。

カニバリの解消のためにはランクインキーワードの詳細なデータが必要です。小規模なメディアであればGoogle Search Consoleからエクスポートすれば事足りますが、大規模なメディアであればデータ量が多くなり、エクスポートに骨が折れますよね。

より効率よくカニバリKWを見つけるためにも、この記事では、GAS(Google App Script)を用い、Google Search Console API経由でSearch Consoleのデータを取得する方法をご紹介します。

本記事に掲載しているのは2023年8月時点の情報です。
各ツールおよびAPIの仕様は変更される場合があるため、予めご留意ください。

1.Search Console API(サーチコンソールAPI)とは?

サーチコンソールの画面例

SEO担当者であれば、一度は使用したことのあるGoogle Search Console。

通常であれば、公式サイトの管理画面から操作して情報を取得しますが、Google Search Console APIを使用して情報を取得することも可能です。

2.Search Console APIがカニバリ対策に活用できる3つのポイント

上述のように管理画面からでもデータを取得し、カニバリが起こっているKWを見つけることができますが、Google Search Console APIでデータ取得することで、より効率よくカニバリを探せます。

具体的には次の3つの長所があります。それぞれ解説していきます。

  • ポイント1最大50,000行までKWを出力できる

  • ポイント2:特定のページパスで絞り込んでパフォーマンスが見られる

  • ポイント3:GASを実行すれば毎日データ計測できる

ポイント1:最大50,000行までKWを出力できる

Google Search Consoleの管理画面からもデータのエクスポートができますが、最大でも1,000行までしかエクスポートできません。

Google Search Console APIを使用すれば、最大50,000行までエクスポートできるので、効率よくカニバリKWを探すことができます。

データ規模の大きなサイトのSEO担当者には非常に便利な機能です。

ポイント2:特定のページパスで絞り込んでパフォーマンスが見られる

ECサイトの商品ページ(例:/product/xxxx/)など、特定のページパスで絞ったパフォーマンスが見たい場合にもGoogle Search Console APIは便利です。

また正規表現も使用できるため、特定のグループやディレクトリごとにパフォーマンスを出力することができます。

ポイント3:GASで実行すれば毎日データ計測できる

Google Search Console APIをGASで実行すれば、トリガーが使えるため、毎日自動でデータ収集ができます。

スプレッドシートなどと連携して、毎日のパフォーマンスを追いたい時にも活用できます。

トリガーとは?
GASに備わっている機能で特定の日付や時間にプログラムが実行できる機能です。
例えば、毎週月曜日の5時にプログラムを実行するなど。

3.Search Console APIの使い方

STEP1:Search Console APIを有効化する

サーチコンソールAPIを使用するためにGCP(Google Cloud Platform)へログインします。(※取得したいサーチコンソールの権限を持ったアカウントでログインしてください)

次にプロジェクトの選択をクリックし、プロジェクトを作成します。

ここでは「search-console-api」と名付けています。

自分のプロジェクトに移動し、「Google Search Console API」と検索し、APIを有効化します。

STEP2:Google Search Console APIの認証情報を作成する

有効化したら、認証情報を作成します。Google Search Console APIの管理画面左の「OAuth同意画面」をクリックします。

User Typeは自分のみ使用する場合特に選択する必要はありませんので、「作成」をクリックします。

アプリ情報の必須項目を入力し、保存して次へをクリックします。

OAuth同意画面に関しては、自分のみ使用する形なので、今回は必要ありません。保存して次へを選択します。

最後、テストユーザーの設定画面では、使用するユーザー分だけメールアドレスを追加してください。(※自分だけ使用するのであれば、1つのメールアドレスで問題ありません)

STEP3:スプレッドシートを作成して、GASを編集する

最初にスプレッドシートを新規作成します。

次にメニューバーの「Apps Script」を選択し、スクリプトエディタを表示させてください。

GASを書く前に初期設定を行います。

STEP4:「appsscript.json」マニフェストファイルを修正する

左メニューから「プロジェクトの設定」を選択。

プロジェクトの設定上部にある「”appsscript.json”マニフェスト ファイルをエディタで表示する」にチェックを入れます。

チェックを入れた後、エディタページに戻ると左メニューに「appsscript.json」が表示されていることが確認できます。

「appsscript.json」を選択し、下記コードを追加してください。

  "oauthScopes": ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/webmasters","https://www.googleapis.com/auth/script.external_request"] 

上記のコードはスプレッドシートのアクセス権限やGoogle Search Console APIのリクエスト権限のスコープを設定するコードです。

STEP5:プロジェクト番号を設定する

再度、プロジェクトの設定に戻り、プロジェクト番号を設定します。

GCP管理画面に戻り、プロジェクト番号をコピーし、貼り付けます。

ここまでで事前準備は完了です。

STEP6:コードを記載して実行する

スクリプトエディタに戻り、下記のコードを記載し、実行ボタンを押します。

function getIndexStatus() {
   //GASスクリプトに紐づくスプレッドシートのアクティブなシート読み込み
// シートのIDを指定
const spreadsheet = SpreadsheetApp.openById("シートのIDを記載する");
  // シートの名前を記載する
 let mySheet = spreadsheet.getSheetByName("シート名を記載する");
  //サーチコンソールの取得する開始日・終了日を定義※取得したい期間を設定
  let startDate = "開始日";
  let endDate = "終了日";
  let seachUrl= "search consoleで登録しているURL";
  let requestUrl = "https://www.googleapis.com/webmasters/v3/sites/https%3A%2F%2F" + seachUrl + "/searchAnalytics/query";
  let maxQuery = 20000;
  let requestPayload = {
   'startDate' : startDate,
    'endDate': endDate,
    "dimensions" : ["page","query"],
    "rowLimit" : maxQuery,
    // ディレクトリ絞らないならコメントアウト
    "dimensionFilterGroups": [
    {
      "groupType": "AND",
      "filters": [
        {
          dimension: "page",
          operator: "contains",
          expression: "ディレクトリ等で絞り込み"
        }
      ]
    }
  ],
  }
  let requestOptions = {
    // 'payload' : requestPayload,
    'payload' : JSON.stringify(requestPayload),
    'myamethod'  : 'POST',
    'muteHttpExceptions' : true,
    'headers' : {"Authorization" : "Bearer " + ScriptApp.getOAuthToken()},
    'contentType' : 'application/json'
  } 
  let response = UrlFetchApp.fetch(requestUrl, requestOptions);
  let json = JSON.parse(response);  
  //JSONデータを処理してqueryを配列に保存する処理をforループで行う
  let queryData = [];


  for(i=0;i<maxQuery;i++){
    //queryDataを2次元配列に拡張する
    queryData[i] = []; 
    Logger.log("json data for row " + i + ": " + JSON.stringify(json["rows"][i]));

// json["rows"][i] がundefinedの場合にエラーメッセージを表示し、処理を中断する
if (!json["rows"][i]) {
  Logger.log("Data is undefined for row " + i);
  // ここでエラー処理を行うか、スクリプトを中断するかを検討する
  // 例えば、エラーが発生した場合に適切なメッセージを表示するか、処理を中断するかなど
} else {
  // json["rows"][i] がundefinedでない場合は、データを正常に処理
  queryData[i][0] = json["rows"][i]["keys"][1];
  queryData[i][1] = json["rows"][i]["keys"][0];
  queryData[i][2] = json["rows"][i]["clicks"];
  queryData[i][3] = json["rows"][i]["impressions"];
  queryData[i][4] = json["rows"][i]["position"];
  queryData[i][5] = json["rows"][i]["ctr"];
}
  }
  //スプレッドシートにqueryデータを書き込み
  mySheet.getRange(2, 1, queryData.length, queryData[0].length).setValues(queryData);
  //スプレッドシートのデータの順番を表示回数で降順で並び替え
  mySheet.getRange(2, 1, queryData.length, queryData[0].length).sort({column: 4, ascending: false});
  //クリック率のCTRの数値フォーマットを%に設定
  mySheet.getRange(2, 6, queryData.length).setNumberFormat('0.00%');
}

※次の6項目はご自身の環境に合わせて修正してください。(シートのID、シート名、開始日、終了日、search consoleで登録しているURL)

実行ボタン

問題なくプログラムが走り、下記ようなデータが出力されていることを確認してください。

4.カニバリ記事の見つけ方

上記、Google Search Console APIで出力した情報からカニバリの記事を見つけます。

並び替えフィルタや関数などを使用して、わかりやく整形してください。

同じKWで複数のURLがヒットしている記事をチェックする

出力例

例の出力データを見ると、赤背景色のデータがカニバリが発生している可能性のある記事です。
同じキーワードに対して、複数のURLがヒットしている例になります。

  • キーワード1:URL1(メイン記事)

  • キーワード1:URL15

5.カニバリ記事の対策・解消方法

前章でカニバリ記事を発見したら、次は対策・解消方法です。それぞれよくあるケースを抜粋して解説していきます。

※あくまで「想定ケース」ですので、メディアごとに必要な対策は異なります。注意してください。

<SEO的価値の基準>
ここで解説するSEO的価値は、検索順位を上位にしておきたいページや自社の問い合わせや申込などの流入を得られるページなどのことを指しています。広告やSNSからの流入がメインのページ(特殊なページ)などはSEO的価値がないページとしています。

ケース1.「SEO的価値があるURL」と「SEO的価値がないURL」

URL1
 └ SEO的価値がある
URL15
 └ SEO的価値がない
  └ ランディングページや特殊なページではない
  └ 広告やSNSからの流入がメインのページ

上記のようにURL15がSEO的価値がなく、ページとしても必要なければ、301リダイレクトかページを非公開にします。

ケース2.「LPとして使用するページ」と「SEO的価値があるページ」

URL1
 └ SEO的価値がある
URL15
 └ ランディングページとして使用したい
 └ SEO的価値がない

上記のケースでは、URL15はLPとして使用する目的なので、noindexまたはcanonicalなどで正規化しましょう。

ケース3.「どちらもSEO的価値があるURL」

URL1
 └ SEO的価値がある
URL15
 └ SEO的価値がある

上記のケースでは、どちらもSEO的価値があるので、noindexやページを非公開するなどの対策はできません。

そのため、コンテンツの中身をチューニングすることで解消させていきます。

この場合、対策して解消される可能性が高い施策は次の4つです。

・タイトル・ディスクリプションの調整
・見出しに入っているKWの調整
・内部リンクの調整
・2つのURLの検索意図を分ける

6.SEO担当者は効率よく業務を行うためにもツールを最大限活用しよう

今回は、Search Console APIを使ったカニバリ対策について解説しました。

大規模メディアになればなるほど、SEO担当者が見るデータ量は多くなるので、こういったツールを最大限活用することで効率よく分析できます。

最初は難しく感じるかもしれませんが、挑戦していくことはより自分を成長に繋げることができるのでおすすめです。

社内のエンジニアに相談したり、組織をうまく使って、事業やスキルを向上させていきましょう。


みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!