r/SideProject 的一篇帖子感叹道,每月支付 29 美元购买 Ahrefs Starter 只是为了检查一些关键字。 Semrush 起价为 139.95 美元/月。如果您只检查 100-200 个关键字,则使用 Scavio 按查询付费的方法的费用低于每月 1 美元。本教程构建一个自托管排名检查器。
前置条件
- Scavio API 密钥
- Python 3.8+
- SQLite 用于历史跟踪
操作指南
步骤 1: 定义要跟踪的关键字和域
列出您要跟踪的关键字和您的域。
Python
config = {
'domain': 'mysite.com',
'keywords': [
'best crm for startups',
'crm software comparison 2026',
'affordable crm tools',
'crm vs spreadsheet',
],
'country': 'us'
}步骤 2: 检查每个关键字的 SERP 位置
通过 Scavio 搜索每个关键字并在结果中找到您的域名。
Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def check_rank(keyword, domain, country='us'):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=H,
json={'platform': 'google', 'query': keyword, 'country_code': country}).json()
for r in data.get('organic_results', []):
if domain in r.get('link', ''):
return r.get('position')
return None # Not in top results步骤 3: 在 SQLite 中存储排名历史记录
跟踪一段时间内的仓位以了解趋势。
Python
import sqlite3, datetime
conn = sqlite3.connect('ranks.db')
conn.execute('CREATE TABLE IF NOT EXISTS ranks (date TEXT, keyword TEXT, position INT, url TEXT)')
def save_rank(keyword, position, url=None):
conn.execute('INSERT INTO ranks VALUES (?, ?, ?, ?)',
(datetime.date.today().isoformat(), keyword, position, url))
conn.commit()步骤 4: 生成排名报告
显示头寸变化的每周摘要。
Python
def rank_report():
rows = conn.execute('''SELECT keyword,
(SELECT position FROM ranks r2 WHERE r2.keyword=r1.keyword ORDER BY date DESC LIMIT 1) as current,
(SELECT position FROM ranks r3 WHERE r3.keyword=r1.keyword ORDER BY date DESC LIMIT 1 OFFSET 7) as prev
FROM ranks r1 GROUP BY keyword''').fetchall()
for kw, current, prev in rows:
delta = (prev - current) if prev and current else 0
arrow = '+' if delta > 0 else '-' if delta < 0 else '='
print(f'{arrow} {kw}: #{current} (was #{prev})')Python 示例
Python
import os, requests, sqlite3, datetime
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
conn = sqlite3.connect('ranks.db')
conn.execute('CREATE TABLE IF NOT EXISTS ranks (date TEXT, keyword TEXT, position INT, url TEXT)')
def check_and_save(keyword, domain):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': keyword}).json()
for r in data.get('organic_results', []):
if domain in r.get('link', ''):
conn.execute('INSERT INTO ranks VALUES (?,?,?,?)',
(datetime.date.today().isoformat(), keyword, r['position'], r['link']))
conn.commit()
return r['position']
return NoneJavaScript 示例
JavaScript
const res = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'google', query: keyword})
});
const data = await res.json();
const rank = data.organic_results?.findIndex(r => r.link.includes(domain)) + 1 || null;预期输出
JSON
Self-hosted SEO rank checker. 4 keywords checked daily = 4 queries = $0.02/day. Monthly cost: $0.60 vs $29+ for Ahrefs Starter or $139.95 for Semrush Pro.