| この記事の要点 |
|
Google Trends とは
Google Trends は Google 検索の人気度を可視化する無料サービスです。「特定キーワードが、ある期間にどれだけ検索されたか」を相対値で見られます。SEO 調査 / 季節性把握 / 競合分析 / ニュース解析で広く使われます。
ただし公式の Google Trends API は 2025 年 7 月に発表されたアルファ版で、申込制の限定公開です(2026-10 時点)。アクセスが得られない場合にデータを自動取得するには、非公式ライブラリやサードパーティ API を使う必要があります。
主な取得手段の比較
| 手段 | 言語 | 料金 | SLA | 用途 |
|---|---|---|---|---|
| pytrends | Python | 無料 (OSS) | 無し | 研究 / PoC / 個人 |
| SerpAPI | 多言語 SDK | 無料 (月 250 検索) / 有料 $25/月〜(2026-10 時点) | あり (99.9%) | 商用 / 安定稼働 |
| Glimpse | Web UI / API | 有料 | あり | 絶対検索回数推定が必要な場合 |
| TrendsAPI Pro | REST | $15/月〜 | あり | 安価で大量取得 |
| 直接スクレイピング | 自前 | 無料 | 無し | 非推奨 (BAN リスク) |
pytrends (Python 非公式ライブラリ)
最も普及している Python ライブラリ。内部的に Google Trends の非公式 JSON エンドポイントを叩いて整形してくれます。
pip install pytrendsfrom pytrends.request import TrendReq
# hl=表示言語, tz=タイムゾーン (分単位、東京は -540)
pytrends = TrendReq(hl='ja-JP', tz=-540)
# キーワード設定 (最大5語まで同時比較可)
kw_list = ['Python', 'Ruby', 'PHP', 'Go']
pytrends.build_payload(
kw_list,
cat=0, # カテゴリ (0=All, 5=Computers)
timeframe='today 12-m', # 過去12ヶ月
geo='JP', # 国コード (JP=日本)
gprop='' # 検索プロパティ (''=Web, 'news', 'images', 'youtube')
)
# 1. 時系列トレンド
trend_df = pytrends.interest_over_time()
print(trend_df.head())
# Python Ruby PHP Go isPartial
# 2024-06-09 82 18 45 61 False
# 2. 地域別関心度
region_df = pytrends.interest_by_region(resolution='COUNTRY')
print(region_df.sort_values('Python', ascending=False).head())
# 3. 関連クエリ
related = pytrends.related_queries()
print(related['Python']['top']) # トップ関連
print(related['Python']['rising']) # 急上昇関連
# 4. 関連トピック
related_topics = pytrends.related_topics()
# 5. 急上昇キーワード(日次)
trending = pytrends.trending_searches(pn='japan')
print(trending.head(10))
注意: 相対値 (0〜100) であること
pytrends も Web UI も絶対検索回数を返しません。値は次のように正規化されます:
- 期間内 / 指定キーワード群の中で「最も検索された地点」を 100 とする
- 他の地点・他のキーワードは、その 100 に対する相対値 (0〜100)
- 「100」は絶対値ではなく、「ピーク時点」を示すだけ
つまり:
「Python」単独で 100 = ピーク時 100% 検索された
「Python」と「Ruby」を比較して Python=80, Ruby=10
→ Python は Ruby の 8 倍検索された (期間ピーク基準)
絶対検索回数の推定が必要なら Glimpse / Keyword Planner を併用。
SerpAPI 経由 (商用おすすめ)
SerpAPI は Google Trends を含む各種 Google サービスを REST API で叩けます。SLA とサポート付きで商用利用しやすい。
curl "https://serpapi.com/search?engine=google_trends&q=Python,Ruby&date=today+12-m&geo=JP&api_key=YOUR_KEY"from serpapi import GoogleSearch
params = {
"engine": "google_trends",
"q": "Python,Ruby,PHP",
"data_type": "TIMESERIES", # TIMESERIES / GEO_MAP / RELATED_TOPICS / RELATED_QUERIES
"date": "today 12-m",
"geo": "JP",
"api_key": "YOUR_SERPAPI_KEY",
}
results = GoogleSearch(params).get_dict()
print(results["interest_over_time"]["timeline_data"][:3])
非公式エンドポイント直叩き (上級者向け)
pytrends も内部でこれを使っています。仕組み理解のみ:
1. https://trends.google.com/trends/api/explore?req=...&tz=...&hl=...
→ トークン (widgets) を取得
2. https://trends.google.com/trends/api/widgetdata/multiline?...&token=...
→ 時系列データ取得 (先頭5バイト ")]}'," を捨てて JSON パース)
ハマりどころ:
- NID クッキーが無いと 429 になりやすい
- レスポンス先頭の XSSI プレフィックス ")]}'," を除去必須
- 短時間多発で IP 単位の一時 BAN
- 仕様が予告なく変わる
レート制限と対策
| 症状 | 原因 | 対策 |
|---|---|---|
| 429 Too Many Requests | 短時間多発 | 1〜5 秒のスリープ、指数バックオフ |
| ResponseError 数日継続 | IP 単位の BAN | プロキシローテーション or SerpAPI 移行 |
| 空のデータフレーム | マイナーすぎるキーワード | キーワード変更 or 期間延長 |
| キーワード5語超でエラー | 1リクエスト最大5語 | 5語ずつバッチ化し基準語で正規化 |
SEO 調査での実践例
# 5語を超える比較は、共通の基準語を入れてバッチ化+正規化
import pandas as pd
from pytrends.request import TrendReq
pytrends = TrendReq(hl='ja-JP', tz=-540)
keywords = ['Python','Ruby','PHP','Go','Rust','Java','TypeScript','Kotlin','Swift']
anchor = 'Python' # 全バッチに共通で入れる基準語
dfs = []
for i in range(0, len(keywords), 4):
batch = [anchor] + [k for k in keywords[i:i+4] if k != anchor]
pytrends.build_payload(batch, timeframe='today 12-m', geo='JP')
df = pytrends.interest_over_time().drop(columns=['isPartial'])
dfs.append(df)
# anchor の値で正規化
merged = dfs[0]
for df in dfs[1:]:
scale = merged[anchor].mean() / df[anchor].mean()
df = df * scale
merged = merged.join(df.drop(columns=[anchor]), how='outer')
print(merged.tail())
FAQ
Q: Google Cloud に Trends の API は無いの?
A: 公式の Google Trends API は 2025 年 7 月からアルファ版として申込制で限定提供されています(2026-10 時点、一般公開前)。また BigQuery の公開データセット(google_trends)で、人気・急上昇検索語の上位 25 件を取得できます。
Q: pytrends が突然動かなくなった
A: Google が内部仕様を変えるとよくあります。pytrends の GitHub リポジトリは 2025 年 4 月にアーカイブ(開発終了)されているため、公式 API(アルファ)への申込か SerpAPI への切り替えを検討してください。
Q: 検索回数の「実数」を知りたい
A: Trends は相対値しか返しません。Glimpse(推定実数を返す商用サービス)か、Google 広告の キーワードプランナー を併用してください。
Q: 利用規約上問題ないか
A: Google の規約はスクレイピングを禁止しています。商用や本番では SerpAPI 等の正規 API を経由するのが安全です。
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Struts JSP タグ完全リファレンス(Struts 1/2 + Spring MVC への移行) 2026-10-14 01:45:33
- struts-config.xmlの説明 2026-10-14 01:45:33
- Struts1 の ActionForm とは? validate() / reset() / DynaActionForm の使い分け 2026-10-14 01:45:32
- Struts パスに対するアクションのインスタンスがありません の対処 2026-10-14 00:47:47
- Eclipse「cvc-complex-type.2.4.a Invalid content」XML スキーマ検証エラーの原因と対処 2026-10-14 00:47:47
- Struts 1 の Action クラス完全解説 (execute / ActionForm / forward) 2026-10-14 00:47:47
- Struts「TLD によると、タグ form の属性 id は無効です」原因と対処 2026-10-14 00:02:06
- Cannot find bean in any scope (Struts) エラー対処 2026-10-14 00:02:05
- java.lang.NullPointerException: Module 'null' not found 2026-10-13 23:12:26
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45