asc-aso-audit by rudrankriyam/asc-skills
npx skills add https://github.com/rudrankriyam/asc-skills --skill asc-aso-audit运行两阶段 ASO 审计:首先对本地元数据文件进行离线检查,然后通过 Astro MCP 进行关键词差距分析。
asc metadata pull --app "APP_ID" --version "1.2.3" --dir "./metadata" 拉取到本地,并保存为规范文件。asc migrate export 或 asc localizations download,请先将其规范化为 ./metadata 布局,然后再运行此技能。references/aso_rules.md 以了解每个检查所执行的规则。metadata/version/ 下的最新版本目录(最高的语义版本号)。所有版本级字段都使用此目录。en-US,除非用户另有指定。广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
subtitle): metadata/app-info/{locale}.jsonkeywords, description, whatsNew): metadata/version/{latest-version}/{locale}.jsonname 字段,请通过 asc apps info list 获取或询问用户。不要将其标记为缺失字段错误。对本地元数据目录运行以下 5 项检查。无需网络调用。
对 subtitle 字段(以及 name 字段,如果可用)进行分词。标记出任何也出现在 keywords 字段中的词元 — 它已被索引,浪费了关键词预算。
严重性: ⚠️ 警告
示例: "quran" 同时出现在副标题和关键词中 — 从关键词中移除以释放 6 个字符
检查方法:
metadata/app-info/{locale}.json 读取 subtitle(以及 name,如果存在)metadata/version/{latest-version}/{locale}.json 读取 keywords、 , , 分割或遍历字符 — 每个字符或字符组是一个词元。空白字符分词不适用于 CJK。标记使用量低于推荐最小值的字段:
| 字段 | 最小值 | 限制 | 原理 |
|---|---|---|---|
| Keywords | 90 字符 | 100 | 90%+ 使用率可最大化索引 |
| Subtitle | 20 字符 | 30 | 推荐 65%+ 使用率 |
严重性: ⚠️ 警告
示例: keywords 为 62/100 字符 (62%) — 未使用 38 个字符的索引机会
标记为空或缺失的必需字段:subtitle, keywords, description, whatsNew。
注意:name 可能不在导出文件中 — 仅当应用信息 JSON 明确包含一个值为空的 name 键时才标记它。
严重性: ❌ 错误
示例: 语言环境 en-US 的 subtitle 为空
检查 keywords 字段的格式问题:
逗号后带空格 (quran, recitation)
使用分号而非逗号 (quran;recitation)
使用竖线而非逗号 (quran|recitation)
严重性: ❌ 错误 示例: keywords 包含逗号后的空格 — 浪费了 3 个字符
比较所有可用语言环境的 keywords 字段。标记关键词与主要语言环境(默认为 en-US)完全相同的语言环境 — 这通常意味着它们没有被本地化。
严重性: ⚠️ 警告
示例: ar 关键词与 en-US 相同 — 可能未针对阿拉伯语市场进行本地化
检查方法:
检查关键词是否自然地出现在 description 字段中。虽然 Apple 不 为搜索索引描述,但看到其搜索词在描述中体现的用户更有可能下载 — 这提高了转化率,从而间接提升了排名。
严重性: 💡 信息
示例: 16 个关键词中有 3 个未在描述中找到:namaz, tarteel, adhan
检查方法:
keywords 和 description如果 Astro MCP 可用且应用被跟踪,则运行关键词差距分析。按商店/语言环境运行,而不仅仅是美国商店 — 关键词流行度在不同市场差异巨大。
获取当前关键词:调用 get_app_keywords 并传入应用 ID,以检索跟踪的关键词及其当前排名。
确保多商店跟踪:对于每个有对应 App Store 地区的语言环境(例如,ar-SA → 沙特阿拉伯,fr-FR → 法国,tr → 土耳其),使用 add_keywords 添加该商店的关键词跟踪。没有这个,search_rankings 对于非美国商店将返回空值。
提取竞争对手关键词:调用 extract_competitors_keywords 并传入 3-5 个顶级竞争对手应用 ID,以查找关键词差距。这是价值最高的 Astro 工具 — 它能揭示竞争对手排名靠前而你未覆盖的关键词。尽可能在每个商店运行此操作。
获取建议:调用 get_keyword_suggestions 并传入应用 ID,以获取基于类别分析的额外推荐。
检查当前排名:调用 search_rankings 以查看应用当前在每个商店中针对跟踪关键词的排名。
与元数据对比:将建议的和竞争对手的关键词与本地元数据中 subtitle、name(如果可用)和 keywords 字段中的词元进行比较。
呈现差距:报告所有差距,按流行度分数排序(最高优先)。包括来源(竞争对手分析 vs. 建议)。
当推荐添加关键词时,考虑单个单词如何在索引字段(标题 + 副标题 + 关键词)中组合。例如:
在推荐中标记高价值的组合。
mcp__astro__add_app 将应用添加到 Astro 以进行差距分析"add_keywords 添加跟踪将结果呈现为一份审计报告。该报告仅涵盖最新版本目录。
### ASO 审计报告
**应用:** [name] | **主要语言环境:** [locale]
**元数据来源:** [包含版本号的路径]
#### 字段利用率
| 字段 | 值 | 长度 | 限制 | 使用率 |
|-------|-------|--------|-------|-------|
| Name | ... | X | 30 | X% |
| Subtitle | ... | X | 30 | X% |
| Keywords | ... | X | 100 | X% |
| Promotional Text | ... | X | 170 | X% |
| Description | (前 50 个字符)... | X | 4000 | X% |
#### 离线检查
| # | 检查项 | 严重性 | 字段 | 语言环境 | 详情 |
|---|-------|----------|-------|--------|--------|
| 1 | 关键词浪费 | ⚠️ | keywords | en-US | "quran" 在副标题中重复 |
**摘要:** 在 Z 个语言环境中发现 X 个错误,Y 个警告
#### 关键词差距分析 (Astro MCP)
| 关键词 | 流行度 | 在元数据中? | 建议操作 |
|---------|-----------|--------------|-----------------|
| quran recitation | 72 | ❌ | 添加到 keywords |
#### 建议
1. [最高优先级操作 — 错误优先]
2. [次优先级 — 关键词浪费]
3. [利用率改进]
4. [关键词差距机会]
asc metadata pull 之后运行此技能,以确保规范的元数据文件是最新的。asc metadata keywords diff --app "APP_ID" --version "1.2.3" --dir "./metadata"asc metadata keywords apply --app "APP_ID" --version "1.2.3" --dir "./metadata" --confirmasc metadata keywords sync --app "APP_ID" --version "1.2.3" --dir "./metadata" --input "./keywords.csv" 当导入外部关键词研究时每周安装量
103
仓库
GitHub 星标数
573
首次出现
10 天前
安全审计
安装于
codex103
kimi-cli99
gemini-cli99
amp99
cline99
github-copilot99
Run a two-phase ASO audit: offline checks against local metadata files, then keyword gap analysis via Astro MCP.
asc metadata pull --app "APP_ID" --version "1.2.3" --dir "./metadata".asc migrate export or asc localizations download, normalize it into the canonical ./metadata layout before running this skill.references/aso_rules.md to understand the rules each check enforces.metadata/version/ (highest semantic version number). Use this for all version-level fields.en-US unless the user specifies otherwise.subtitle): metadata/app-info/{locale}.jsonkeywords, description, whatsNew): metadata/version/{latest-version}/{locale}.jsonname is missing from the app-info JSON, fetch it via asc apps info list or ask the user. Do not flag it as a missing-field error.Run these 5 checks against the local metadata directory. No network calls required.
Tokenize the subtitle field (and name if available). Flag any token that also appears in the keywords field — it is already indexed and wastes keyword budget.
Severity: ⚠️ Warning
Example: "quran" appears in subtitle AND keywords — remove from keywords to free 6 characters
How to check:
metadata/app-info/{locale}.json for subtitle (and name if present)metadata/version/{latest-version}/{locale}.json for keywords、 , , or iterate characters — each character or character-group is a token. Whitespace tokenization does not work for CJK.Flag fields using less than their recommended minimum:
| Field | Minimum | Limit | Rationale |
|---|---|---|---|
| Keywords | 90 chars | 100 | 90%+ usage maximizes indexing |
| Subtitle | 20 chars | 30 | 65%+ usage recommended |
Severity: ⚠️ Warning
Example: keywords is 62/100 characters (62%) — 38 characters of indexing opportunity unused
Flag empty or missing required fields: subtitle, keywords, description, whatsNew.
Note: name may not be in the export — only flag it if the app-info JSON explicitly contains a name key with an empty value.
Severity: ❌ Error
Example: subtitle is empty for locale en-US
Check the keywords field for formatting issues:
Spaces after commas (quran, recitation)
Semicolons instead of commas (quran;recitation)
Pipes instead of commas (quran|recitation)
Severity: ❌ Error Example: keywords contain spaces after commas — wastes 3 characters
Compare keywords fields across all available locales. Flag locales where keywords are identical to the primary locale (en-US by default) — this usually means they were not localized.
Severity: ⚠️ Warning
Example: ar keywords identical to en-US — likely not localized for Arabic market
How to check:
Check whether keywords appear naturally in the description field. While Apple does not index descriptions for search, users who see their search terms reflected in the description are more likely to download — this improves conversion rate, which indirectly boosts rankings.
Severity: 💡 Info
Example: 3 of 16 keywords not found in description: namaz, tarteel, adhan
How to check:
keywords and description for each localeIf Astro MCP is available and the app is tracked, run keyword gap analysis. Run this per store/locale, not just for the US store — keyword popularity varies dramatically across markets.
Get current keywords : Call get_app_keywords with the app ID to retrieve tracked keywords and their current rankings.
Ensure multi-store tracking : For each locale with a corresponding App Store territory (e.g., ar-SA → Saudi Arabia, fr-FR → France, tr → Turkey), use add_keywords to add keyword tracking in that store. Without this, search_rankings returns empty for non-US stores.
Extract competitor keywords : Call extract_competitors_keywords with 3-5 top competitor app IDs to find keyword gaps. This is the highest-value Astro tool — it reveals keywords competitors rank for that you don't. Run this per store when possible.
Get suggestions : Call with the app ID for additional recommendations based on category analysis.
When recommending keyword additions, consider how single words combine across indexed fields (title + subtitle + keywords). For example:
Flag high-value combos in recommendations.
mcp__astro__add_app for gap analysis"add_keywords before queryingPresent results as a single audit report. The report covers only the latest version directory.
### ASO Audit Report
**App:** [name] | **Primary Locale:** [locale]
**Metadata source:** [path including version number]
#### Field Utilization
| Field | Value | Length | Limit | Usage |
|-------|-------|--------|-------|-------|
| Name | ... | X | 30 | X% |
| Subtitle | ... | X | 30 | X% |
| Keywords | ... | X | 100 | X% |
| Promotional Text | ... | X | 170 | X% |
| Description | (first 50 chars)... | X | 4000 | X% |
#### Offline Checks
| # | Check | Severity | Field | Locale | Detail |
|---|-------|----------|-------|--------|--------|
| 1 | Keyword waste | ⚠️ | keywords | en-US | "quran" duplicated in subtitle |
**Summary:** X errors, Y warnings across Z locales
#### Keyword Gap Analysis (Astro MCP)
| Keyword | Popularity | In Metadata? | Suggested Action |
|---------|-----------|--------------|-----------------|
| quran recitation | 72 | ❌ | Add to keywords |
#### Recommendations
1. [Highest priority action — errors first]
2. [Next priority — keyword waste]
3. [Utilization improvements]
4. [Keyword gap opportunities]
asc metadata pull to ensure canonical metadata files are current.asc metadata keywords diff --app "APP_ID" --version "1.2.3" --dir "./metadata"asc metadata keywords apply --app "APP_ID" --version "1.2.3" --dir "./metadata" --confirmasc metadata keywords sync --app "APP_ID" --version "1.2.3" --dir "./metadata" --input "./keywords.csv" when importing external keyword researchWeekly Installs
103
Repository
GitHub Stars
573
First Seen
10 days ago
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
codex103
kimi-cli99
gemini-cli99
amp99
cline99
github-copilot99
通过 LiteLLM 代理让 Claude Code 对接 GitHub Copilot 运行 | 高级变通方案指南
46,900 周安装
get_keyword_suggestionsCheck current rankings : Call search_rankings to see where the app currently ranks for tracked keywords in each store.
Diff against metadata : Compare suggested and competitor keywords against the tokens present in subtitle, name (if available), and keywords fields from the local metadata.
Surface gaps : Report all gaps ranked by popularity score (highest first). Include the source (competitor analysis vs. suggestion).