SERP难度评分:不用Ahrefs,用Python给关键词难度打分
Ahrefs 关键词难度是基于 DR 的黑盒,恰好在最要命的地方失效——品牌词。本文拆解一个四层 SERP 难度评分模型:结构评分、品牌指纹、截流难度、外链预算。真实命令、真实输出、真实局限。
SERP 难度评分优于基于 DR 的关键词难度,因为它评的是实际参与排名的页面而不是域名。本文走读一个四层 Python 实现:SERP 结构评分(页面类型、位置权重、信号修正项)、品牌词检测(三重指纹)、截流难度(只对可竞争席位重算)、外链预算(你到底需要多少条引用域)。数据全部来自免费额度:Serper.dev SERP + RDAP 域名年龄。
每个关键词难度工具都卖给你一个数字。Ahrefs KD、SEMrush KD%。看起来很权威。它们也是 SEO 圈最贵的蒙眼布。
两种翻车方式最常见:
翻车一:DR 盲区。 Ahrefs KD 很大程度上派生自排名页面的引用域。一个 DR-90 网站 2019 年发的、零新增外链的博文,会被当成一堵 DR-90 的墙。你跳过了本可以赢的关键词。
翻车二:看起来容易的品牌词。 正好相反。像 “semrush pricing” 这种品牌查询,返回的是官方自己的薄页面——结构上看起来很弱。朴素的结构评分会说它极其容易。你花一个月写了一篇永远排不过官方页的内容,因为 Google 把这个查询当导航型意图处理。
一个有用的难度分必须同时处理这两种情况。这是我从终端跑的四层 SERP 难度评分模型——建立在免费数据上,并且对自己的错误之处保持诚实。
数据层:你在给什么打分
输入刻意保持朴素:
- SERP 数据——关键词的 top-10 自然结果,经 Serper.dev(免费 2,500 次/月)
- 域名年龄——经 RDAP 查注册年份(免费、不限量)
- 已知平台清单——reddit.com、youtube.com、medium.com、wikipedia.org 等拿固定权威分
每个关键词一次 API 调用。不需要 Ahrefs 订阅。
从 SERP 出发,每条结果按页面类型分类:
homepage(首页)——根域名在排名(有人把整个网站押在这个查询上)dedicated(专题页)——专门为这个主题建的页面inner(内页)——顺带提到这个主题的页面(覆盖相邻话题的博文、论坛帖)
这一步很关键,因为哥飞式页面类型折价模型:首页按满强度计,专题页打 65 折,随便的内页打 45 折。满屏内页的 SERP 是一扇没关的门。满屏首页的 SERP 是一堵墙。
第一层:结构评分——基础分 + 信号修正项
核心分是结果强度的位置加权平均。前排位置权重更高(第 1 位计 1.00,第 10 位计 0.37)。每条结果的强度 = 权威分 × 类型乘数 × 位置权重,平均后的 SERP 强度构成基础分(上限 60)。
然后信号修正项调整——首页拥挤度、生态成熟度、top-5 里的弱域名:
| 信号 | 条件 | 修正 |
|---|---|---|
| homepage_crowded | 7+ 首页 | +18 |
| homepage_heavy | 5+ 首页 | +10 |
| no_homepages | 0 首页 | -5 |
| mature_niche | 5+ 成熟专题页 | +14 |
| established_niche | 3+ 成熟专题页 | +7 |
| brand_dominated | 品牌 sitelinks + 3+ 平台 | +12 |
| old_domains | 平均域名年龄 15 年+ | +6 |
| weak_top5 | top-5 里有弱域名 | 最多 -15 |
| new_domain_proof | 有 2 年内新域名 | -5 |
| top3_fortress | top-3 全强 | +6 |
来一次真实运行——best project management software,一个多数人会觉得没法赢的词:
python3 -m zens_ink.kd "best project management software" --markdown
# KD Analysis: best project management software
**Score: 13.3/100** — Very Easy (极易)
- Base: 20.3 / modifiers: -7
- Recommendation: 蓝海词,优先创建内容抢占先机
## Link Budget (estimate)
| Track | Low | Mid | High |
|---|---|---|---|
| Editorial (quality links) | 10 | 16 | 24 |
| Directory (easy links) | 34 | 56 | 84 |
## SERP Structure
- Homepages: 0/10 · Dedicated: 7/10 · Inner: 2/10
- Platforms: 2/10 · Avg domain age: 22.0yr
- Weak domains in top-5: 3 · New domains (<2yr): 0
## Signal Modifiers
- no_homepages: -5
- established_niche: +7
- old_domains: +6
- weak_top5: -15
## Top 10 Breakdown
| # | Domain | Type | Authority | Year |
|---|---|---|---|---|
| 1 | www.icagile.com | inner | 0.35 | — |
| 2 | project-management.com | dedicated | 0.66 | 2000 |
| 3 | www.reddit.com | inner | 0.90 | — |
| 4 | www.paymoapp.com | dedicated | 0.35 | — |
| 5 | www.wrike.com | dedicated | 0.35 | — |
...
读一下这个 SERP 到底在说什么:零首页,三个结构薄弱的域名坐在 top-5,Reddit 排第 3。分数落到 13.3。“best project management software” 真是蓝海词吗?未必完全——局限一节再谈——但这个结构确实比 DR 类工具愿意承认的多出不少空间。第 1 名是一家认证机构的内页。那个席位是可以争的。
第二层:品牌指纹——抓住陷阱词
第一层有个致命缺陷,就是开头说的翻车二。品牌查询返回品牌自己的页面,结构上看起来弱。分数塌掉。你一头撞墙。
解法是三重指纹品牌检查:
- F1
official_domain——同名官方域名坐在 top-3(精确/前缀/近复数匹配) - F2
brand_dominance——同一品牌的域名家族占据 10 席中的 2+ 席 - F3
platform_ecosystem——应用商店 + 平台密度,或 3+ 平台页
两个以上指纹 = 品牌词。 正面排名被标记为几乎不可能,工具转向告诉你什么才有效:衍生查询。
真实运行:
python3 -m zens_ink.kd "notion templates" --json
{
"keyword": "notion templates",
"kd": 43.4,
"label_en": "Medium",
"is_brand_keyword": true,
"brand_fingerprints": ["official_domain", "brand_dominance", "platform_ecosystem"],
"brand_domain": "notion.com",
"domains": ["www.notion.com", "www.reddit.com", "www.notioneverything.com",
"www.pinterest.com", "www.notion.com", "www.youtube.com"]
}
三个指纹全部命中。notion.com 直接占两席,一个模板市场占据生态邻位,平台填满其余。输出不只说「难」——它说为什么(notion.com 拥有这个意图)以及换什么打法:notion templates alternative、notion vs [竞品]、notion templates review。
第一层的 brand_dominated 修正项也会用这个信号处理非品牌词。对比 notion vs obsidian——一个对比型查询,品牌页面不拥有意图(论坛、评测站、Reddit 在排名):指纹不凑够两个,品牌标记保持 false,这个词按正常的 Easy 机会打分,只吃一个 brand_dominated: +12 的小幅上修。查询里出现同样的品牌名,竞争现实完全不同。
第三层:截流难度——你能行动的那个数字
检测到品牌词后,有一个比第一分更重要的第二分:截流难度(entry difficulty)。逻辑是:剔除品牌自己的页面和平台固定位(Reddit、YouTube 什么词都排,你永远挤不掉它们),然后只对可竞争席位重算——外部网站现实里能拿的槽。
我找到的最有教育意义的例子。看一个官方页面看起来毫无还手之力的品牌查询会发生什么:
python3 -m zens_ink.kd "semrush pricing" --json
{
"keyword": "semrush pricing",
"kd": 1,
"label_en": "Very Easy",
"is_brand_keyword": true,
"brand_fingerprints": ["official_domain", "brand_dominance"],
"brand_domain": "semrush.com",
"kd_entry": 3.7,
"kd_entry_label_en": "Very Easy"
}
朴素结构评分是 100 分里的 1 分。一分。没有指纹层的话,这是一个难度工具能打印出的最危险的数字——semrush.com 自己的定价页统治着 SERP,它们是薄专题页,纯结构模型把它们读成软柿子。你会自信满满地建一个永远排不上去的页面。
品牌检查抓住了它:两个指纹,命中。然后截流分给你真正的读数——第三方席位(评测站、回答「semrush 值不值」的对比页)在 3.7/100 确实可以赢。可执行的结论不是「容易词」也不是「不可能词」,而是**「正面不可能,侧面很容易」**。做 semrush pricing review 或 semrush vs [替代品] 内容,别做 semrush 定价克隆页。
这就是为什么单个数字从来不够。同一个关键词合理地拥有两个难度分,哪个适用取决于你打算写哪种页面。
第四层:外链预算——把分数翻译成工作量
难度分告诉你多难。外链预算告诉你多少。最后一层把分数对着 Ahrefs 公开的 KD→引用域(top-10 进入)曲线插值,双轨输出:
- Editorial(编辑型)——用值得被链接的内容挣来的链接
- Directory(目录型)——容易的链接(收录页、profile),曲线显示同等效果需要约 3.5 倍数量
对一个有真实预算的衍生词跑一次:
python3 -m zens_ink.kd "shopify alternatives" --json
{
"keyword": "shopify alternatives",
"kd": 48.3,
"label_en": "Medium",
"brand_fingerprints": ["platform_ecosystem"],
"link_budget": {
"editorial": {"low": 79, "mid": 132, "high": 198},
"directory": "≈3.5x editorial(易得链接需要更多数量才有同等效果)"
},
"domains": ["www.reddit.com", "www.reddit.com", "www.quora.com",
"www.bigcommerce.com", "lovable.dev", "www.youtube.com",
"www.salesforce.com", "blog.shift4shop.com", "www.forbes.com"]
}
中等难度,一个指纹(平台,但没有官方域名锁死),一个具体的决策取代了拍脑袋:你愿意为了进这个 top-10 建约 130 条引用域吗?对独立开发者,答案是不要——你刚省下一个季度。对有预算的团队,这是个周二下午。无论哪边,分数都终结了争论。
这个模型错在哪
诚实环节,因为每个难度工具都有错的地方,而大多数不会告诉你错在哪:
-
权威分是代理值,不是测量值。 没有外链数据。权威分来自已知平台清单和域名年龄。第一个例子里 Wrike 拿了 0.35(「未知」),因为 RDAP 没返回注册年份——wrike.com 是个主要 SaaS 品牌,模型低估了它。对商业大词的 20 分以下结果保持怀疑;RDAP 缺口叠加时,弱域名检测可能过度触发。
-
没有 sitelinks 信号。 Serper.dev 的自然结果不返回 sitelinks 字段,所以品牌检测用域名家族占位做代理。它有效(上面 semrush 和 notion 的案例都正确命中),但只有单一强官方页、无家族占位的品牌可能只靠 F1 漏网——这正是触发品牌标记需要两个指纹 companion 的原因。
-
搜索量是可选的且常为零。 Bing 搜索量查询对长尾开发者词经常返回无数据,所以量级修正项经常不生效。评分仍然可用——它建立在结构上,不在量级上——但超高量级检测是尽力而为。
-
它仍然是估算。 外链预算在每份报告里都印着「estimates for planning, not a ranking guarantee」,因为这是事实。Google 排名的是页面,不是表格。
放进工作流
难度评分是管线里的一站,不是整条火车:
- 发现——用
keyword_research从 Google Autocomplete 挖长尾,或Reddit 蓝海挖掘 - 验证需求——经 Bing Webmaster API 查搜索量
- 评难度——本模型(
zens_ink.kd),输出结构分、品牌检查、截流分、外链预算 - 归组赢家——把过关的词聚类成主题权威地图
- 查意图——确认 SERP 要的确实是你的内容类型(SERP 分析、搜索意图)
整条链跑在免费额度上、零依赖:
pip install git+https://github.com/respectevery01/zens-ink-seo-package.git
export SERPER_API_KEY="your_key"
python3 -m zens_ink.kd "你的关键词" --markdown
--markdown 输出你上面看到的自包含报告——设计来直接丢进 agent 上下文或归档。还有 --zh 跑中文 SERP(gl=cn, hl=zh-CN),这很重要,因为中文关键词工具和 Google SERP 对「什么在排名」的分歧极大。
要点
从品牌查询和页面类型结构进入视野的那一刻起,关键词难度就不再是一个数字了。“semrush pricing” 同时是一个 1/100 的词和一个不可能的词——两个答案对你可能写的不同页面都是对的。一个评分模型的价值在于告诉你该问哪个问题,而不是把模糊性藏在 DR 派生置信度的两位小数后面。
这就是难度分数和难度决策的区别。
FAQ
什么是 SERP 难度评分?
SERP 难度评分通过分析关键词当前 top-10 搜索结果的结构来评级——多少首页、多少专题页、多少内页在排名,平台密度、域名年龄、薄弱位置——而不是像 Ahrefs KD 那样平均域名权威分。因为它评的是你实际要竞争的页面,所以能抓到 DR 类工具漏掉的情况,比如 DR-90 网站一篇没有外链的 2019 年旧博文占据的薄弱席位。
SERP 分析如何检测品牌词?
三重指纹检测:F1——同名官方域名出现在 top-3;F2——同一品牌的域名家族占据 2+ 席位;F3——平台生态密度(应用商店、品牌社区页)。两个以上指纹即判定为品牌词,正面排名几乎不可能,工具会切换到给衍生词(alternative/vs/review 类页面)打截流难度分。
不用 Ahrefs,关键词难度准吗?
是不同,不是不准。Ahrefs KD 与排名页面的引用域相关;SERP 结构评分衡量的是这些席位在结构上是否可赢。主要弱点是权威分是代理值(域名年龄 + 已知平台清单,无外链数据),以及 RDAP 查不到时未知域名会按低权威分处理。任何难度数字——付费或免费——都应视为规划估算而非保证。
跑一次 SERP 难度分析要花多少钱?
每个关键词一次 SERP API 调用。Serper.dev 免费档每月 2,500 次搜索,约可评分 2,500 个关键词。RDAP 查域名年龄免费不限量。典型独立开发者的关键词研究量级下,整条管线月成本为 0。