あなたのサイト、何位にインデックスされてる？海外SEO対応版

## ○ 今回の主題

自分のサイト（ドメイン）が、指定したキーワードのGoogle検索結果の何番目にインデックスされているかを確認するためのスクリプトを作成しました。

作成している途中に、[SEOチェキ](http://seocheki.net/) さん という素晴らしいサイトを知りました。こちらのサイトでこれから行うことは可能です。

一点、USPがあるとすれば、google.co.jpではなく、google.com、yahoo.co.jpではなくyahoo.comやBing! といった検索エンジンを自由にカスタマイズできるという点です。

（モットーは“見る前に跳べ！” なので、跳んだあとにすでに跳んだ人がいただけのこと、と思って前向きにがんばります。）

## ○ デモ
<img width="572" alt="スクリーンショット 2019-01-07 21.23.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/266495/b8347397-66c1-8e72-cf3f-e918bb4a85ea.png">

設定しているmediumというドメインが medium と検索した際に何位に出てくるか確認すると・・・

<img width="573" alt="スクリーンショット 2019-01-07 21.25.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/266495/6c200256-387f-9838-8519-808d79909989.png">


そりゃ1位ですわね。ということができます。

## ○ 結論のコードをのっけます

```python
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
from requests import get as GET
import re
p = re.compile(r"<[^>]*?>")
# こちらは自由にドメインを設定してください
domain = 'medium'

try:
   word = input('検索：')
   html = GET("https://www.google.com/search?num=100&hl=en&gl=us&q="+word).text
   bs = BeautifulSoup(html, 'lxml')
   result = bs.find_all("cite")
   str_list = str(result)
   if domain in str_list:
       for i, s in enumerate(result):
           s = str(s)
           s = p.sub("", s)
           if domain in s:
               print(word + 'の検索結果は' + str(i+1) + '位です。')
   else:
       print('圏外です。')
except:
   pass
```

短いですね！ いいことです。成長した気がします。

さて、詳細の解説に入っていきたいと思います。

```python

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
from requests import get as GET
import re
p = re.compile(r"<[^>]*?>")
```

必要なモジュールを用意します。インストールの必要なものは requests と BeautifulSoup ですね。 pip install requests  などを実行し、インストールしてください。

```
domain = 'medium'
```

ここで、調べたいドメインを設定します。自社サイトのドメインを登録したり、競合のドメインを指定しておきましょう。

```python

try:
   word = input('検索：')
   html = GET("https://www.google.com/search?num=100&hl=en&gl=us&q="+word).text
   bs = BeautifulSoup(html, 'lxml')
   result = bs.find_all("cite")
   str_list = str(result)
   if domain in str_list:
       for i, s in enumerate(result):
           s = str(s)
           s = p.sub("", s)
           if domain in s:
               print(word + 'の検索結果は' + str(i+1) + '位です。')
   else:
       print('圏外です。')
except:
   pass
```

今回は関数を定義しませんでした。こういった単発のスクリプトでは特段必要ないというコメントを目にしたからです。

google.comで検索していますが、検索結果を100件（num=100）に増やし、国名をUS（gl=us）、言語をen（hl=en） にしています。これで、海外から検索した場合のインデックスがわかります。（海外SEO対策をしているためです）
国名と言語については以下のページを参考にすると、自由に変更できます。
→ 🔗 [国名コード](https://ja.wikipedia.org/wiki/ISO_3166-1)
→ 🔗 [言語コード](https://ja.wikipedia.org/wiki/ISO_639-1%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7)
→ 🔗 [知っておくと便利なGoogleのglパラメータとhlパラメータ ](https://www.suzukikenichi.com/blog/you-must-definitely-know-gl-parameter-and-hl-parameter/)

検索結果から、cite タグの付いている箇所を抜き出します。抜き出したタグを含んだURLをまとめて一つのテキストとしてstr_listに追加します。
理由は、ドメインがこのテキスト内含まれるか、含まれないかで分岐をかけるためです。
この段階で、100位以内に入っていなければ、ひとつずつ確認して順位を調べる、という手間が不要だからです。

ドメインがテキストに含まれていれば、何番目のURLに含まれているかを調べます。
ここで、s = p.sub("", s) とは、正規表現を用いて<>を削除することを意味します。これで、URLのみのテキストに対して検索をかけることができます。
（注意：citeから引っ張ると、ドメインの途中になぜか < b > などがあり、うまく検索できなかった経緯があり、この操作を行っています。）

str(i+1) は、pythonのリストの最初は 0 のため、1を加え、文字型にしています。

長くなりましたが、行っている操作は非常にシンプルなものとなっています。
お読みいただきありがとうございます。

繰り返しになりますが、このスクリプトを用いずとも、SEOチェキさんにてキーワードを3ついっぺんに何位か確認できます。

便利なツールを作らはる人が世の中にはたくさんいます。私もがんばります。