# 使用SERP API构建您的SEO排名追踪器

现成的排名追踪器是一个按关键词租用的黑箱。自己将SERP API连接到数据库，您就拥有了地理深度、AI概览捕获和警报功能——而成本仅为一小部分。

商业排名追踪器按关键词收费，并提供一个您无法查询的仪表板。使用SERP API构建您自己的追踪器，您将拥有原始SERP快照，选择确切的地理位置和设备进行追踪，捕获决定可见性的结果页面部分——AI概览、人们也在问、本地包——并将警报连接到您已经使用的任何工具。这是一个完整的教程：架构、每日运行、AI概览和PAA捕获、差异和警报，以及2026年会破坏简单追踪器的注意事项。它运行在[QuantumProxies SERP API](https://quantumproxies.io/serp-api)上，因此无需管理代理池。

## 重塑排名追踪的注意事项

两项变化使现代追踪器与2020年的不同。首先，Google移除了`&num=100`参数，因此您无法在单个请求中提取100个结果——您大约每次分页十个，这改变了您可以负担追踪的深度，并使高效的API成为必需而非可选。其次，结果页面不再是十个蓝色链接的干净列表：AI概览可以位于所有内容之上并直接回答查询，人们也在问框和特色片段吸引点击，本地包拥有商业意图。仅追踪一个简单的位置数字而忽略这些就是在追踪错误的内容。我们关于[2026年SERP抓取工作原理](https://quantumproxies.io/blog/how-serp-scraping-works-in-2026)的解释深入探讨了num=100的影响。

## 步骤1：为差异构建的架构

整个系统是一个您与昨天进行差异的每日快照，因此架构是快照优先：每个关键词、地理位置、设备和日期一行，排名数据和SERP功能存储在旁边。将AI概览和PAA作为结构化列保存，以便您可以直接查询它们。

```sql
CREATE TABLE serp_snapshot (
  id           bigserial PRIMARY KEY,
  keyword      text        NOT NULL,
  country      text        NOT NULL,   -- gl: us, gb, de...
  city         text,                   -- optional city-level
  device       text        NOT NULL,   -- desktop | mobile
  position     int,                    -- your domain's best rank, null = not found
  landing_url  text,
  aio_present  boolean     NOT NULL,   -- AI Overview shown?
  aio_cited    boolean     NOT NULL,   -- did it cite your domain?
  paa          jsonb,                  -- People Also Ask questions
  top3         jsonb,                  -- who owns positions 1-3
  captured_at  date        NOT NULL,
  UNIQUE (keyword, country, city, device, captured_at)
);
```

## 步骤2：每日地理运行

核心循环遍历每个目标地理位置和设备的关键词，针对每个组合调用一次SERP API，并找到您的域名的最佳位置。由于API返回解析后的JSON并在内部处理轮换、地理和阻止，因此这仍然是一个简单的循环——无需无头浏览器、无需代理轮换代码、无需CAPTCHA处理。设置`gl`为国家，并为城市级别设置位置，结果会返回已本地化。

```python
import requests, datetime

QP = "https://api.quantumproxies.io/v1/scraper/serp"
HEAD = {"Authorization": f"Bearer {QP_KEY}"}

def run_keyword(keyword, country, device="desktop", city=None):
    params = {"engine": "google", "query": keyword,
              "gl": country, "device": device, "num": 20}
    if city:
        params["location"] = city
    data = requests.post(QP, headers=HEAD, json=params, timeout=120).json()["payload"]

    pos, url = None, None
    for r in data.get("organic", []):
        if "yourdomain.com" in r["link"]:
            pos, url = r["rank"], r["link"]
            break
    return data, pos, url
```

[获取SERP API密钥以支持您的追踪器](https://quantumproxies.io/serp-api)

![排名追踪器流水线：每天一次，用关键词乘以地区乘以设备，每个组合调用一次 SERP API，返回解析好的排名、AI Overview 和 PAA，每个关键词、地区和日期存一行快照，再与前一天对比并发出警报；卡片计算了调用量：一百个关键词、五个国家、两种设备。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335221/blog/generated/qp-b9-096-diag1.png)
*关键词乘以地理位置，每天一次，进入一个可差异的存储——SERP API每次运行返回解析后的位置加上AIO和PAA。*

## 步骤3：捕获AI概览和PAA

这是自制追踪器击败廉价商业追踪器的地方，大多数商业追踪器仍然只报告十个链接。即使您“排名”第三，AI概览也可能将您的自然结果推到折叠以下，并且在AI概览中*被引用*现在是一个值得单独追踪的可见性指标。提取AIO的存在以及它是否引用您的域名，并存储PAA问题——它们同时也是新的关键词和内容创意。

```python
def extract_features(data, domain="yourdomain.com"):
    aio_present = bool(data.get("ai_overview"))
    aio_cited = any(domain in (s.get("link") or "")
                    for s in data.get("ai_overview_references", []))
    paa = [q["question"] for q in data.get("people_also_ask", [])]
    top3 = [r["link"] for r in data.get("organic", [])[:3]]
    return aio_present, aio_cited, paa, top3
```

随着时间的推移追踪AIO引用正迅速成为SEO的头条指标——我们关于[程序化捕获AI概览存在](https://quantumproxies.io/blog/track-google-ai-overviews-serp)的指南更深入探讨了值得记录的信号。从多个国家运行相同的关键词，您将看到排名和AIO引用因地理位置而不同，这正是为什么城市级别的运行对任何拥有本地或国际足迹的人都很重要，如[全球监控SERP变化](https://quantumproxies.io/blog/title-using-proxies-to-monitor-serp-changes-globally)中所述。

![一个 Google 结果页，AI Overview、People Also Ask 和本地包位于你的自然结果上方或旁边，因此单看位置已不能代表排名；卡片列出了追踪器应当报警的情况：下降三位或以上、失去 AI Overview 引用、竞争对手进入前三、URL 跌出第一页。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335221/blog/generated/qp-b9-096-diag2.png)
*位置不再是排名——捕获AI概览、PAA和本地包，并在它们中的任何一个移动时发出警报。*

## 步骤4：差异和警报

一个没人阅读的追踪器就是一个日志文件。价值在于警报——在某件事情移动的那一刻发送消息。在每次运行后，将新快照与前一天进行比较，并对重要变化发出警报：下降三位或更多，获得或失去AI概览引用，竞争对手进入前三，或URL从第一页掉落。将这些推送到Slack、电子邮件或webhook，以便SEO团队在流量报告之前听到滑坡。

```python
def diff_and_alert(kw, geo, today, yesterday):
    alerts = []
    if yesterday.position and today.position:
        if today.position - yesterday.position >= 3:
            alerts.append(f"{kw} [{geo}] dropped "
                          f"{yesterday.position} -> {today.position}")
    if yesterday.aio_cited and not today.aio_cited:
        alerts.append(f"{kw} [{geo}] lost its AI Overview citation")
    if today.position and today.position > 10 and \
       (yesterday.position or 0) <= 10:
        alerts.append(f"{kw} [{geo}] fell off page one")
    for a in alerts:
        notify(a)   # -> Slack / email / webhook
```

## 调度，并对数量保持诚实

将整个过程运行在每日cron上，理想情况下在一致的时间，以便日复一日的差异可以进行比较。对规模保持现实：关键词乘以国家乘以城市乘以设备是您的真实查询数量，并且增长迅速——五个国家的100个关键词在两个设备上每天就是一千次SERP调用。SERP API按查询收费，因此追踪您实际会采取行动的组合，而不是所有可想象的。如果您将其构建为产品而不是内部工具，我们关于[为AI和SEO工具选择SERP API](https://quantumproxies.io/blog/serp-api-for-ai-seo-tools)的文章涵盖了每次查询的经济性。如果您更愿意从代理驱动运行，我们的[MCP服务器](https://quantumproxies.io/mcp-server)也提供相同的端点。

## 常见问题解答

### 如何使用SERP API构建排名追踪器？

每个关键词、地理位置、设备和日期存储一个快照；针对每个组合调用一次SERP API以获取解析结果；提取您的域名位置加上AI概览和PAA数据；然后每天与前一天进行差异并对有意义的移动发出警报。API处理代理、地理和阻止，因此您的代码保持为一个在数据库上调度的循环。

### 我还能每次查询获得100个结果吗？

不能在一个请求中——Google移除了`num=100`参数，因此结果大约每页十个，深入追踪意味着分页。对于大多数追踪，您只需要前20个左右，这可以降低查询量和成本。为您分页的SERP API将此细节隐藏在单个调用后面。

### 我如何追踪AI概览的存在？

每次运行捕获两件事：查询是否出现AI概览，以及它是否在其来源中引用了您的域名。将两者作为单独的字段存储，以便您可以随时间推移趋势引用——在AI概览中被引用现在是一个独立于您的自然位置的可见性指标。

### 排名追踪器应该多久运行一次？

每天是SEO的标准，在一致的时间以便差异具有可比性。波动或高价值的术语可以证明每天运行两次是合理的；稳定、低优先级的术语每周一次就可以。将频率与关键词实际移动的速度以及您的SERP-API查询预算相匹配，因为关键词乘以地理位置乘以设备是您的真实成本驱动因素。

排名追踪器是一个架构、一个每日SERP调用和一个差异——杠杆在于拥有这三者。在您关心的地理位置捕获位置、AI概览和PAA，对真实移动发出警报，您就拥有一个成本仅为商业追踪器一小部分的追踪器，并回答他们从未让您问的问题。

[在QuantumProxies SERP API上构建您的排名追踪器](https://quantumproxies.io/serp-api)
