应用关键词研究 是做什么的?
针对一个应用创意,基于 Apple 公开的 App Store 数据回答三个问题,无需账号或 API 密钥:
- 流量: 人们是否在搜索这个?用哪些词搜?
- 难度: 为这些词排名有多难?
- 市场: 哪些应用占据这个领域?它们有多大?如何盈利?
最终给出结论、要瞄准的关键词,以及 App Store 标题、副标题和关键词字段。
工作流程
1. 将创意转化为 10–20 个种子短语
种子短语是起始搜索词;脚本会通过自动补全展开每一个词。覆盖以下内容:
- 核心任务,用用户的语言表达: "心算"、"习惯追踪器"(而不是"计算能力提升")。
- 同义词和替代名称: "数学游戏"、"算术"、"乘法表"。
- 目标受众: "成人数学游戏"、"儿童数学游戏"。不同的受众就是不同的市场。
- 它可能竞争的相邻类别: 对于一个数学应用,可以是"脑力训练"。
- 结果短语: "快速计算"、"数学练习"。
不要使用竞争对手的品牌名称作为种子。它们无论如何都会出现在结果中,这对于绘制市场地图很有用。
其他国家/地区应使用其本地语言写种子。德国人搜索德国人输入的内容("kalorienzähler",而不是"kalorien tracker"),所以要根据当地用户的输入为每个市场写种子,并通过自动补全验证。切勿直接翻译英文赢家短语并假定它们仍然有效。
第二轮:从现有竞品的标题中获取种子。第一轮运行后,阅读市场地图中排名靠前应用的非品牌词(例如 "Mental Math Cards Games & Tips" 中的 "cards"、"tips")。开发者会趋同于有效的词汇,因此你没有覆盖到的词会成为第二批种子,并运行到相同的 --out 目录中。
2. 执行研究
python3 -I scripts/keyword_research.py \
--seeds "心算, 数学游戏, 成人数学游戏, 脑力训练, 乘法表" \
--country us --max-terms 120 --out research/<idea>-us-<yyyy-mm-dd>
- 运行时间: 每个短语开始时约 6 秒,随着相同的应用重复排名(其详情已缓存),时间会下降。120 个短语大约需要 8–10 分钟,因此大的批次应在后台运行。
- 进度: 结果会随时保存。
report.md在运行中途即可阅读,重新运行到同一个--out目录会从中断处继续。 - 其他选项:
--seeds-file seeds.txt:每行一个短语。--no-expand:仅对提供的种子短语进行评分,不展开。--country gb|de|jp|…:52 个主要商店前端。自动补全和排名因国家而异,因此请为每个上线市场分别进行研究。--app-id <trackId>:对于已上线的应用,为每个短语填充“我们的排名”列(1–200,或 200+),无需额外成本。在元数据更改后,重新运行到带日期的文件夹以跟踪排名变化。
- 输出:
report.md:包含下面两个表格。keywords.json和apps.json:原始数据,用于后续提问。
- 测试:
python3 -I scripts/test_keyword_research.py和python3 -I scripts/test_check_metadata.py离线运行。
3. 阅读关键词表格
每个短语获得三个 0–100 的启发式评分:
| 评分 | 测量方式 | 解读 |
|---|---|---|
| 需求 (Demand) | 输入越少字母 App Store 就建议该短语,且建议位置越高,搜索量越大。Apple 按搜索量对建议进行排序。 | 字母数 ≤ 4:高。5–7:中。≥ 8:低。从未被建议(评分 0):未知,低于自动补全的测量下限。 |
| 竞争 (Competition) | 当前排名前 10 应用的中位数评分数量(对数刻度),加上每个排名前 10 应用在其名称或副标题中包含完整短语的加 2 分(复数、变音符号和复合词如 "kalorienzähler" = "Kalorien Zähler" 算在内;副标题仅对大约前 8 名可知)。 | 中位数 < 1k:弱。1k–20k:中等。20k–100k:强。> 100k:被大品牌占据。5 个或更多精确标题意味着许多应用直接瞄准该短语。 |
| 机会 (Opportunity) | 需求 × (1 − 竞争 / 100) | 排序依据。理想区间是需求 ≥ 60 且竞争 ≤ 55。 |
结论 (Verdict) 列将这些转化为一个词:target(需求 ≥ 40,竞争 ≤ 55:新应用有望获胜)、hard(竞争 > 55)、low(需求 < 40)、floor(需求为 0)、brand(见下文),以及在使用 --app-id 时的 own(你的应用排名前三)或 push(排名前十:接近,值得在列表页中加强)。这是一个初步排序,而非最终决定:下面的意图筛选仍然适用。
需要指出的模式:
- 高需求,弱竞争:机会窗口。 例如:"心算"(输入 4 个字母后被建议,前 10 名评分中位数 609)。
- 高需求,但排名前十的应用没有在其名称或副标题中包含完整短语:标题机会窗口,即使竞争很强。例如:"成人数学游戏",评分中位数 112k,但精确标题匹配数为 0/10。
- 自动补全短语是品牌名称(例如 "times tables rock stars"、"impulse brain training")属于竞争对手。将其列在市场地图中,永远不要放入你的关键词;Apple 会拒绝使用其他应用商标的元数据。当该短语是排名前十应用的整体标题时,脚本会将其标记为 (brand) 并放在列表末尾,因为小应用自身的名称会得到接近零的竞争评分并排到表格顶部。它无法捕捉仅部分匹配标题的品牌短语(例如 "impulse brain training"),也可能将某个应用作为其精确标题的通用短语(例如 "百分比计算器")错误标记,因此仍需通读列表。
- 受众细分短语("… 三年级"、"… 成人")是不同的产品。说明你的创意服务于哪个细分市场。
- 高需求但 0/10 精确标题也是一个可疑信号。要么是真正的空白(罕见),要么是该短语过于模糊以至于没人愿意据此构建应用(常见)。在将其称为机会窗口之前,应用下面的意图测试。
在排名之前进行意图筛选。 脚本无法判断这一点,你必须自己判断。只有当输入该短语的人期望的是一个像你这样类型的应用时,该关键词才算有效。针对每个短语问:有多少输入这个短语的人想要的是你这个应用? 砍掉两类可能评分虚高的短语:
- 过于通用: 对于卡路里追踪器来说,"追踪器"。需求巨大,但搜索者可能想要睡眠、预算或航班追踪器。
- 相邻但意图错误: 对于卡路里追踪器来说,"肌肉增长"。与创意相关,但搜索者想要的是健身应用。你甚至可能获得排名;但不会带来安装,而那些偶然安装的用户也不会留存。
需求为 0 意味着未知,而非零。 从未被建议意味着低于自动补全的测量下限(与 Apple Search Ads 中的最低流行度 5 相同)。在关键词字段中放入一个这样的短语就像一张彩票。标题和副标题关键词必须有可明确测量的需求;只有在已有经证明的关键词后,才可用最低评分的短语作为补充。
根据应用所处阶段判断竞争。
- 新应用: 针对当前排名,目标竞争得分 ≤ 55。在标题中放入一个更强的短语是对未来的赌注,因此关键词字段现在必须包含可获胜的短语。
- 成熟应用(数千评分):竞争得分最高约 70 开始变得有竞争力,因为排名权威会随着安装量和评分数量而建立。
- 一个已上线应用如果在其自身标题或副标题短语中排名约 100+(参见
--app-id)则存在权威性问题,而非关键词问题。更多的关键词无法修复它;安装量和评分可以。
4. 阅读市场地图
第二个表格列出了在最多短语中排进前十的应用:即现有竞争者。对于前 5–10 名:
- 规模: 数十万的评分数量意味着拥有资金支持的领先者,而数千则意味着独立开发者规模且可以击败。
- 新鲜度: 上次更新超过一年意味着一个过时的领先者,这是机会窗口。
- 质量: 平均评分低于约 4.3 意味着用户不满意。他们的评论就是你的功能列表。
- 商业模式: 表格中有价格。应用内购买和订阅价格不在 API 中,但商店页面包含它们。使用 curl 获取
https://apps.apple.com/us/app/id<trackId>,对其进行 HTML 反转义,然后读取"title":"In-App Purchases"之后的 JSON:每个textPair是一个产品及其价格,例如 King of Math 的"Full Game"/"$3.99"。一个类别中如果每个领先者都收费订阅,证明人们愿意付费。一个强大的、一次性解锁的竞争对手会设定你将被比较的价格锚点。 - 搜索主导地位与知名度: 统计每个应用在所有短语中进入前三的次数(
keywords.json→top)。一个知名的竞争对手可能不在搜索结果中。例如,King of Math(3k 评分,15 年历史)在 178 个数学短语中从未进入前三,而 Mental Math Cards Games & Tips 进入了 41 次前三。
5. 给出结论
使用以下结构:
- 结论: 一句话说清:可行 / 瞄准细分市场 / 避免,并说明原因。
- 最佳机会关键词: 按机会得分排序的前 5–10 个关键词,每个附带需求、竞争和选择理由。
- 细分市场: 一个表格,列出关键词群组及其需求、竞争和含义(如下例)。
- 市场拥有者: 主要现有竞争者,其规模、新鲜度和商业模式。
- App Store 元数据:
- 标题: 最多 30 个字符。关键词在前,品牌在后:"Calorie Tracker — Glow Up" 优于 "Glow Up — Calorie Tracker",因为人们搜索的是关键词,不是未知的品牌,且靠前的词权重更高。品牌在前是用户明确知晓的选择,绝不是默认项。
- 副标题: 最多 30 个字符。第二强的关键词,以描述性方式写出:"Track macros & lose weight" 是副标题,"Feel amazing every day" 则浪费了 30 个字符。
- 关键词字段: 最多 100 个字符,以逗号分隔,不留空格。不要重复标题或副标题中已有的词(Apple 会合并它们),使用单数形式,并排除品牌名称和应用所属类别名称。
- Apple 产品名称(iPhone、iPad、Apple Watch)放在标题或副标题中会导致被拒(指南 5.2.5)。放在关键词字段中没问题,如果应用确实有例如 Watch 应用,则值得放入。
- 检查它:
python3 -I scripts/check_metadata.py --title "…" --subtitle "…" --keywords "…"会在超出限制或包含 Apple 名称时报错,并在浪费字符时发出警告。 - 以表格形式呈现:关键词、其分配的表面(标题、副标题或关键词字段)、需求、竞争,以及一行意图论证。在根据这些内容撰写列表页或进行本地化之前,务必获得用户对标题和副标题关键词的明确批准。
- 标题、副标题和关键词字段只能随新应用版本更改(推广文本是唯一可实时编辑的字段),因此要规划好关键词变更以配合下一次发布。
- 局限性: 下方适用的限制条件。
限制(始终说明相关的限制)
- 需求是相对的,而非绝对的。 自动补全位置对短语进行相互比较;它不提供下载量。真实的指标是 Apple Search Ads 流行度(5–100),可通过 Apple Search Ads 账户或付费工具(如 Astro)获得。
- 竞争使用评分数量作为下载量的代理指标。 两者相关,但并不等同。
- 结果仅为快照。 重新运行到带日期的文件夹以查看趋势。
- 美国 App Store 为默认。 其他国家/地区需要单独运行。
Astro(付费关键词工具),如果已安装
Astro(/Applications/Astro.app,包名 matteospada.it.ASO)提供真实的 Search Ads 流行度及其自身难度评分。目前已知的情况(2026 年 10 月):
- 演示限制: 演示版每个应用最多 10 个关键词,流行度、难度和建议需要许可证。
- MCP 服务器: Astro 有自己的 MCP 服务器,文档位于 tryastro.app/docs/mcp,可从其主屏幕开启。需要许可证。当它已获得许可并运行时,优先使用其工具而不是这里的启发式评分。工作流程可映射如下:
- 将尚未发布的应用的研究放在一个临时文件夹或标签中,使其与实时跟踪分开。
- 种子:
get_keyword_suggestions,加上对 3–5 个最接近竞争对手的extract_competitors_keywords(使用search_app_store找到它们)。 - 按市场:对本地商店前端运行
search_rankings可显示谁在那里胜出。 - 它还报告有多少应用在其名称或副标题中使用了一个关键词。数量多表明该短语确实被搜索;对于一个热门短语,数量为零则表明存在前述的可疑信号。
- 本地数据: 存储在
~/Library/Containers/matteospada.it.ASO/Data/Library/Application Support/Astro/Model.sqlite(Core Data)。在读取之前,务必复制该文件及其-wal和-shm文件。- 关键词在
ZKEYWORD表中:ZTEXT、ZSTORE、ZPOPULARITY、ZDIFFICULTY、ZAPPSCOUNT、ZCURRENTRANKING。 - 时间戳是自 2001 年以来的秒数,因此要加上 978307200 以转换为 Unix 时间。
- 关键词在
- 不要直接调用 Astro 的服务器 (
api.tryastro.app)。 其流行度数据是许可产品。请使用应用本身、其 MCP 服务器,或要求用户在 Astro 中添加关键词然后读取本地数据库。 - 通过脚本驱动其窗口不可靠。 这是一个 SwiftUI 应用,其侧边栏会忽略脚本化的点击,并且屏幕截图需要终端通常没有的权限。
RankPilot(我们的自有跟踪器),应用上线后
RankPilot 是我们的本地 App Store 关键词跟踪器(Node 22.5+,无依赖,数据存储在 ~/.rankpilot/rankpilot.db)。该技能决定在发布前和发布时要瞄准什么;然后 RankPilot 跟踪它:每个关键词和国家的排名历史、自上次检查以来的变化,以及哪些应用击败了你。一旦列表页上线,就移交过去。
- 其 MCP 工具(
node bin/rp.js mcp install注册它们):status、app_add(你的或竞争对手的应用)、keywords_add、keywords_localize(AI 为每个市场写入本地短语)、check_run、board_get(关键词 × 国家,包含排名、上次排名、流量、难度、结论,以及每个国家最多 5 个击败你的应用)、term_get(对一个短语进行说明,包含排名前 10 及其相关性)、keywords_brainstorm。 - 移交: 使用
app_add添加应用,使用keywords_add添加已批准的关键词(标题、副标题和关键词字段),设置本地…
…[按需截断]