Ahrefs API结合大模型挖掘内容Gap:别导表了,让AI自动扒对手词
做外贸独立站或者海外内容站的兄弟,估计都干过同一件让人头大的事:打开 Ahrefs,点进 Content Gap,塞进去三五个竞争对手的域名,点导出。几十兆的 CSV 拖进 Excel 或 WPS,电脑风扇直接起飞,然后盯着几万行关键词和 KD、Volume 发呆,用 VLOOKUP 筛选半天,眼睛看花了还没挑出十篇能写的选题。我前几年招过两个实习生专门干这活,结果每天产出的词库不是带着竞品品牌词,就是搜索意图重复,自己站内文章打架(Keyword Cannibalization)严重得要命。前阵子趁着有空,我干脆把这套老土的流程推翻重写了,直接用 Ahrefs API结合大模型挖掘内容Gap,脚本丢在一台吃灰的香港轻量云上跑,每周定时把洗干净的选题和写作大纲推到飞书里,省出来的时间喝茶不香吗?
市面上不少所谓的 SEO 大师,动不动就发几张 ChatGPT 截图,吹嘘“一句话生成百万流量词库”。纯粹瞎扯。大模型根本不知道某个词在 Google 上一个月到底有几个人搜,也不知道前十名是不是全被 Reddit 和亚马逊占着。纯靠 AI 拍脑袋出来的词,发一百篇也没几个自然点击。而反过来,只看 Ahrefs 数据又太死板——它能告诉你对手排在第三页、你没排名的词有哪些,但它没法告诉你为什么对手排在前面,或者对手的文章到底漏了哪块核心信息。
把这两头接起来,才算把这事儿跑通。今天不聊虚的算法理论,直接拆解我目前在跑的一套实操方案,包含数据怎么拉、API 额度怎么省、怎么喂给大模型才不胡说八道,以及我自己踩过的几个大坑。
先分清“关键词Gap”和“内容Gap”
很多新手容易把这两者混为一谈。你在 Ahrefs 后台拉出来的那张表,准确来说叫关键词缺口(Keyword Gap):对手有排名,你没有。
但真正能让你把流量抢过来的,是内容缺口(Content Gap)。举个我做户外装备站时的真实例子:对手写了一篇 best solar generator for camping,拿了大量流量。你按关键词去追,也写一篇一模一样的测评,大概率干不过人家那条老外链权重高的页面。可如果你把排名前五的页面扒下来对比,发现前几名全在堆参数,没一个人在正文里算清楚“带车载冰箱和无人机实际能撑几个小时”,也没提低温环境下电池掉电的实测数据——这才是你能切进去的内容 Gap。
所以我的自动化脚本分三步走,缺一不可:
- Ahrefs API v3 定向抽水:只拉有价值、低竞争的底池数据,绝不盲目全量导出。
- 本地 Python 清洗聚类:把几千个碎词合并成“单篇文章选题”,剔除品牌词和垃圾词。
- 抓 SERP 结构喂给大模型:让 AI 读前几名的 H2/H3 骨架,逆向找出对手漏掉的痛点和切入角度。
第一关:用 Ahrefs API v3 薅数据,别把账单跑爆了
先给没接过 Ahrefs API v3 的提个醒:v3 版本的计费逻辑跟以前不一样,它是按 API Units 扣费的。不仅返回的行数(limit)算钱,你 select 里勾选的字段越多,扣的点数也越多。我刚开始调试脚本时没注意,一个循环没加 limit 和缓存,一晚上直接干废了大半个月的额度,心疼得直抽搐。
如果你自己公司有 Enterprise 账号或者合租了带 API 权限的套餐,写请求的时候一定要记住三个保命原则:
- 用
select精准掐表:只拿keyword,volume,keyword_difficulty,best_position,best_position_url,sum_traffic这几个核心字段,别图省事留空或者全选,能省一半以上的额度。 - 在
where参数里把垃圾过滤掉:Ahrefs v3 支持在请求参数里直接写 JSON 格式的过滤条件。比如做新站,直接限制volume > 100且keyword_difficulty < 30,同时要求对手排名best_position <= 20。对手自己都在第五页开外的词,拉回来也没意义。 - 本地 SQLite 落盘缓存:拉回来的原始 JSON 一定要先存进本地数据库或 CSV。调试后面清洗逻辑和 Prompt 的时候,全读本地缓存,千万别每次跑代码都去调一次 API。
拉取逻辑用 Python 写出来其实很短,核心骨架大概长这样:
import requests
import json
import sqlite3
API_TOKEN = "你的Ahrefs_API_v3_Token"
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Accept": "application/json"
}
def fetch_competitor_keywords(domain, country="us", limit=500):
url = "https://api.ahrefs.com/v3/site-explorer/organic-keywords"
# 关键:在服务端就过滤掉高KD和低搜索量,省钱省流量
where_filter = {
"and": [
{"field": "volume", "is": ["gte", 100]},
{"field": "keyword_difficulty", "is": ["lte", 30]},
{"field": "best_position", "is": ["lte", 20]}
]
}
params = {
"target": domain,
"date": "2026-03-01", # 建议动态获取上月或昨日日期
"country": country,
"mode": "subdomains",
"select": "keyword,volume,keyword_difficulty,best_position,best_position_url",
"where": json.dumps(where_filter),
"order_by": "volume:desc",
"limit": limit
}
resp = requests.get(url, headers=HEADERS, params=params, timeout=30)
resp.raise_for_status()
return resp.json().get("keywords", [])
老站长提示: 小规模站点如果买不起官方高价 API 套餐,其实也有变通办法——把竞品的词库在后台手动带条件筛选后导出成 3 个本地 CSV,跳过上面这步,直接跑后面的 Python 清洗和大模型脚本,核心逻辑完全通用。没必要为了自动化而强行烧几百美金买接口。
第二关:Python 预处理,千万别把生肉直接喂给大模型
很多人习惯拿了数据直接往 GPT 或 Claude 里一丢,让它“帮我分析一下这些词”。结果就是模型要么由于 Token 超限直接截断,要么给你输出一堆车轱辘话,甚至把完全不相关的词强行拼在一起。
在进大模型之前,Python 必须先干完三件脏活:
- 做集合差集(找出真正的词库缺口):把你自己域名的现有排名词拉出来(至少排在前 50 的词),和 3 个竞品的词库做差集。如果你已经有页面排在第 8 名,那这个词属于“页面优化(On-page Optimization)”的范畴,不属于需要新开页面的 Content Gap,先踢出去。
- 正则清洗品牌词和无效词:竞品域名叫
ecoflow,那带ecoflow、拼写错误(ecofow)、以及竞品具体型号的词,除非你专门做评测对比,否则做通用长尾词时全用正则re踢掉。还有带年份的过时词(比如2021、2022),直接删了省 Token。 - 按竞争 URL 分组,而不是按单关键词分组:这一步非常关键!Ahrefs 返回的数据里带着
best_position_url。如果竞品 A 的同一篇文章同时排进了 35 个不同的长尾词,这说明 Google 认为这 35 个词属于同一个搜索意图。你直接在 Python 里用pandas按best_position_url聚合一下,把这 35 个词打包成一个簇(Cluster),顺便把总搜索量加起来,挑出主词和代表页面。
跑完这一步,原本 3000 行乱七八糟的表格,往往就收敛成了四五十个高价值的“待挖掘主题包”,Token 消耗直接降了 90%。
第三关:大模型上场——聚类校验 + SERP 骨架对比
数据洗干净了,接下来才是利用大模型的语义理解能力去抠“内容缺口”。
我的做法是分两段调用模型。
1. 语义复核与搜索意图打标
用比较便宜且吞吐高的模型(比如 DeepSeek API 或者 GPT-4o-mini,几十块钱能跑几个月),把上面聚合好的词包分批喂进去。重点让它干两件事:
- 剔除隐形商业/本地意图:有些词看着像信息词,实际上 Google 眼里是本地服务词或者纯粹的 B2B 询盘词,人工看漏的让 AI 再过一遍。
- 判断能不能合并写:有时候竞品 A 和竞品 B 用两篇不同 URL 承接了高度相似的词,让大模型判断这两个主题在用户视角下是不是一回事,避免我们自己建站时写重了。
2. 扒前 3 名大纲,找“没写透”的地方
挑出评分最高的 10 个核心选题后,脚本会用 requests 配合简单解析(或者直接调用 Jina Reader 那类免费转 Markdown 的接口,比自己写 BeautifulSoup 应付各种奇葩 HTML 省事多了),把该关键词下目前 Google 排前三、或者竞品那条高流量 URL 的 H1、H2、H3 标题和首段 抓下来。
然后连同我们的词簇一起,丢给逻辑能力更强的模型(Claude 3.5/3.7 Sonnet 或者 GPT-4o 这一档),Prompt 别写得太客气,直接强制要求输出 JSON,核心指令大概是这么个意思:
你是一个拥有10年经验的英文独立站SEO内容总监。
现在我要针对核心词簇【{cluster_keywords}】写一篇新文章。
以下是目前竞争对手排在前面页面的核心标题结构(H2/H3):
{competitor_outlines}
请严格对比词簇里的用户隐含诉求与对手现有的大纲,完成以下分析,并严格按 JSON 格式返回:
1. "search_intent": 明确该词簇的核心意图(教程/评测/对比/避坑指南)。
2. "competitor_weakness": 用大白话指出对手大纲里明显遗漏的细节、过时的信息、或者讲得太浅导致用户还得回去搜下一个词的地方(这是我们的内容Gap核心)。
3. "recommended_h2_structure": 给出一个能压过对手的改进版文章骨架(数组),必须把词簇里的核心长尾词自然融入小标题,并重点突出刚才找出来的 Gap 板块。
4. "must_include_entities": 列出写这篇文章必须提到的行业专业术语、参数或具体场景实体,方便后续写手补充细节。
拿到返回的 JSON 后,脚本直接塞进飞书多维表格或者 Notion 数据库里。我每周一打开表格,看到的就是排好序的选题:主词搜索量多少、KD 多少、对手写了啥、对手漏了啥、建议怎么搭架子,一目了然。
一线踩坑实录:这几个坑别往里跳
这套流水线我断断续续迭代了半年多,有几个血泪教训必须提前交代清楚:
第一,警惕“数据幻觉”和 JSON 格式崩坏
早期跑批量脚本时,大模型偶尔发神经,在 JSON 前面加上一句 "好的,以下是分析结果:",直接导致后面的 json.loads() 报错崩溃,整晚的定时任务白跑。现在写代码,OpenAI 系或兼容接口务必加上 response_format={"type": "json_object"},并且外层套一层 tenacity 重试机制,解析失败自动重跑一次,同时把原始文本存进错误日志里方便排查。
第二,别把这套流程直接连到全自动发文章 我太清楚现在很多做站群的哥们在想什么:前面抓词、中间出大纲、后面接个大模型直接写完 2000 词,调 WordPress REST API 自动发布,一天铺 500 篇。 说句不好听的,前两年还能靠这招吃波快钱,现在 Google 每次核心更新和反垃圾更新专杀这种没有真实体验(E-E-A-T)的纯 AI 批量站。就算你用 API 找准了内容 Gap,正文填充依然需要人来把关——哪怕你是让 AI 辅助写初稿,最后那块用来抢排名的“差异化信息”(比如实拍图、自己测试的表格数据、一线踩坑的口语化总结),必须是真人或者懂行的编辑塞进去的。AI 负责的是情报搜集和排兵布阵,别指望它替你冲锋陷阵。
第三,抓取竞品网页别太嚣张
在第二步扒竞品页面 H2/H3 的时候,很多海外站都套着 Cloudflare 的五秒盾或者防爬虫规则。别用默认 Python 的 User-Agent 硬怼,不仅抓不到东西还容易把你那台 VPS 的 IP 拉黑。控制好并发频率(time.sleep(3) 不丢人),真遇到防得死死的站点,直接跳过或者换用带浏览器渲染的 API 接口处理,别在爬虫对抗上耗费过多运维精力——我们的目的是做 SEO 搞流量,不是去跟人家的安全工程师斗智斗勇。
说到底,工具永远只是放大器。以前导一次表手动筛词要耗掉半天生命,现在用脚本把数据清洗、聚类和 SERP 骨架对比自动化之后,省出来的时间完全可以拿去打磨几篇真正能打、能长期带来精准询盘的 Pillar Page(支柱文章)。代码跑通只是第一步,真正决定你能不能把对手流量抢过来的,还是看你收到那份 Gap 清单之后,愿不愿意老老实实把对手漏掉的痛点写透。
(如果你在跑 Ahrefs API v3 过滤语法或者本地清洗脚本时遇到报错,欢迎评论区贴出报错信息,我有空看到会回。)
相关文章
- Ahrefs API结合大模型挖掘内容Gap:别导表了,让AI自动扒对手词
- GSC API流量监控与排名异动告警脚本:别肉眼盯GSC了,写个告警脚本
- 自动化内链拓扑网络生成算法:别手搓内链了,教你用脚本搞定
- 批量语义去重与TF-IDF长尾词优化:别瞎堆词了,教你怎么洗出流量
- AI生成图自动压缩与WebP无损转换:AI生图太肥拖垮网站?教你自动压
- 自动化Title与Description点击率测试:手把手教你自动化测标题点击率
- AI生成的薄弱内容自动化归档方案:批量AI垃圾文?写个脚本自动归档
- 基于大模型的竞品外链锚文本分析工具开发:自己写个工具:用AI扒光竞品外链
- Embedding语义检索系统设计:搞懂语义搜索,看这篇就够了
- 基于大语言模型的网站开发流程:用大模型做网站,教你完整搞定

