サイトに流入した検索キーワードと掲載順位を調べたい！

お取引先様のホームページリニューアルプロジェクトに片足突っ込んだのを機に、どのような検索キーワードで現行サイトに流入しているか調査しました。
これは、**検索連動型広告（リスティング）**を除いた通常の検索結果を指し、**オーガニック検索**とか**自然検索**と呼ばれるものです。

Google Analytics からオーガニック検索のキーワードを見ようとすると、殆どが not provided になると思います。
この理由は、プライバシー保護の高まりからGoogleが通信をTLS暗号化し、検索キーワードを渡さないようになったため。
Google Analytics ではサイトに訪問したユーザのことしか分かりませんが、本記事で解説する Google Search Console を利用すると、サイトに訪問する手前の段階から流入キーワード等を知ることができ、SEO的にも有用な指標が得られます。

その設定方法を説明します。

# Google Search Console にログイン
https://search.google.com/search-console/
にGoogleアカウントでログインし、プロパティタイプを決めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/a54e184f-7901-9ed4-b7b5-b7116289f857.png)
今回はドメインプロパティを選択しました。
ドメインプロパティでは、自動的にドメイン全体が計測対象になります。http、https、wwwの有無といったサブドメインすべてをひとつのプロパティで管理できるわけです。ただし、DNSレコードの編集が必須で、その権限が無ければ使えません。

URLプレフィックスでは、指定したサブドメインやディレクトリ等、一部を計測対象とします。http、https、wwwの有無等でURLが変わると、別物として扱われます。

## ドメイン所有権の確認
先程の画面で [続行] をクリックするとTXTレコードの内容が表示されるので、[コピー] でクリップボードに保存します。
この時点では未だ [確認] はクリックしません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/eb351d70-bf27-be2d-2b41-27476cb65565.png)

## DNSレコードの編集
TXTレコードをDNSサーバのゾーンファイルに追加し、ネームサービスを再起動します。

```:example.co.jp.zone
;
; Google Search Console
;
@       IN      TXT     "google-site-verification=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
```

外部のDNSサービスを利用しているなら、DNSプロバイダがコントロールパネル等を提供していると思うので、それに従います。

## ドメイン所有権の証明
頃合いを見て、先程の画面に戻って [確認] をクリックします。TTLにも因りますが浸透に１日もかかることは昨今では稀です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/fbbc7a7a-c5e6-e6e5-49a6-a9d69d698277.png)

## Google Search Console API の登録
プログラムなどからAPIで取得するので無ければ、この作業は不要です。

### Google API Console にログイン
https://console.developers.google.com/
にGoogleアカウントでログインし、[プロジェクトを作成] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/79a4b253-e5b9-3d7e-ee75-788aca80e353.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/aefa21ec-582d-6705-71ba-4af93c9694bc.png)
APIライブラリから Google Search Console API を指定し、有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/ed13c449-bcb6-2500-8d77-96fe4bf3a2c9.png)
このプロジェクトのサービスアカウントを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/1d01d31f-4526-cd70-d279-839bca0318f6.png)
サービスアカウントの秘密鍵をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/d6593a64-708c-eb92-bf4c-dc79a0b2de83.png)
このファイルはAPIで利用します。安全なところに保存しましょう。

### ユーザを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/16f12a47-07e6-5541-9c25-b2b4f82a6978.png)
サービスアカウントのメールアドレスを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/d6d7f55b-fcb3-c041-3825-95c6f342aaaa.png)

## エラーになったら
組織の管理者によって制限されていると、プロジェクトの作成でエラーになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/0f964fc8-7b71-77a4-f788-aa9169fd6b85.png)

この場合、Google Workspace（旧G Suite）の管理コンソールから、[アプリ] > [その他のGoogleサービス] > [Google Cloud Platform] で権限を付与すればエラーは出なくなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/d3d7dbf0-df57-5c49-f700-2e6b0e7af04e.png)

# APIの使い方
Search Console API のコードサンプルは、[公式サイト](https://developers.google.com/webmaster-tools/search-console-api-original/v3/quickstart/quickstart-python)や[GitHub](https://github.com/googleapis/google-api-python-client/blob/master/samples/searchconsole/search_analytics_api_sample.py)にもあるので、掲載は割愛します。
JSONで返却されるので、Pythonのpandasモジュール等でCSVに変換すればOKです。

## 指標
検索パフォーマンスで得られる指標の意味を解説します。

### 掲載順位
検索結果ページで掲載されている順位のことです。
通常、検索順位1位～10位のリンクが検索結果１ページ目に表示されるので、10位の場合、一番下に位置していることになります。

### 表示回数
WebサイトへのリンクがGoogleの検索結果ページに表示された回数のことです。
リンクがユーザの目に触れたかどうかは関係ありません。
検索順位が10位だと、一番下までスクロールしないと視認できませんが、ユーザがスクロールしなくても表示回数にはカウントされます。
検索結果２ページ目以降に表示されている場合、ユーザが次ページを表示しない限り、表示回数はカウントされません。

### クリック数
検索結果をクリックして外のページに移動するとカウントされるものです。
その後、元の検索ページに戻って同じリンクをクリックしてもカウントされません。

### CTR
クリック数／表示回数で求められるクリック率のことです。
CTRが低いということは、下の方に表示されていてユーザの目に触れなかったり、内容がユーザの検索意図と違うということになるので、クリック率が低いとSEO的にはテコ入れ対象となります。