聊天讨论 我给 5 个网站做了个关键词排名监控,一个月光 API 不到 $3

dodou88(dodou) · 2026年07月16日 · 22 次阅读

我手上跑着 5 个 side project,每个都想做点 SEO。但市面上能用的排名追踪工具全是给 agency 准备的——Ahrefs $99/月起,SEMrush $130/月起。对一个还在 MVP 阶段的小项目来说,这笔钱投出去肉疼。

不投的话,我完全不知道"react server components 教程"这种我花了 3 周打底的关键词,到底有没有从第 47 名爬到第 30 名。Google Search Console 数据滞后 2-3 天,免费工具又只能看自家站。

所以我给自己写了一个小工具。每天早上 8 点自动跑一遍我关心的关键词,存到 SQLite 里。一共写了不到 80 行 Python。下面是过程和成本。

第一次尝试:又去爬 Google

老规矩,先试试自己爬。Python 写个 requests,模拟浏览器,parse HTML。20 分钟后 IP 被 ban。

换个方案:用 Playwright 跑 headless Chrome,加住宅代理。一个月下来:

  • 代理费用:$0.005/次 × 每天 100 次 × 30 天 = $15
  • 维护时间:每周大概 2 小时调试(Google 改 selector 就崩一次)
  • 失败率:30% 左右

这还没算上"我的网站突然被 Google 标记"的风险。一个小项目不值得冒这个险。

试过的 SERP API

我对比了四个 SERP API,按"独立开发者友好"程度排:

  • SerpApi:$50/月,5000 次。功能全,但订阅制 + 月底清零,对低频使用不友好。
  • Serper.dev:$50/月,50000 次。比 SerpApi 单价低,但同样订阅 + 清零。
  • DataForSEO:按次 $0.0006 起,但要签合同 + 预充值 + 月结。对个人开发者来说流程太重。
  • SerpBase:$3 买 10,000 次搜索(Starter Boost),1 个月内有效。不用订阅,$10 以上的包不过期。

$3 = 10,000 次搜索这个组合对我正合适。我每天只用 100 次左右,10,000 次能撑一个季度。

实际接入:80 行 Python

我用 /google/search 端点,1 次搜索 1 credit。核心代码:

import requests
import sqlite3
from datetime import date

API_KEY = "你的 key"
DB = "ranks.db"

def get_serp(keyword: str, gl: str = "us", hl: str = "en") -> list[dict]:
    r = requests.post(
        "https://api.serpbase.dev/google/search",
        headers={"X-API-Key": API_KEY},
        json={"q": keyword, "num": 20, "gl": gl, "hl": hl, "device": "desktop"},
        timeout=15,
    )
    r.raise_for_status()
    return r.json().get("organic", [])

def find_my_rank(keyword: str, my_domain: str, gl: str = "us") -> int | None:
    for i, item in enumerate(get_serp(keyword, gl=gl), start=1):
        link = item.get("link", "")
        if my_domain in link:
            return i
    return None

def save_rank(keyword: str, domain: str, rank: int | None):
    conn = sqlite3.connect(DB)
    conn.execute(
        "INSERT INTO ranks (date, keyword, domain, rank) VALUES (?, ?, ?, ?)",
        (date.today().isoformat(), keyword, domain, rank),
    )
    conn.commit()
    conn.close()

每天跑一次,把"哪个关键词、哪个网站、今天第几名"写进 SQLite。一个月下来我就有了一条完整曲线。

成本核算

我的实际用量:

  • 5 个网站 × 20 个关键词 = 100 个关键词
  • 每天 1 次 = 100 次/天
  • 30 天 = 3,000 次/月
  • $0.30/1k 单价 = $0.90/月

实际上我没买按 $0.30 的 Enterprise 包——我用 $3 的 Starter Boost 撑了 3 个月(10,000 次 ÷ 3,000/月 ≈ 3 个月)。Boost 过期后我换 $10 的 Starter 包(20,000 次,$0.50/1k,不过期),又够跑半年。

对独立开发者来说,这个成本结构才是友好的:先花 $3 试,跑通了再决定要不要升级。

加个本地 SEO 模块

做了主流程之后,我又给其中一个本地服务类的 side project 加了地图排名监控。

两个端点串着用:

  1. /google/maps/search 找商家(每次 2 credit)
  2. 拿到 feature_id 之后调 /google/maps/detail 拿完整商家信息(每次 2 credit)
def find_place(query: str, lat: float, lng: float):
    r = requests.post(
        "https://api.serpbase.dev/google/maps/search",
        headers={"X-API-Key": API_KEY},
        json={"q": query, "lat": lat, "lng": lng, "zoom": 14},
    )
    r.raise_for_status()
    return r.json()["places"]

def get_place_detail(feature_id: str) -> dict:
    r = requests.post(
        "https://api.serpbase.dev/google/maps/detail",
        headers={"X-API-Key": API_KEY},
        json={"feature_id": feature_id},
    )
    r.raise_for_status()
    return r.json()["place"]

lat/lng/zoom 这三个参数很重要——传了之后 SERP 会模拟"在这个坐标点附近搜"的结果,跟你从 Google Maps 网页端搜的体验一致。本地 SEO 不传坐标等于白搜。

加这个模块之后,我的用量翻倍——但 $3 的额度还是撑得住。

几个坑

  1. desktop vs mobile:SERP 的桌面端和移动端排名差异巨大。我两个都查,desktop 用来看主关键词,mobile 用来看本地化结果(Google 移动端更偏本地包)。
  2. AI Overview:从 2025 年开始,越来越多的关键词会触发 ai_overview 字段(Google 自己生成的 AI 总结)。我没把它当成一个排名——AI Overview 是抢流量的,不是抢排名的。我只追踪 organic。
  3. IP / 语言地区差异:同一个关键词 hl=en&gl=ushl=zh&gl=cn 出来的结果完全不同。我的 SaaS 是面向全球的,所以两个区都查。
  4. Starter Boost 限制:$3 包每月只能买一次,过期 1 个月。$10 以上不限次、永不过期。记清楚。

一点感受

我现在的方案:

  • 每天早上 8 点 cron 跑一次
  • 100 个关键词 + 20 个本地商家 = 120 次搜索
  • 一个月 3,600 次 = $1.08(按 $0.30/1k 单价算)
  • 实际花了 $3(Starter Boost),撑 3 个月

成本几乎可以忽略。关键是现在我每天都能看到自己的排名曲线,知道哪篇文章在涨、哪篇在掉、哪个关键词被 AI Overview 抢了流量。

独立开发者做 SEO 的最大障碍不是"不懂",是"看不到"。看不到就没法迭代。$3 起步的工具就能把这件事闭环了,比 $99/月的工具更适合早期项目。

新手可以先用免费 100 次额度(注册就送,不用绑卡)验证自己的查询逻辑:https://serpbase.dev/register

剩下的就看你的网站到底要打什么关键词了。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号