从 0 搭一个关键词排名监控:核心思路 + 可运行代码

很多做 SEO 工具的朋友问过我:排名监控到底怎么做?今天从 0 讲一遍完整思路,带可运行的代码。

先说清楚:排名监控这件事,难点不在"查一次排名",而在"每天稳定地查 + 存历史 + 对比变化"。查一次排名,调一个接口就行;难的是让这件事每天自动跑、不出错、数据还能用。

一、整体思路

排名监控 = 四步循环:

  1. 定时任务:每天(或每几小时)触发一次
  2. 查排名:对每个关键词,查 Google 搜索结果
  3. 存历史:把每次的排名结果存下来
  4. 对比告警:今天的排名和昨天比,变了就通知

二、查排名

下面以 SerpBase 的 /google/search 接口为例(1 积分一次)。返回的 JSON 里,organic 数组就是自然搜索结果,每条带 ranktitlelink

python 复制代码
import requests

def fetch_rank(keyword):
    r = requests.post(
        "https://api.serpbase.dev/google/search",
        headers={"X-API-Key": "你的key"},
        json={"q": keyword, "hl": "zh-CN", "gl": "cn"},
        timeout=10,
    )
    r.raise_for_status()
    data = r.json()

    # 找到自己的域名排第几
    organic = data.get("organic", [])
    for item in organic:
        if "yoursite.com" in (item.get("link") or ""):
            return item.get("rank")
    return None  # 没排进前 10

三、存历史

排名数据要存下来才有用。最简单的用 SQLite,数据量大了换 PostgreSQL:

python 复制代码
import sqlite3

conn = sqlite3.connect("rank.db")
conn.execute("""
    CREATE TABLE IF NOT EXISTS rank_history (
        keyword TEXT,
        rank INTEGER,
        date TEXT
    )
""")

def save_rank(keyword, rank):
    conn.execute(
        "INSERT INTO rank_history VALUES (?,?,?)",
        (keyword, rank, datetime.now().strftime("%Y-%m-%d")),
    )
    conn.commit()

四、对比告警

今天和昨天的排名对比,变化超过阈值就通知:

python 复制代码
def check_change(keyword, today_rank):
    row = conn.execute(
        "SELECT rank FROM rank_history WHERE keyword=? ORDER BY date DESC LIMIT 1 OFFSET 1",
        (keyword,),
    ).fetchone()
    if not row:
        return
    yesterday = row[0]
    if today_rank and yesterday and abs(today_rank - yesterday) >= 3:
        send_alert(f"{keyword}: {yesterday} -> {today_rank}")

五、定时跑

用 GitHub Actions 每天定时执行,免费:

yaml 复制代码
name: rank-monitor
on:
  schedule:
    - cron: "0 1 * * *"   # 每天 1 点 UTC(北京 9 点)
jobs:
  monitor:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
      - run: pip install requests
      - run: python monitor.py
        env:
          SERPBASE_API_KEY: ${{ secrets.SERPBASE_API_KEY }}

六、几个注意点

  1. rank 会随地区变 :同一个词,上海和北京查,排名可能不同。固定用同一组 hl/gl 查,数据才可比。
  2. 别高频查:排名变化是小时级的,一天查 1-2 次足够,查太多纯浪费。
  3. 本地词要用 Maps:如果监控"上海 牙科诊所"这种,光查 search 不够,得用 Maps 端点带坐标。

七、成本

几十个词,一天查一次,一个月在 Starter 档($0.50/千次)内,几美元的事。积分不过期,用多少扣多少。

八、还能扩展

  • 多语言 :加 gl 参数查不同国家
  • 图片 :加 /google/images 看自己的图有没有进图片包
  • AI Overview:看自己的品牌有没有被 AI 摘要提到

完整参数和响应字段参考:serpbase.dev/docs。这套思路,我从 0 搭到能跑,一个下午就够。

相关推荐
Fanta丶1 小时前
14.Python闭包、装饰器
python
喵个咪1 小时前
GoWind Shop 出海实战:多语言商品内容怎么存、怎么录、怎么按 locale 取
vue.js·后端·go
蜘蛛人1 小时前
竞品 SERP 周报自动化:每周一早上 9 点自动生成
api·serp
码云骑士1 小时前
99-混合搜索Hybrid-Search-BM25-稀疏稠密向量-融合排序
python
VIP_CQCRE2 小时前
Ace Data Cloud 创收联盟:把 AI 能力变成可运营的产品
ai·aigc·api·云服务·开发者工具
金銀銅鐵2 小时前
[Python] 借助 Turtle 逐字展示《醉翁亭记》
python
用户7088769039382 小时前
给传统 SaaS 增加 AI 能力:3个真实落地场景
python
郝学胜_神的一滴3 小时前
C++20 高级编程 001:从极简HelloWorld到现代类型体系全梳理
c++·后端