做独立站的朋友,最常问的是"我到底该优化哪?"答案在数据里。用 SERP 数据看自己的站排了什么词、没排什么词,优化方向就清楚了。
这篇讲怎么用 SERP API 给独立站做 SEO 诊断。下面以 SerpBase 的接口为例。
思路
SEO 诊断 = 查一批词 → 看自己的站排没排 → 分类:
- 排上了,位置低:有戏,冲一冲就能上来
- 没排上:要么词太难,要么页面没被收录
- 没收录:技术问题,优先解决
批量查排名
import requestsKEY = "你的key"
KEYWORDS = ["装修公司", "装修报价", "装修设计", "全屋定制", "装修工期"]def check_rank(keyword, domain):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()for i, item in enumerate(r.json().get("organic", []), 1):if domain in (item.get("link") or ""):return ireturn None
分类诊断
def diagnose(keywords, domain):result = {"opportunity": [], "hard": [], "not_indexed": []}for kw in keywords:rank = check_rank(kw, domain)if rank and rank <= 5:result["opportunity"].append((kw, rank, "位置好,守住"))elif rank:result["opportunity"].append((kw, rank, "位置低,冲一冲"))else:result["hard"].append((kw, "没进前10,词难或页弱"))return resultd = diagnose(KEYWORDS, "yoursite.com")
for kw, info in d["opportunity"]:print(f"机会: {kw} {info}")
for kw, info in d["hard"]:print(f"难点: {kw} {info}")
怎么定优先级
def prioritize(diag):# 1 先处理排 6-10 的(离前5最近)near = [x for x in diag["opportunity"] if 6 <= x[1] <= 10]# 2 再处理排 1-5 的(守)hold = [x for x in diag["opportunity"] if x[1] <= 5]# 3 难点词:检查是不是页面没被收录return {"先优化": near, "守住": hold, "检查收录": diag["hard"]}
检查是否被收录
难点词没排上,先确认页面被没被 Google 收录。用 site: 查询:
def check_indexed(page_url):r = requests.post("https://api.serpbase.dev/google/search",headers={"X-API-Key": KEY},json={"q": f'site:yoursite.com {page_url.split("/")[-1]}', "hl": "zh-CN", "gl": "cn"},timeout=10,)return bool(r.json().get("organic"))
没被收录 = 技术问题(结构、sitemap、内链),先解决这个。
每月诊断报告
def monthly_seo_audit():diag = diagnose(KEYWORDS, "yoursite.com")# 对比上月,看排名变化report = render_report(diag)# 存库 + 发邮件
注意
- 固定
hl/gl:诊断要同标准 - 词表要准:覆盖你的核心业务词
- 排名是时点:多次查取均值,别单次下结论
扩展
- 竞品对比:查竞品站排什么词
- 内容机会:挖"大家都在问",找没写的内容
- 多页面:不同页面分开查,定位薄弱页
完整参数和响应字段参考:serpbase.dev/docs。独立站优化,让数据告诉你先做哪。
