跨境卖家如何用3万关键词做市场调研:我的自动化词库搭建经历
帮一个做跨境的朋友搭关键词词库,他说想要"看看美国市场都在搜什么",我说行,然后花了三天搭了一套自动化工具。结果跑了两周,拉出来 3 万多个长尾词,他说:“这么多词我怎么看得完?” 我说你不需要看完,你只需要知道哪些词值得投。
一、跨境卖家的关键词困境
做跨境的朋友普遍面临一个问题:不知道海外用户到底用什么词搜你的产品。
大部分卖家的做法是:
- 用 Google Keyword Planner 一个个查——免费的额度只有几个
- 买 Ahrefs/SEMrush——月费 $99-$399,小卖家肉疼
- 直接抄竞争对手的广告词——不精准,且被动
我的想法是换个思路:不从关键词工具出发,而是从真实的 Google 搜索结果出发。通过大量搜索自己行业的词,分析 SERP 里出现的"相关搜索"和"People Also Ask",反向挖长尾词。
二、方案设计:SERP 反向挖掘
2.1 核心逻辑
种子词(30-50个核心词)
↓
分别搜索 → 提取 "related_searches" 和 "people_also_ask"
↓
把这些关键词作为新种子继续搜索(2-3层扩展)
↓
去重 → 按出现频率排序 → 分析搜索意图
↓
输出词库(按搜索类型分类)
2.2 为什么选 SerpBase
这个方案对搜索引擎的要求:
- 必须能拿到 “related_searches” 和 “people_also_ask” 数据
- 请求量大(可能几千上万次)
- 必须是 JSON,不然没法自动化
- 成本要低(朋友是小卖家,预算有限)
SerpBase 的返回结果天然包含这些字段,而且 $3 起步、按量计费,很适合这个场景。
对比了一圈:
- Google Custom Search API:没有 related_searches 字段
- SerpAPI:有,但 $25/千次,跑 3 万个词要 $750
- SerpBase:$0.30/千次,同样的量 $9,差了 80 多倍
三、核心实现
3.1 种子词扩展
import requests
import json
import time
from typing import Set, List, Dict
class KeywordMiner:
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.serpbase.dev/google/search"
self.seen = set() # 去重
self.keywords = [] # 结果集
def search(self, query: str) -> dict:
headers = {
"X-API-Key": self.api_key,
"Content-Type": "application/json"
}
body = {"q": query, "gl": "us", "hl": "en", "page": 1}
resp = requests.post(self.base_url, headers=headers, json=body, timeout=30)
return resp.json()
def extract_keywords(self, data: dict) -> List[str]:
"""从 SERP 响应中提取所有关键词"""
extracted = []
# 1. 相关搜索
related = data.get("related_searches", [])
for item in related:
if isinstance(item, str):
extracted.append(item)
elif isinstance(item, dict) and "query" in item:
extracted.append(item["query"])
# 2. People Also Ask
paa = data.get("people_also_ask", [])
for item in paa:
if isinstance(item, dict) and "question" in item:
extracted.append(item["question"])
elif isinstance(item, str):
extracted.append(item)
return [kw for kw in extracted if kw.lower() not in self.seen]
def mine(self, seeds: List[str], max_depth: int = 2, max_keywords: int = 30000):
"""从种子词开始递归挖掘"""
queue = [(seed, 0) for seed in seeds]
while queue and len(self.keywords) < max_keywords:
kw, depth = queue.pop(0)
if kw.lower() in self.seen:
continue
self.seen.add(kw.lower())
try:
data = self.search(kw)
new_kws = self.extract_keywords(data)
self.keywords.append({
"keyword": kw,
"depth": depth,
"new_count": len(new_kws),
"timestamp": time.time()
})
if depth < max_depth:
for nkw in new_kws[:5]: # 每层只取前 5 个
queue.append((nkw, depth + 1))
time.sleep(0.5) # 限流
print(f"[深度{depth}] {kw} -> 发现 {len(new_kws)} 个新词(已有 {len(self.keywords)})")
except Exception as e:
print(f"搜索失败 [{kw}]: {e}")
continue
return self.keywords
3.2 关键词分类与意图识别
光有 3 万个词不行,得分类。我按搜索意图分了四类:
import re
class KeywordClassifier:
def __init__(self):
self.patterns = {
"buy": [
r"\bbuy\b", r"\bprice\b", r"\bcost\b", r"\bshop\b",
r"\bdiscount\b", r"\bcoupon\b", r"\bdeal\b",
r"\bcheap\b", r"\bfor sale\b", r"\border\b"
],
"research": [
r"\bvs\b", r"\bcompare\b", r"\breview\b", r"\bbest\b",
r"\btop\b", r"\bor\b", r"\balternative\b", r"\brating\b"
],
"howto": [
r"\bhow to\b", r"\bguide\b", r"\btutorial\b",
r"\bsteps\b", r"\bway to\b", r"\btips\b"
],
"problem": [
r"\bproblem\b", r"\berror\b", r"\bfix\b", r"\bissue\b",
r"\bnot working\b", r"\bhelp\b", r"\bsolution\b"
]
}
def classify(self, keyword: str) -> List[str]:
kw_lower = keyword.lower()
types = []
for intent, patterns in self.patterns.items():
for p in patterns:
if re.search(p, kw_lower):
types.append(intent)
break
return types if types else ["informational"]
分类的意义在于:“buy” 意图的词可以直接投广告,“research” 意图的词适合做内容营销,“howto” 意图的词适合做教程视频。每个词的价值不一样,投放策略也不一样。
3.3 导出报告
import csv
from collections import Counter
def export_report(keywords: List[Dict], classifier: KeywordClassifier):
classified = []
intent_counter = Counter()
for kw in keywords:
intents = classifier.classify(kw["keyword"])
for intent in intents:
intent_counter[intent] += 1
classified.append({
"keyword": kw["keyword"],
"depth": kw["depth"],
"intent": ",".join(intents)
})
# 写 CSV
with open("keyword_report.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["keyword", "depth", "intent"])
writer.writeheader()
writer.writerows(classified)
# 意图分布
print(f"=== 搜索意图分布 ===")
for intent, count in intent_counter.most_common():
print(f"{intent}: {count} 个词")
# 建议
print(f"\n建议优先投放 'buy' 意图关键词({intent_counter['buy']} 个)")
print(f"建议用 'howto' 意图关键词做内容营销({intent_counter['howto']} 个)")
# 使用
miner = KeywordMiner(api_key="YOUR_KEY")
seeds = ["wireless earbuds", "bluetooth speaker", "phone charger"]
keywords = miner.mine(seeds, max_depth=2, max_keywords=30000)
classifier = KeywordClassifier()
export_report(keywords, classifier)
四、实际效果
两周跑下来(不是连续跑,每天跑几个小时的频率):
| 指标 | 数值 |
|---|---|
| 种子词数量 | 42 个 |
| 挖掘深度 | 2 层 |
| 总挖掘词数 | 31,847 个 |
| 去重后有效词 | 28,423 个 |
| API 请求次数 | ~4,500 次 |
| SerpBase 费用 | ~$2.7(4500 × $0.60/千次 PAYG) |
| 耗时 | 约 8 小时(含限流等待) |
相当于 3 美元不到挖了 3 万个精准行业关键词。对比 Ahrefs 的 $99/月,这个 ROI 相当炸裂。
搜索结果中,朋友的店铺名出现在前 20 的有 347 个词,这些直接可以投广告做品牌保护。还有 2000+ 个 “buy” 意图的词可以投 Google Shopping Ads。
五、避坑指南
5.1 recursion 层级不要太深
我一开始设了 max_depth=3,跑了半天发现重复率极高(80%+ 的词之前已经见过)。后来改 depth=2,性价比最优。
经验是:2 层扩展足够覆盖大部分长尾词,再深就是边际效益递减。
5.2 限流不能省
一开始没做 time.sleep,跑了 200 多次就开始返回 429。后来改成每次请求间隔 0.8s,再也没出过问题。
4500 次请求 × 0.8s ≈ 1 小时。说实话这个速度完全可以接受,又不是生产系统实时查询。
5.3 注意搜索结果的本地化
gl=us 和 gl=gb 的 related_searches 会有差异。“cell phone” vs “mobile phone” 这种美英差异,同一个种子词在美区搜出来的长尾词跟英区搜出来的不一样。如果做多国市场,建议分别跑。
六、总结
这套方案的本质是:用 Google 自己的数据反向挖掘长尾词。SerpBase 把 Google 的 “related_searches” 和 “people_also_ask” 直接结构化输出了,我们只需要做简单的递归爬取和去重。
对于预算有限的跨境卖家和独立开发者来说,这是一个非常低成本获取市场洞察的方法。不需要 $99/月的 Ahrefs,不需要 $399/月的 SEMrush,3 美元买 10000 次搜索额度,自己写个脚本挖词。
如果你也在做跨境,不妨试试这个思路:先跑 100 次免费额度看看能挖到什么词,再决定要不要继续。
后来朋友用这套词库投了 Google Ads,转化率比之前自己拍脑袋选词高了大概 40%。他说早知道这方法,之前几千块的广告费至少能省一半。
更多推荐




所有评论(0)