SEO 排名跟踪需要定期检查您的页面在 Google 搜索结果中出现的目标关键字的位置。商业 SEO 工具每月要为此功能收取数百美元的费用。 Scavio API 允许您使用简单的 Python 脚本构建自己的排名跟踪器,该脚本将每日排名存储在 CSV 或数据库中,并提醒您重大变化。本教程介绍如何构建排名跟踪管道,每次运行最多检查 20 个关键字并记录位置历史记录。
前置条件
- Python 3.8 或更高版本
- 请求已安装库
- Scavio API 密钥
- 目标关键字和要跟踪的域的列表
操作指南
步骤 1: 定义关键字和目标域
创建关键字字符串和要跟踪的域的列表。该脚本将扫描包含您的域的任何 URL 的结果。
KEYWORDS = ["python web framework", "fastapi tutorial", "django vs flask"]
TARGET_DOMAIN = "mysite.com"步骤 2: 获取 SERP 并查找排名
对于每个关键字,POST 到 Scavio Google 端点并扫描 Organic_results 以查找与您的域匹配的 URL。如果找到则返回位置。
def get_rank(keyword: str, domain: str) -> int | None:
data = search_google(keyword)
for r in data.get("organic_results", []):
if domain in r.get("link", ""):
return r["position"]
return None步骤 3: 将结果保存到 CSV
将每个关键字的排名结果和时间戳附加到 CSV 文件中,以便您可以跟踪一段时间内的排名。
import csv
from datetime import date
def save_rank(keyword: str, rank: int | None) -> None:
with open("rankings.csv", "a", newline="") as f:
writer = csv.writer(f)
writer.writerow([date.today().isoformat(), keyword, rank or "not ranked"])步骤 4: 运行日常跟踪作业
迭代所有关键字、获取排名、保存结果并打印摘要。使用 cron 或任务计划程序安排此脚本每天运行。
def run_tracker():
for kw in KEYWORDS:
rank = get_rank(kw, TARGET_DOMAIN)
save_rank(kw, rank)
status = f"#{rank}" if rank else "not ranked"
print(f"{kw}: {status}")
run_tracker()Python 示例
import os
import csv
import requests
from datetime import date
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
KEYWORDS = ["python web framework", "fastapi tutorial"]
TARGET_DOMAIN = "mysite.com"
def search_google(q: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": q, "country_code": "us"})
r.raise_for_status()
return r.json()
def get_rank(keyword: str) -> int | None:
data = search_google(keyword)
for r in data.get("organic_results", []):
if TARGET_DOMAIN in r.get("link", ""):
return r["position"]
return None
def run():
with open("rankings.csv", "a", newline="") as f:
w = csv.writer(f)
for kw in KEYWORDS:
rank = get_rank(kw)
w.writerow([date.today().isoformat(), kw, rank or ""])
print(f"{kw}: {'#' + str(rank) if rank else 'not ranked'}")
if __name__ == "__main__":
run()JavaScript 示例
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
const fs = require("fs");
const KEYWORDS = ["python web framework", "fastapi tutorial"];
const TARGET_DOMAIN = "mysite.com";
async function getRank(keyword) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: keyword, country_code: "us" })
});
const data = await res.json();
const match = (data.organic_results || []).find(r => r.link.includes(TARGET_DOMAIN));
return match ? match.position : null;
}
async function run() {
const today = new Date().toISOString().slice(0, 10);
for (const kw of KEYWORDS) {
const rank = await getRank(kw);
const line = `${today},${kw},${rank || ""}\n`;
fs.appendFileSync("rankings.csv", line);
console.log(`${kw}: ${rank ? "#" + rank : "not ranked"}`);
}
}
run().catch(console.error);预期输出
python web framework: #4
fastapi tutorial: #2
rankings.csv preview:
2026-04-16,python web framework,4
2026-04-16,fastapi tutorial,2