UC-SERP-010SERPLv2
Top100 結果を 1 コールで収集
Google の仕様変更に追従しつつ上位 100 件を 1 コールで取得する運用を作る。
SERP API
KPI 例
- 1 クエリあたり件数
- 取得コスト
- 失敗率
Google 検索の Top100 を 1 回で取得する実装は、2025 年 9 月 10 日以降に前提が変わりました。Bright Data の現行 docs では、Google の num 仕様変更により、Top100 は SERP の /request ではなく Scrapers の Google SERP 100 Results を使う構成が案内されています。
誰の課題か
- SEO チームが、上位 100 件を毎回同じ方式で取得したい
- 分析担当が、ページング処理を自前で持ちたくない
- 運用担当が、Google 側の仕様変更の影響を最小化したい
推奨製品セット
| 製品 | 役割 | 使いどころ |
|---|---|---|
| Scrapers | Top100 の取得本体 | Google の 1..10 ページ相当を 1 ジョブで取得する |
| SERP API | 通常の単ページ取得 | Top10 や日常の確認用 |
| API Access | 認証方式 | Trigger、Progress、Snapshot を呼ぶ |
- 2025-09-10 以降は、Top100 を
/requestのnum=100前提で書かないようにします。 - Bright Data の現行ガイドでは、Dataset ID
gd_mfz5x93lmsjjjylobを使う方式が案内されています。
最小実装イメージ
curl
curl -X POST "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_mfz5x93lmsjjjylob&include_errors=true" \
-H "Authorization: Bearer $BRIGHTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '[{
"url": "https://www.google.com/",
"keyword": "bright data",
"language": "en",
"country": "US",
"start_page": 1,
"end_page": 10
}]'Python
import os
import time
import requests
API_KEY = os.environ["BRIGHTDATA_API_KEY"]
DATASET_ID = "gd_mfz5x93lmsjjjylob"
trigger = requests.post(
f"https://api.brightdata.com/datasets/v3/trigger?dataset_id={DATASET_ID}&include_errors=true",
headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
json=[{
"url": "https://www.google.com/",
"keyword": "bright data",
"language": "en",
"country": "US",
"start_page": 1,
"end_page": 10,
}],
timeout=60,
)
trigger.raise_for_status()
snapshot_id = trigger.json()["snapshot_id"]
while True:
progress = requests.get(
f"https://api.brightdata.com/datasets/v3/progress/{snapshot_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
)
progress.raise_for_status()
status = progress.json()["status"]
if status == "ready":
break
time.sleep(5)
result = requests.get(
f"https://api.brightdata.com/datasets/v3/snapshot/{snapshot_id}?format=json",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
)
result.raise_for_status()
rows = result.json()
print("rows:", len(rows))start_page: 1とend_page: 10が Top100 相当です。- これは非同期ワークフローなので、Trigger 後に
snapshot_idを使って進捗確認と結果取得を行います。
運用ポイント
- Top100 は通常の 1 ページ取得よりペイロードが大きいため、非同期前提で設計します。
- 単純な順位監視だけなら Top10 で足りることも多いので、用途ごとに深さを分けます。
include_paginated_htmlが必要な場合だけ有効化し、不要な HTML 取得でデータ量を増やさないようにします。num=100前提の古い実装が残っていないか、2025-09-10 以降のコードは必ず見直します。