--- id: mobile-app-store-optimization title: ASO — App Store / Play Store 최적화 category: Coding status: draft source_trust_level: B verification_status: conceptual created_at: 2026-05-09 updated_at: 2026-05-09 tags: [mobile, aso, vibe-coding] tech_stack: { language: "process", applicable_to: ["Mobile"] } applied_in: [] aliases: [ASO, App Store Optimization, keyword, screenshot, conversion, App Store Connect, Play Console] --- # App Store Optimization (ASO) > 앱 의 SEO. **Title + keyword + screenshot + rating + review = 검색 / 전환**. App Store + Play Store 다름. ## 📖 핵심 개념 - 검색 = 첫 노출. - 페이지 = 전환 (install). - Rating + review = 신뢰. - 매주 / 매월 update. ## 💻 코드 패턴 ### App Store (iOS) ``` Title: 30 char + brand Subtitle: 30 char Keyword: 100 char (CSV, 안 보임) Description: 4000 char Promotional text: 170 char What's new: 4000 char ``` ### Play Store (Android) ``` Title: 30 char Short description: 80 char Description: 4000 char (full text search) What's new: 500 char ``` ### iOS keyword field ``` Title: 가장 무거운 weight. Subtitle: 두 번째. Keyword field: 보조. → Title 에 핵심 keyword 1-2. Subtitle 에 추가 1-2. Keyword field = 나머지 (CSV: comma 만). ``` ### Title 예 ``` ❌ "MyApp" — brand 만 ❌ "MyApp - Best Photo Editor App For iPhone" — keyword stuffing ✅ "Photolab: AI Photo Editor" - Brand + 핵심 keyword + 차별 ``` ### Keyword research ``` - Sensor Tower / data.ai / AppFollow - Apple Search Ads (Ads → 인기 keyword) - 경쟁사 분석 - "{my niche}" + "for iPhone" / "free" 매 keyword 의: - Volume (검색) - Difficulty (경쟁) - Relevance ``` ### Localization ``` 국가 / 언어 별 title + keyword. EN-US: "Photo Editor: AI Filter" KO: "포토 에디터: AI 필터" JA: "写真編集アプリ" ES: "Editor de Fotos" → 매 locale 가 별 검색 / volume. ``` → App Store Connect → Localizations. ### Screenshot ``` 첫 1-3 가 가장 중요 (preview). 순서: 1. Hook (가장 attractive) 2. Key feature 1 3. Key feature 2 4. Key feature 3 5. Social proof / award 추가: - Title text overlay - Annotation arrow - Lifestyle (사람) ``` ### Screenshot tooling ``` - Figma → 레이아웃 - Fastlane snapshot → device frame - ScreenshotOne (web) - AppLaunchpad (template) → 6.9", 6.7", 6.5" 다 size. ``` ### App preview video (iOS) ``` 30 sec max. - Sound off (자막) - 첫 5초 가 핵심 - App 안의 demo (외부 X) - 매 size 별 → 3 video / locale (가능). ``` ### Icon ``` - Square 1024 × 1024 (iOS) - 글자 X (작아 안 보임) - Recognizable - A/B test (Play Console) iOS = A/B test 안 됨 (변경 = review). ``` ### Rating ``` 5 ★ 가 install 의 가장 큰 driver. → Negative review 가 주범. 해결: - In-app review prompt (좋은 시점) - 좋은 사용자 → store - 안 좋은 → support form ``` ```swift // iOS import StoreKit if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene { SKStoreReviewController.requestReview(in: scene) } ``` → 매 365 days 3회 한도. ### Review prompt timing ``` 좋은 시점: - User 가 가치 경험 후 (e.g. 3 photo edit) - Onboarding 후 X - Bug 후 X 나쁜: - 첫 launch - 매 launch ``` ### Negative review 응답 ``` - 24-48 시간 안 답 - 친절 + 해결책 - "Update X.Y 에서 fixed" 가 update - 사용자 가 rating 다시 가능 → 진짜 응답 = 다른 사용자 도 신뢰. ``` ### Description structure ``` 첫 3 line = 가장 중요 (preview). [Hook] "Edit photos with AI in seconds." [Features] ✓ AI background removal ✓ One-tap filters ✓ Pro tools [Social proof] "Featured by Apple, 5M+ users" [CTA] "Download now — free." ``` ### A/B test (Play Store) ``` Play Console → Store listing experiments. Variant A: Original Variant B: New screenshot → 4-8주 → winner. ``` ### iOS A/B (Custom Product Pages) ``` Product Page: 3 variant max. → Marketing 가 다른 page link 사용: URL `?ppid=xxx` ``` → Apple Search Ads 가 variant 선택. ### Pricing ``` 무료 + IAP > 유료. Subscription: - 월 / 연 (보통 연 = 50% 할인) - Free trial (7-30 days) - Yearly first (큰 LTV) $0.99 vs $1.99: 가격 가 install 영향 X (큰 차이 시). ``` ### 예: yearly first ``` "$59.99 / year (7 days free)" (default) "$9.99 / month" (small option) → 선택 시 가 yearly. LTV 5x. ``` ### App size ``` < 200 MB = WiFi + cellular 가능. > 200 MB = WiFi 만 (download abandon ↑). → App thinning + bitcode + on-demand resources. ``` ### What's new (release notes) ``` 매 update = update. - 변경 사항 (concrete) - "Bug fixes" 만 = 약함 ✓ "Now supports Live Photos" ✓ "30% faster export" ✗ "Bug fixes and improvements" ``` ### Version bumping ``` - 매 1-4 주 1 update - Apple = featured 후보 가 update 가 잦은 앱 - 작은 update 도 update notes 기회 ``` ### Release scheduling ``` Mon-Wed: 가장 좋음. Thu-Fri: review 가 늦음 (주말). 연말 (Dec 22 - Jan 7): App Store freeze. ``` ### Apple Search Ads ``` - 검색 keyword 광고 - $5-50 / install (분야 따라) - ROAS 측정 필요 → 큰 keyword 비싼. Long-tail keyword 가 cheap. ``` → 좋은 organic ASO 후 Search Ads. ### Featured (App Store) ``` Apple 가 선정. 큰 boost (2-10x install). - New (출시 첫 1개월) - Update (significant) - Today story - Category top → Apple-friendly: - iOS 새 feature 빨리 채택 - App Store guidelines 준수 - 좋은 design ``` ### Indie hacker tips ``` - 1-2 keyword 만 집중 - Niche 가 broad 보다 좋음 - App preview video 가 differentiator - Rating 4.7+ 우선 - Update note 가 마케팅 ``` ### 측정 ``` App Store Connect: - Impression / product page view / install - Conversion = install / view - Source (search, browse, web) - Top keyword Play Console: - 비슷 - A/B variant - Acquisition source ``` ### 함정 ``` - Review 매수 (Apple 가 ban) - Misleading screenshot (rejection) - Trademark (다른 앱 이름) → reject - Auto reply review = penalty ``` ### Tools ``` - AppFollow (review monitoring) - Sensor Tower (data) - Mobile Action (ASO) - App Annie / data.ai - ASOMobile (cheap) ``` ## 🤔 의사결정 기준 | 단계 | 추천 | |---|---| | Pre-launch | Title + screenshot + Apple Search Ads test | | First month | Featured 후보 — release notes + iOS new | | 첫 6 month | Keyword 실험, A/B (Play Store) | | 1+ year | Negative review 적극 응답, retention focus | | Subscription | Yearly first, free trial | | Indie | 1-2 keyword, niche, fast iterate | ## ❌ 안티패턴 - **Brand 만 title**: 검색 안 됨. - **Keyword stuffing**: rejection. - **첫 screenshot 가 약함**: 전환 ↓. - **Negative review 무시**: 누적 = bad rating. - **"Bug fixes" only**: 새 기회 안 보임. - **Update 안 함**: deindex (Apple). - **Single locale**: 큰 시장 잃음. - **iOS 새 feature 무시**: featured 안 됨. ## 🤖 LLM 활용 힌트 - Title + screenshot 가 가장 큰 lever. - Localization = 큰 multiplier. - Apple Search Ads 가 keyword 검증. - Featured = iOS 새 feature 빨리. ## 🔗 관련 문서 - [[Mobile_AB_Testing]] - [[iOS_StoreKit_2_Patterns]] - [[Mobile_App_Size_Optimization]]