Skip to content

Google SERP 竞争域分析(Live)

本接口用于根据你提交的一组,返回在这些搜索结果中排名的竞争域名列表。除域名本身外,还会提供对应的 SERP 排名表现、评分、预估流量(ETV)和可见度(Visibility)等指标,便于快速识别搜索竞争对手。

接口说明

  • 请求方式POST
  • 接口地址https://api.seermartech.cn/v3/dataforseo_labs/google/serp_competitors/live
  • 请求格式application/json
  • 请求体结构:JSON 数组 [{...}]

计费与调用限制

本接口按请求计费。

根据示例响应中的费用,本次调用参考价约 ¥0.1680 / 次扣费以响应头 X-SeerMarTech-Charge-CNY 为准。

调用限制:

  • 每分钟最多 2000 次 API 调用
  • 最大并发请求数 30

功能特性

你可以通过本接口:

  • 指定最多 200 个进行竞争域分析
  • 按国家/地区与语言限定结果范围
  • 控制是否子域名
  • 指定返回数量与分页偏移
  • 对结果进行过滤和排序

请求参数

顶层请求体示例

json
[
 {
 "keywords": ["phone", "watch"],
 "language_name": "English",
 "location_code": 2840,
 "item_types": [],
 "limit": 5
 }
]

参数说明

字段类型说明
keywordsarray。数组,结果将基于该数组中的生成。使用 UTF-8 编码;会自动转换为小写。最多支持 200 个
location_namestring地区名。未提供 location_code 时填。location_namelocation_code 二选一。可通过 /v3/dataforseo_labs/locations_and_languages 获取可用地区列表。示例:United Kingdom
location_codeinteger地区唯一标识。未提供 location_name 时填。location_namelocation_code 二选一。可通过 /v3/dataforseo_labs/locations_and_languages 获取可用地区列表。示例:2840
language_namestring语言名。未提供 language_code 时填。language_namelanguage_code 二选一。可通过 /v3/dataforseo_labs/locations_and_languages 获取可用语言列表。示例:English
language_codestring语言唯一标识。未提供 language_name 时填。language_namelanguage_code 二选一。示例:en
include_subdomainsboolean是否在分析中子域名。可选,默认值:true。如设为 false,则忽略子域名。
item_typesarray搜索结果类型。用于限定响应中统计的搜索结果类型。可选。未指定时使用默认类型集合。
limitinteger返回域名数量上限。可选,默认值:100,最大值:1000
offsetinteger结果偏移量。可选,默认值:0。例如设置为 10 时,会跳过前 10 条结果,从后续结果开始返回。
filtersarray结果过滤条件数组。可选。最多支持 8 个过滤条件,条件之间需使用逻辑运算符 andor 连接。支持运算符:regexnot_regex<<=>>==<>innot_inmatchnot_matchilikenot_ilikelikenot_likelike / not_like / ilike / not_ilike 支持 % 通任意长度字符串。过滤器规则可参考 /v3/dataforseo_labs/filters
order_byarray排序规则。可选。可使用与 filters 相同的字段作为排序字段,排序方式为 ascdesc单次请求最多设置 3 条排序规则。多条规则之间使用逗号分隔。
tagstring自定义任务标识。可选,最大长度 255 字符。可用于在响应中识别和匹该任务;返回值会出现在响应的 data 对象中。

过滤与排序

支持的过滤运算符

  • regex
  • not_regex
  • <
  • <=
  • >
  • >=
  • =
  • <>
  • in
  • not_in
  • match
  • not_match
  • ilike
  • not_ilike
  • like
  • not_like

过滤示例

筛选出 relevant_serp_items > 0median_position 属于 [1, 10] 的竞争域:

json
[
 {
 "keywords": ["phone", "watch"],
 "location_name": "United States",
 "language_name": "English",
 "filters": [
 ["relevant_serp_items", ">", 0],
 "or",
 ["median_position", "in", [1, 10]]
 ]
 }
]

响应结构

接口返回 JSON 数据,核心位于 tasks 数组中。

顶层字段

字段类型说明
versionstring当前 API 版本。
status_codeinteger通用状态码。建议在接时实现完整的异常与错误处理机制。错误码参考 /v3/appendix/errors
status_messagestring通用状态信息。
timestring接口执行耗时,单位秒。
costfloat本次请求总成本,单位 USD。
tasks_countintegertasks 数组中的任务数量。
tasks_errorintegertasks 数组中执行失败的任务数量。
tasksarray任务结果数组。

tasks[] 字段

字段类型说明
idstring任务唯一标识,UUID 格式。
status_codeinteger任务状态码,范围通常在 10000-60000
status_messagestring任务状态信息。
timestring任务执行耗时,单位秒。
costfloat当前任务成本,单位 USD。
result_countintegerresult 数组中的数量。
patharray请求路径。
dataobject回显请求中提交的参数。
resultarray结果数组。

result[] 字段

字段类型说明
se_typestring搜索引擎类型。
seed_keywordsarray请求中提交的。返回时会解码 %##+ 会解码为空格。
location_codeinteger请求中的地区代码;若无数据则为 null
language_codestring请求中的语言代码;若无数据则为 null
total_countinteger数据库中与请求匹的结果总数。
items_countintegeritems 数组中返回的结果数。
itemsarray检测到的 SERP 竞争域及指标。

items[] 字段

