SERP APIは検索エンジンのクエリを代わりに実行し、結果ページを構造化されたJSONとして返します。オーガニック検索結果とその順位、広告、強調スニペット、ローカル検索結果などが含まれます。Google用のスクレイパーを構築して動かし続ける代わりに、1回のリクエストを送信し、必要なフィールドを読み取るだけで済みます。
このガイドでは、ゼロからのセットアップ手順を説明します。APIキーの取得と保存、最初の検索の実行、適切な場所とデバイスでの結果の取得、エラー処理、そして結果を順位チェックに変える方法です。例としてShifterのSERP APIを使用しますが、ほとんどのSERP APIは同じように動作します。
ステップ1: APIキーを取得する
すべてのリクエストにはAPIキーが必要です。ShifterのパネルでSERP APIを開き、次にAPI Keysを開いて、有効なキーをコピーします。
キーはパスワードと同様に扱ってください。
- コードやリポジトリに含めない。 環境変数やシークレットマネージャーに保存してください。
- 開発用と本番用で別のキーを使用する。 可能な場合はこれを行い、漏洩したテストキーが本番環境に影響しないようにします。
- キーを更新する。 漏洩した可能性がある場合はキーをローテーションし、使用しているすべての場所で更新してください。
export SHIFTER_SERP_KEY="your-key-here"
ステップ2: 最初の検索を実行する
APIは単一のエンドポイント、https://serp.shifter.io/v1です。engineで検索エンジンを選択し、クエリをqとして渡します。
curl "https://serp.shifter.io/v1?engine=google&api_key=$SHIFTER_SERP_KEY&q=residential+proxies"
レスポンスはJSONです。Google検索の場合、organic_resultsに通常の検索結果が格納され、それぞれにposition、title、link、displayed_link、snippetが含まれます。広告やローカル検索結果など他のセクションは、結果ページにそれらが存在する場合に表示されます。
同じエンドポイントは他の検索エンジンやGoogleの各機能にも対応しています。engineをbingやyandexに変更すればそれらの検索エンジンに、google_maps、google_news、google_shoppingに変更すれば他のGoogle検索結果に対応します。このガイドの残りの内容はすべてに適用されますが、レスポンスのフィールドだけが変わります。
ステップ3: 適切な場所とデバイスで結果を取得する
検索結果は場所、言語、デバイスによって、しばしば大きく異なります。これらすべてを固定しない順位チェックは、毎回異なる結果ページを測定していることになります。
| パラメータ | 設定する内容 | 例 |
|---|---|---|
location | 検索が行われる場所 | Austin,Texas,United States |
gl | 結果の対象国 | us |
hl | インターフェースの言語 | en |
device | デスクトップ、モバイル、タブレットの結果 | mobile |
「Springfield」のような短い名前は曖昧なので、場所は完全に指定してください(市、地域、国)。ローカルSEOのためのジオターゲティングSERP APIガイドでは、場所の精度がなぜそれほど重要なのかを説明しています。
ステップ4: エラーを処理する
リクエストは、改善する理由と改善しない理由の両方で失敗することがあります。
- 再試行する: レート制限や一時的なサーバーエラーは、毎回長くなる待機時間を入れて再試行します。
- 停止して修正する: 認証エラーや不正なリクエストのエラーは、再試行しても同じ失敗を繰り返すだけなので、停止して修正してください。
- タイムアウトを設定する: すべてのリクエストにタイムアウトを設定し、1つの遅い検索が実行全体を妨げないようにしてください。
すべてを組み合わせる
以下のヘルパーは、環境からキーを読み込み、常に場所・言語・デバイスを送信し、再試行する価値のあるエラーを再試行し、オーガニック検索結果の中でドメインが何位にランクされているかを見つける関数を含みます。
import os
import time
from urllib.parse import urlparse
import requests
API = "https://serp.shifter.io/v1"
RETRY = {408, 429, 500, 502, 503}
def google_search(query, location, gl="us", hl="en", device="desktop", session=None, attempts=3):
"""One Google search as seen from `location`, returned as parsed JSON."""
session = session or requests.Session()
params = {"engine": "google", "api_key": os.environ["SHIFTER_SERP_KEY"], "q": query,
"location": location, "gl": gl, "hl": hl, "device": device}
for attempt in range(1, attempts + 1):
response = session.get(API, params=params, timeout=60)
if response.status_code == 200:
return response.json()
if response.status_code not in RETRY or attempt == attempts:
raise RuntimeError(f"{query!r}: HTTP {response.status_code} {response.text[:200]}")
time.sleep(2 * attempt)
def rank_of(serp, domain):
"""Position of the first organic result on `domain`, or None if it is not there."""
for result in serp.get("organic_results", []):
host = urlparse(result["link"]).netloc.lower()
if host == domain or host.endswith("." + domain):
return result["position"]
return None
2つのキーワードについて、Austinでモバイルから見た場合の順位を確認します。
from serp import google_search, rank_of
keywords = ["emergency plumber", "water heater repair"]
for keyword in keywords:
serp = google_search(keyword, location="Austin,Texas,United States", device="mobile")
print(keyword, rank_of(serp, "example-plumbing.com"))
このヘルパーのリクエストパラメータ、再試行、エラー処理、順位検索について、シミュレートされたレスポンスに対してテストを行いました。
ステップ5: 順位トラッキングに変える
1回の検索はスナップショットにすぎません。トラッキングとは、同じ検索をスケジュールに沿って実行し、結果を保存することです。
- キーワードリストを固定する。 それぞれの場所、言語、デバイスも固定します。
- スケジュールに沿って実行する。 自分の市場でどれだけ順位が変動するかに応じて、毎日または毎週行います。
- 完全なレスポンスを保存する。 順位だけでなく、時刻と設定とともに各レスポンス全体を保存し、後から何が変わったかを振り返れるようにします。
- 重要な変化について通知する。 トップ3からの脱落、競合が自分より上位に表示された、強調スニペットを失った、などです。
日次キーワード順位モニタリングの自動化ガイドでは、スケジューリングとストレージについてさらに詳しく説明しています。順位トラッキングが業務の中心的な部分である場合は、SEOモニタリングのページでより広いセットアップについて説明しています。
よくあるセットアップのミス
- 場所が設定されていない。 その場合、結果はおそらく自分の市場ではないデフォルトの場所から取得されます。
- 実行ごとにデスクトップとモバイルが混在している。 これにより、実際には理由のない順位の変動が発生します。
- 完全なURLでマッチングしている。 ドメインではなく完全なURLでマッチングすると、順位のあるページのパスが変わった場合に、順位を失ったように見えてしまいます。
- 順位だけを保存している。 完全なレスポンスがなければ、なぜ順位が変化したのかがわかりません。
- キーをハードコードしている。 これは遅かれ早かれリポジトリに紛れ込むことになります。
よくある質問
SERP APIとは何ですか?
検索エンジンのクエリを代わりに実行し、結果ページを構造化データとして返すサービスです。順位付きのオーガニック検索結果、広告、強調スニペット、ローカル検索結果などが含まれるため、自分で検索ページをスクレイピングして解析する必要がありません。
SERP APIのキーはどうやって取得しますか?
SERP APIプロバイダーに登録し、そのダッシュボードでキーを作成します。Shifterのパネルでは、キーはSERP APIの中のAPI Keysにあります。キーはコードにではなく、環境変数に保存してください。
なぜSERP APIの結果が自分がGoogleで見ているものと違うのですか?
通常は、場所、言語、デバイス、またはパーソナライゼーションが異なるためです。自分自身の検索はパーソナライズされており、自分の場所から行われます。測定したい市場に合わせて、APIの場所、言語、デバイスを明示的に設定してください。
順位チェックはどのくらいの頻度で行うべきですか?
競争の激しいキーワードや変動の速い市場では毎日、それ以外のほとんどの場合は毎週で十分です。実行間で設定を同一に保ち、変化が測定方法ではなく結果を反映するようにしてください。
まとめ
SERP APIのセットアップはいくつかのステップで完了します。キーを安全に保存し、エンジン・場所・言語・デバイスを固定してクエリを送信し、改善する可能性のあるエラーだけを再試行し、構造化された結果から順位を読み取ります。同じ検索をスケジュールに沿って実行し、完全なレスポンスを保存すれば、毎回同じ結果ページを測定する順位トラッカーが完成します。