- 選択肢は3つ:手作業、自作スクレイパー(プロキシ、CAPTCHA、保守が必要なパーサー)、またはSERP API。
- 2026年の4つの落とし穴:num=100の廃止、非同期のAI Overviews、都市やデバイスで変わるSERP。
- Semscraperなら、1ページ目は1,000キーワードあたり€0.30、上位100件は€2.10。サブスクリプション不要です。
「Googleをスクレイピングする」とは
Googleのスクレイピングとは、検索結果ページ(SERP)を自動で収集し、そのデータを抽出することです。対象は自然検索結果、広告、ローカルパック、関連する質問、AI Overviews、そしてそれぞれの掲載位置です。用途はよく知られています。SEOの順位計測、競合調査、市場調査、SERPの類似度によるキーワードクラスタリング、そしてAIが生成する回答での露出の計測です。
3つの方法
1. 手作業、またはブラウザ拡張機能
数十キーワード程度なら十分です。それ以上になると時間がかかりすぎるうえ、自分の検索履歴、現在地、Googleアカウントが結果に影響します。
2. 自作スクレイパー
自分でGoogleに問い合わせるスクリプトです。理屈の上では無料ですが、実際には次のものが必要です。
- プロキシ(できれば住宅用IP)とそのローテーション。大量に問い合わせるIPアドレスはGoogleにすぐブロックされるためです。
- CAPTCHAへの対応。
- ページをレンダリングするヘッドレスブラウザ。これがないとコンテンツの一部が欠けます(後述)。
- パーサー。Googleがレイアウトを変えるたびに保守が必要です。
- 国、言語、都市、デバイスの指定。
実際のコストは、プロキシ、サーバー、そして何よりも保守にかかる時間です。
3. SERP API
これらをすべて代行してくれるサービスです。キーワードとパラメータを送ると、構造化されたSERPがJSONで返ってきます。多くのSEOツールがこの方法を採用しており、スクレイピング基盤を運用するよりリクエスト単位で支払うことを選んでいます。サービスの選び方は、SerpApiやDataForSEOとの比較記事をご覧ください。
2026年のSERPに含まれるもの
検索結果ページは、もはや10本の青いリンクが並ぶだけのものではありません。クエリによって、Googleは次のものを加えます。
- 自然検索結果
- ページ上部と下部のGoogle広告、ショッピング広告
- ローカルパック(各店舗の評価、口コミ数、価格帯を含む)
- 「他の人はこちらも質問」、強調スニペット、ナレッジグラフ
- トップニュース、動画、画像
- AI Overview(本文中で言及されたブランド、引用、ソースパネルを含む)
実際に見えているものを計測するには、ブロックごとに、各要素の位置とともに抽出する必要があります。Semscraper APIは各ブロックをそれぞれの種類で返します:organic、paid_top、local_pack、people_also_ask、ai_overview_citation…
2026年の4つの落とし穴
num=100パラメータが機能しない
2025年9月以降、Googleは1ページに100件を表示しなくなりました。上位100件を取得するには、ページを1つずつ進む必要があります。方法と費用はnum=100なしでGoogleの上位100件を取得する方法で解説しています。
AI Overviewsはページの読み込み後に表示される
100万キーワードを対象とした当社の調査では、AI Overviewsの48%が非同期で読み込まれていました。最初のHTMLには含まれず、ページが表示されてから現れます。ページをレンダリングしないスクレイパーは、これを取りこぼします。詳しくはフランスのAI Overviewsに関する調査をご覧ください。
SERPは都市によって変わる
「水道修理」や「レストラン」のようなローカル検索では、2つの都市で同じ結果は返りません。位置を指定しなければ、誰も見ていないSERPを計測することになります。地域別SERPをご覧ください。
デスクトップとモバイルで結果が異なる
AI Overviewsについては8キーワードに1つが2つのデバイスで異なる挙動を示し、ブロックの並び順も違います。用途に合ったデバイス、または両方を収集しましょう。
Semscraper APIでの例
POSTリクエストで収集を作成します。1回の呼び出しで最大1,000キーワードまで送信できます。
curl -X POST 'https://api.semscraper.com/v1/serp' \
-H 'Authorization: Bearer API_KEY' \
-H 'Content-Type: application/json' \
-d '[{"search_engine": "google_search", "keyword": "ラーメン", "device": "desktop", "location": "jp", "language": "ja", "depth": 1, "geolocation": "Shibuya, Tokyo, Japan"}]'結果はIDを指定してJSONまたはHTMLで取得するか、コールバックURLに直接届けてもらえます。各結果には、ブロック内の順位、ページ内の順位、Googleの掲載ページ、ピクセル位置が含まれます。ブロックとパラメータの全リストはGoogle検索APIのページにあります。
検索演算子も使える
Googleの演算子は、キーワードの中でそのまま使えます:site:、inurl:、intitle:、filetype:、引用符、マイナス記号による除外など。サイトのインデックス済みページを一覧化したり、特定ドメイン上のブランド言及を監視したりするのに便利です。演算子を含むクエリも料金は同じです。制約は1つだけで、APIはカンマを区切り文字として使うため、キーワードにカンマは使えません。
Pythonの完全なサンプル
このスクリプトは3つのキーワードを送信して結果を待ち、キーワードごとにAI Overviewの有無と、自然検索の上位3件をピクセル位置付きで表示します。
import time
import requests
API = "https://api.semscraper.com/v1/serp"
HEADERS = {"Authorization": "Bearer API_KEY"}
keywords = ["渋谷 ランチ", "大阪 水道修理", "名古屋 離婚 弁護士"]
# 1. 収集を作成(1回の呼び出しで最大1,000キーワード)
items = [{"search_engine": "google_search", "keyword": k, "device": "desktop",
"location": "jp", "language": "ja", "depth": 1} for k in keywords]
created = requests.post(API, json=items, headers=HEADERS).json()
ids = [row["id"] for row in created["data"]]
# 2. 結果を取得(1回の呼び出しで最大500 ID)、最長10分
done, attempts = {}, 0
while len(done) != len(ids) and attempts < 60:
attempts += 1
time.sleep(10)
res = requests.get(API, params={"ids": ",".join(ids), "output": "json"}, headers=HEADERS).json()
for row in res["data"]:
if row["status"] == "done":
done[row["id"]] = row
# 3. 各SERPを読む:AI Overview、次に自然検索の上位3件
for row in done.values():
aio = row["serp_info"].get("ai_overview")
print(row["keyword"], "| AI Overview:", aio["type"] if aio else "-")
for block in row["results"]:
if block["type"] == "organic":
for item in block["items"][:3]:
print(" ", item["rank_type"], item["pixel"], "px", item["url"])大量に処理する場合は、ポーリングのループをコールバックURL(callback_url)に置き換えましょう。各結果の準備ができ次第、APIから送信されます。
処理量と所要時間
1ページのSERPは中央値で約30秒、上位100件は約1分で届きます。1回の呼び出しで最大1,000キーワードまで送信できます。ロボットは各アカウントを順番に処理するため、他のお客様の大量リクエストがあなたの処理を遅らせることはなく、あなたのリクエストは専用のキューで順次処理されます。
SERP APIの選び方:チェックリスト
- 実際のページ送りと各結果の掲載ページ。信頼できる上位100件のために。
- ブラウザでのレンダリング。遅れて読み込まれるAI Overviewsを取得するために。
- 都市単位の位置指定。国単位だけでは不十分です。
- ピクセル位置。結果の実際の見えやすさを計測するために。
- 取得できたページのみの課金。サブスクリプションの強制なし。
- ページのHTMLもJSONとあわせて。意外な結果を確認するために。
- 公平なキュー。お客様同士で処理が偏らないこと。
費用
Semscraperでは、1ページ目が1,000キーワードあたり€0.30、追加ページは1ページごとに€0.20で、10ページなら1,000キーワードあたり€2.10です。課金は取得できたページのみで、サブスクリプションはありません。詳しくは料金ページをご覧ください。
法的な問題は?
検索結果ページは公開されていますが、それを自動で収集する行為にはGoogleの利用規約が適用され、個人データを扱う場合はGDPRなどのデータ保護法も適用されます。本ガイドは法的助言ではありません。判断に迷う場合は、専門家に用途を確認してもらってください。