字段类型说明
se_typestring搜索引擎类型。
domainstring检测到的竞争域名。
avg_positioninteger域名在指定上的平均排名,即 keywords_positions 中位置值的算术平均数。
median_positioninteger域名在指定上的排名中位数。
ratinginteger排名与理论最佳排名之间的差值,用于表示该域名在指定上的相对可见度。计算:sum(100 - keywords_positions)
etvfloat预估流量(Estimated Traffic Volume)。表示这些预计每月为该网站带来的流量。计算基于搜索量与对应 SERP 位置 CTR 的乘积之和。
keywords_countinteger该域名在 SERP 中有排名的指定数量。
visibilityfloatSERP 可见度。根据排名计算网站可见度:排名 1-10 的分别对应 10.1 的可见度指数;排名 11-20 固定为 0.05;排名 21-1000
relevant_serp_itemsinteger与该域名的 SERP素数量,即该域名在指定下搜索结果的数量。
keywords_positionsobject排名明细,表示该域名在各指定下的 SERP 排名。

请求示例

cURL

bash
curl --location --request POST "https://api.seermartech.cn/v3/dataforseo_labs/google/serp_competitors/live" \
--header "Authorization: Bearer smt_live_YOUR_KEY" \
--header "Content-Type: application/json" \
--data-raw '[
 {
 "keywords": ["phone", "watch"],
 "language_name": "English",
 "location_code": 2840,
 "item_types": [],
 "limit": 5
 }
]'

Python

python
import requests

url = "https://api.seermartech.cn/v3/dataforseo_labs/google/serp_competitors/live"
payload = [
 {
 "keywords": ["phone", "watch"],
 "location_name": "United States",
 "language_name": "English",
 "filters": [
 ["relevant_serp_items", ">", 0],
 "or",
 ["median_position", "in", [1, 10]]
 ]
 }
]
headers = {
 "Authorization": "Bearer smt_live_YOUR_KEY",
 "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)
print(response.json)

TypeScript

typescript
import axios from "axios";

const postArray = [
 {
 keywords: ["phone", "watch"],
 language_name: "English",
 location_code: 2840,
 filters: [
 ["relevant_serp_items", ">", 0],
 "or",
 ["median_position", "in", [1, 10]]
 ]
 }
];

axios({
 method: "post",
 url: "https://api.seermartech.cn/v3/dataforseo_labs/google/serp_competitors/live",
 headers: {
 Authorization: "Bearer smt_live_YOUR_KEY",
 "Content-Type": "application/json"
 },
 data: postArray
})
 .then((response) => {
 console.log(response.data);
 })
 .catch((error) => {
 console.error(error);
 });

响应示例

json
{
 "version": "0.1.20220216",
 "status_code": 20000,
 "status_message": "Ok.",
 "time": "0.0779 sec.",
 "cost": 0.0105,
 "tasks_count": 1,
 "tasks_error": 0,
 "tasks": [
 {
 "data": {
 "api": "dataforseo_labs",
 "function": "serp_competitors",
 "se_type": "google",
 "keywords": ["phone", "watch"],
 "language_name": "English",
 "location_code": 2840,
 "item_types": [],
 "limit": 5
 },
 "result": [
 {
 "location_code": 2840,
 "language_code": "en",
 "total_count": 86,
 "items_count": 5,
 "items": [
 {
 "se_type": "google",
 "domain": "www.phone.com",
 "avg_position": 2,
 "median_position": 2,
 "rating": 98,
 "etv": 59616,
 "keywords_count": 1,
 "visibility": 0.9,
 "relevant_serp_items": 1,
 "keywords_positions": {
 "phone": [2]
 }
 },
 {
 "se_type": "google",
 "domain": "www.t-mobile.com",
 "avg_position": 3,
 "median_position": 3,
 "rating": 97,
 "etv": 35806.4,
 "keywords_count": 1,
 "visibility": 0.8,
 "relevant_serp_items": 1,
 "keywords_positions": {
 "phone": [3]
 }
 },
 {
 "se_type": "google",
 "domain": "www.cnet.com",
 "avg_position": 4,
 "median_position": 4,
 "rating": 96,
 "etv": 24251.2,
 "keywords_count": 1,
 "visibility": 0.7,
 "relevant_serp_items": 1,
 "keywords_positions": {
 "phone": [4]
 }
 },
 {
 "se_type": "google",
 "domain": "www.pcmag.com",
 "avg_position": 5,
 "median_position": 5,
 "rating": 95,
 "etv": 17259.2,
 "keywords_count": 1,
 "visibility": 0.6,
 "relevant_serp_items": 1,
 "keywords_positions": {
 "phone": [5]
 }
 }
 ]
 }
 ]
 }
 ]
}

状态码与错误处理

  • 顶层 status_code 表示整个请求的执行状态
  • tasks[].status_code 表示单个任务的执行状态
  • 建议同时校验:
  • HTTP 状态码
  • 顶层 status_code
  • 任务级 tasks[].status_code

常见成功状态:

  • 20000:请求成功

更多错误码可参考:/v3/appendix/errors

使用建议

  • 量较大时,建议按主题或业务线分批请求,便于分析竞争格局
  • 如需统一站点级竞争分析,可将 include_subdomains 设为 false
  • 若只高价值竞争域,可结合 filtersvisibilityetvmedian_position 等字段做筛选
  • 若需要分页拉取量结果,可合 limitoffset 使用

实用场景

  • 识别自然搜索竞争对手:一组核心业务,快速找出在 SERP 中真正与你争夺流量的域名,用于竞品监控与市场判断。
  • 筛选高可见度竞争站点:基于 visibilityratingetv 过滤强势域名,帮助团队优研究值得越的对手。
  • 评估组竞争强度:通过查看同一集下的竞争域数量、排名分布和流量预估,制定优级。
  • 拆分品牌站与站对手结构:结合 include_subdomainsdomain 和排名指标,区分官方站、媒体站、评测站等不同竞争类型。
  • 发现可切的 SERP 机会:分析哪些竞争域覆盖多但平均排名不高,从中寻找可通过优化或专题页布局实现突破的机会。

统一入口:官网 · LLM API · 控制台