app-store-optimization
This Claude Code skill guides optimization of iOS App Store product pages for search ranking and download conversion. Use it for keyword research and targeting strategy, app title and subtitle positioning, description and promotional text structure, screenshot ordering and messaging, Custom Product Pages assignment, in-app event integration, Product Page Optimization testing, localized metadata approaches, ratings and review strategy, and in-app review prompt timing. It separates visibility tactics (name, keywords, category, reviews) from conversion tactics (screenshots, description, preview videos, messaging consistency). Reference the app-store-review skill for metadata compliance rules, character limits, and rejection triggers.
git clone --depth 1 https://github.com/dpearson2699/swift-ios-skills /tmp/app-store-optimization && cp -r /tmp/app-store-optimization/skills/app-store-optimization ~/.claude/skills/app-store-optimizationSKILL.md
# App Store Optimization (ASO)
Search visibility and conversion optimization for App Store product pages. This skill covers strategic metadata decisions -- which keywords to target, how to structure descriptions for conversion, and how to use Custom Product Pages and in-app events for discoverability. For metadata compliance rules (character limits, screenshot device requirements, rejection triggers), see the `app-store-review` skill.
## Contents
- [Workflow and Boundaries](#workflow-and-boundaries)
- [Title and Subtitle Strategy](#title-and-subtitle-strategy)
- [Keyword Field Strategy](#keyword-field-strategy)
- [Description Structure](#description-structure)
- [Promotional Text](#promotional-text)
- [Screenshot and Preview Optimization](#screenshot-and-preview-optimization)
- [In-App Review Prompts](#in-app-review-prompts)
- [Custom Product Pages](#custom-product-pages)
- [In-App Events](#in-app-events)
- [Product Page Optimization](#product-page-optimization)
- [Ratings and Review Management](#ratings-and-review-management)
- [Localized Metadata Optimization](#localized-metadata-optimization)
- [Common Mistakes](#common-mistakes)
- [Review Checklist](#review-checklist)
- [References](#references)
## Workflow and Boundaries
1. Split recommendations into **Visibility** (indexed metadata, localization,
ratings, events) and **Conversion** (message, assets, variants, experiments).
2. Name the evidence, owner, target metric, and validation checkpoint for each.
3. Apply the [Review Checklist](#review-checklist).
| Work | Owner |
|---|---|
| Listing, keyword/message fit, assets, page variants, localization, events, ratings strategy | This skill |
| Submission compliance, privacy manifest/labels, ATT wording, rejection risk | `app-store-review` |
| Purchases, paywalls, entitlements, subscription mechanics | `storekit` |
## Title and Subtitle Strategy
Apple indexes the app name and subtitle for search. Together they provide 60 characters (30 + 30) of indexed, high-visibility keyword real estate.
### Positioning framework
Use **Brand -- Keyword** when the brand already has recognition, **Keyword -- Brand** when a new app must compete on category terms, and a blended name when the brand naturally contains a relevant keyword.
### Rules
- Do not repeat words between the name and subtitle -- Apple indexes both, so duplicates waste characters.
- Front-load the highest-value keyword in whichever field has more room.
- Avoid generic filler words ("the", "best", "app") -- they consume space without search value.
- The subtitle should communicate the primary value proposition, not a tagline.
## Keyword Field Strategy
App Store Connect accepts up to 100 UTF-8 bytes in the keyword field (some
Apple overview pages summarize this as 100 characters). Use comma-separated
terms with no spaces after commas; each term must be longer than two
characters.
### Prioritization
Rank candidate keywords by three factors:
| Factor | Weight | Signal |
|--------|--------|--------|
| **Relevance** | Highest | Does the keyword describe what the app actually does? |
| **Search volume** | Medium | Are users actually searching for this term? |
| **Competition** | Lower | How many apps target this keyword? |
Prioritize user intent and metadata fit. Account for the primary category
alongside the app name, subtitle, and keyword field; do not repeat it.
### Tactical rules
- Deduplicate against title and subtitle -- Apple already indexes those words.
- Do not include both singular and plural forms of the same term; Apple treats
them as duplicates.
- Omit the category name -- Apple adds the app's primary category to search automatically.
- Omit spaces after commas -- they count against the 100-character limit.
- Consider abbreviations and common misspellings if they are genuine search terms.
- Reserve space for the most relevant, highest-intent terms; do not spend characters on terms that only weakly describe the app.
**See:** [references/keyword-research-methodology.md](references/keyword-research-methodology.md) for the full research process, scoring framework, and indexing details.
**Validation checkpoint:** Render the final name, subtitle, and keyword field
together. Count its UTF-8 bytes, split it on commas, reject blank,
space-prefixed, or two-character-or-shorter tokens, compare normalized words
across the three indexed fields and primary
category, and require a relevance or demand signal for every retained term.
Revise the field and repeat the check until every token earns its space.
## Description Structure
Apple's search guidance centers text relevance on the app name, subtitle, keywords, and primary category, plus behavior signals such as downloads, ratings, and reviews. Treat the description as conversion copy, not a place to stuff extra search terms: users who expand it are evaluating whether to download.
### Four-part structure
1. **Hook** (first 1-3 lines) -- the only text visible before the "more" fold. Lead with the strongest benefit or differentiator. This is the most important copy on the page.
2. **Feature highlights** -- 4-6 short feature descriptions. Use Unicode bullet characters (•) since the App Store does not render markdown. Focus on outcomes, not technical details.
3. **Social proof** -- awards, press quotes, user count milestones, or notable ratings. One or two lines.
4. **Call to action** -- a closing line encouraging the download. Keep it short and benefit-focused.
### Formatting notes
- The App Store does not render markdown, HTML, or rich text. Use plain text with Unicode characters for structure.
- Short paragraphs with line breaks between them. Walls of text kill conversion.
- Write per locale -- translate the structure, not the words. See [Localized Metadata Optimization](#localized-metadata-optimization).
## Promotional Text
Promotional text appears above the description, is limited to 170 characters, and can be updated at any time without submitting a new app veDiscover and configure Bluetooth and Wi-Fi accessories using AccessorySetupKit. Use when presenting a privacy-preserving accessory picker, defining discovery descriptors for BLE or Wi-Fi devices, handling accessory session events, migrating from CoreBluetooth permission-based scanning, or setting up accessories without requiring broad Bluetooth permissions.
Implement, review, or improve Live Activities and Dynamic Island experiences in iOS apps using ActivityKit. Use when building real-time updating widgets for the Lock Screen and Dynamic Island — delivery tracking, sports scores, ride-sharing status, workout timers, media playback, or any time-sensitive information that updates in real time. Also use when working with ActivityKit, ActivityAttributes, Activity lifecycle (request/update/end), Dynamic Island layouts (compact/minimal/expanded), push-to-update Live Activities, or Lock Screen live widgets.
Measure ad effectiveness with privacy-preserving attribution using AdAttributionKit. Use when registering ad impressions, handling attribution postbacks, updating conversion values, implementing re-engagement attribution, configuring publisher or advertiser apps, or replacing SKAdNetwork with AdAttributionKit for ad measurement.
Implement AlarmKit alarms and countdown timers for iOS and iPadOS with Lock Screen, Dynamic Island, StandBy, and paired Apple Watch system UI. Covers AlarmManager scheduling, AlarmAttributes and AlarmPresentation, system Stop and AlarmButton secondary actions, authorization, state observation, countdown widget-extension handoff, and Live Activity integration. Use when building wake-up alarms, countdown timers, or alarm-style alerts that need Apple's system alarm experience.
Build iOS App Clips with invocation URLs, App Clip Codes, NFC, QR codes, Safari banners, Maps, Messages, target setup, App Store Connect experiences, size/capability constraints, NSUserActivity routing, SKOverlay promotion, App Group/keychain handoff, ephemeral notifications, location confirmation, and full-app migration. Use when creating App Clips or wiring App Clip invocation, experience configuration, or full-app handoff.
Implement App Intents for Siri, Shortcuts, Spotlight, widgets, Control Center, and Apple Intelligence on iOS. Covers AppIntent actions, AppEntity and EntityQuery models, AppShortcutsProvider phrases, IndexedEntity Spotlight indexing, WidgetConfigurationIntent, SnippetIntent, and assistant schemas. Use when exposing app actions or entities to system surfaces.
Audits App Store submission readiness and rejection risk across current review guidelines, PrivacyInfo.xcprivacy and required-reason APIs, privacy labels, ATT, StoreKit payments, metadata, entitlements, widgets, and Live Activities. Use when preparing a submission, responding to rejection, reconciling privacy evidence, or separating upload blockers from cleanup.
Build private, on-device AI features on iPhone, iPad, and Mac with Foundation Models, Core ML, MLX Swift, or llama.cpp. Use when choosing an Apple-local model runtime, building an Apple Intelligence chatbot or tool-calling feature, running an LLM on Apple Silicon, converting or compressing a Python model for Core ML, or comparing on-device inference backends. For Swift Core ML loading and prediction code, use the coreml skill.