VOOZH about

URL: https://dev.to/joseph_anady_214bacedf939/app-store-optimization-aso-4anj

⇱ App Store Optimization (ASO) - DEV Community


Originally published at thatdevpro.com. This framework reference is part of the 14-tier Engine Optimization stack from ThatDevPro, an SDVOSB-certified veteran-owned web + AI engineering studio. You are reading the dev.to mirror; the source-of-truth canonical version with embedded validation tools lives at the link above.

App Store Connect and Google Play Console Ranking Signals, Visual Asset CRO, Reviews and Ratings Velocity, the SEO Plus ASO Coordination Layer, App Pack Inclusion, and Apple Intelligence App Discovery

A comprehensive installation and audit reference for App Store Optimization. ASO is the parallel discipline to SEO that governs how mobile apps are discovered inside Apple App Store and Google Play. It is its own surface (in-store search and browse, editorial features, store-level personalization) and it overlaps with SEO at the web layer (the marketing page that promotes the app, App Pack inclusion in Google SERPs, Apple Spotlight indexing, Siri Suggestions, deep-link infrastructure tying web URLs to in-app destinations). Dual purpose: installation manual and audit document.

Cross-stack implementation note: ASO has a stack-agnostic web layer (the marketing page, deep-link config files, schema, App Pack signaling) and an app-specific layer (App Store Connect, Play Console, in-app review APIs, on-device indexing). Web layer code samples are plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents see framework-cross-stack-implementation.md. For pure CSR SPAs see framework-react.md. For Tailwind concerns see framework-tailwind.md. The app-specific layer lives inside the developer consoles and is platform-bound regardless of web stack.


1. Document Purpose

1.1 What ASO Is and Why This Framework Exists

App Store Optimization ranks apps inside Apple App Store and Google Play, plus the coordination layer between web SEO and in-store discovery. ASO matters for any client shipping a mobile app and for any web property wanting App Pack inclusion in Google SERPs or Apple Intelligence visibility in Spotlight and Siri Suggestions.

App Pack is a SERP feature (Search Engine Land, 2016 to present). Apple began AI extraction of screenshot caption text in June 2025, treating captions as ranking metadata (Appfigures, "The Biggest App Store Algorithm Change is Here", June 2025; confirmed at WWDC 25 as AI extraction, not classical OCR). Apple Intelligence app discovery surfaces (Spotlight, Siri Suggestions, AI-tagged App Store browse) launched into beta in iOS 26 (TechCrunch, June 2025).

1.2 Document Scope

Covers: store ranking signals on both platforms, keyword research, visual asset CRO, reviews and ratings, the web marketing page, deep-link infrastructure, schema for SoftwareApplication/MobileApplication, App Pack, Apple Intelligence app discovery, Core Spotlight indexing, common rejection patterns, audit rubrics. Touches but does not exhaust: in-app monetization, paid acquisition spend, attribution platform setup, SDK integration.

1.3 Three Operating Modes

Mode A. Install. Building ASO from scratch. Sections 2 to 14 in order.
Mode B. Audit. Evaluating existing posture. Skip to Section 13.
Mode C. Hybrid. Audit, then install for failing items.

1.4 How Claude Code CLI Should Consume This Document

  1. Read Section 2 (client variables).
  2. Read Section 3 (SEO vs ASO parallels).
  3. Apply Sections 4 to 7 (in-store).
  4. Apply Sections 8 to 11 (web plus Apple Intelligence).
  5. Validate against Section 13.
  6. Generate report via Section 14.

1.5 Conflict Resolution Rules

Conflict Rule
Listing with metadata errors Audit and correct. Never delete-and-recreate; loses ranking history.
Multiple listings for same app Submit duplicate removal through respective console.
Thin marketing page Enrich to Section 8 standard. Do not noindex unless placeholder.
Rejection in progress Pause ASO; resolve rejection first.
Client requests review incentivization Refuse. Apple Guideline 1.1.7 and Google Play policy prohibit; app removal risk.

1.6 Required Tools

  • App Store Connect, Google Play Console. Native consoles.
  • Apple Search Ads (searchads.apple.com). Apple's own keyword popularity data; free account.
  • AppTweak, Sensor Tower, data.ai, AppFigures, Mobile Action. Paid third-party ASO intelligence.
  • SplitMetrics, Storemaven. Pre-launch A/B testing outside the platforms.
  • AppFollow, App Radar. Review management and ASO tracking.
  • curl plus jq. Validating apple-app-site-association and assetlinks.json at .well-known.

2. Client Variables Intake

# --- App Identity (REQUIRED) ---
app_name: "" # canonical app name as displayed in stores
developer_account_name: "" # Apple team name / Google Play developer name
bundle_id_ios: "" # com.example.app
package_name_android: ""
app_store_id_ios: 0 # numeric ID from App Store URL
play_store_url: ""

# --- Platforms ---
platforms:
 ios: false
 android: false
 ipados: false
 mac_catalyst: false
 vision_os: false
 android_tablets: false
 android_tv: false
 wear_os: false

# --- Distribution Status ---
ios_status: "" # live | in_review | rejected | unpublished | not_submitted
android_status: "" # live | internal_testing | closed_testing | open_testing | unpublished
launch_date_ios: "" # YYYY-MM-DD
launch_date_android: ""

# --- Current Performance ---
downloads_ios_total: 0
downloads_android_total: 0
downloads_last_30d_ios: 0
downloads_last_30d_android: 0
mau_ios: 0
mau_android: 0
rating_ios: 0.0
rating_android: 0.0
review_count_ios: 0
review_count_android: 0
review_count_last_30d_ios: 0
review_count_last_30d_android: 0
crash_rate_ios: 0.0 # Xcode Organizer
crash_rate_android: 0.0 # Android Vitals
anr_rate_android: 0.0

# --- Category and Competition ---
primary_category_ios: ""
secondary_category_ios: ""
primary_category_android: ""
top_competitors: []

# --- Current ASO State ---
title_ios: "" # max 30
subtitle_ios: "" # max 30
keyword_field_ios: "" # 100
promotional_text_ios: "" # max 170
description_ios: "" # max 4000
title_android: "" # max 30
short_description_android: "" # max 80
long_description_android: "" # max 4000
screenshot_count_ios: 0
screenshot_count_android: 0
preview_video_ios: false
preview_video_android: false
custom_product_pages_ios: 0 # CPP
custom_store_listings_android: 0 # CSL
ppo_tests_ios: 0
sle_tests_android: 0

# --- Web Coordination Layer ---
marketing_page_url: ""
universal_links_configured: false # apple-app-site-association at .well-known
android_app_links_configured: false # assetlinks.json at .well-known
smart_app_banner_present: false # iOS Safari meta tag
applinks_meta_present: false
softwareapplication_schema_present: false
app_pack_visibility: "" # yes | no | intermittent | unknown
spotlight_indexing_implemented: false
nsuseractivity_implemented: false

# --- Localization ---
primary_languages_ios: []
primary_languages_android: []
cross_localization_enabled: false # English (US) plus Spanish (MX) stack etc.

# --- Goals ---
primary_goal: "" # increase_organic_installs | improve_cvr | expand_keywords | recover_rating | win_app_pack | launch_new
target_keywords_brief: ""

Platforms block determines which sections apply.


3. What ASO Is and How It Parallels SEO

3.1 The Parallel

ASO is SEO inside the app stores. A ranking algorithm scores entities (apps) against queries and returns a ranked list. Both disciplines share a vocabulary (keyword research, metadata, conversion optimization, reviews as trust signals, branded vs unbranded search, head vs long tail). A practitioner who knows SEO can pick up ASO quickly.

3.2 The Differences

Platform algorithms, not Google's web algorithm. App Store ranking is Apple's. Google Play ranking is Google's Play algorithm (different from Google's web algorithm). SEO signals (backlinks, E-E-A-T) do not directly affect in-store ranking, though they affect the web layer that promotes the app.

Indexed fields are explicit and tight. App Store indexes title, subtitle, the 100-char keyword field, AI-extracted screenshot text (since June 2025), and AI-generated tags. Google Play indexes title, short description, long description, category, tags. The web indexes everything rendered; stores index a small surface.

Conversion rate is a first-class ranking input. Both stores use product-page-view-to-install ratio (AppTweak 2025 ASO Trends and Benchmarks; Storemaven 26 to 33 percent median benchmark). SEO uses CTR as a much softer signal.

Reviews and ratings carry more weight. Star average, velocity, recency are explicit ranking inputs. A 0.3 star delta lifts conversion 22 to 28% in Finance and Health (Sensor Tower 2025).

Marketing page on the web is its own surface. App Pack is a Google SERP feature. Apple Spotlight, Siri Suggestions, and Apple Intelligence are device-side surfaces. In-store ASO and web SEO cooperate.

3.3 Overlap with the Four Pillars

The four pillars (SEO, AEO, AIO, GEO) apply to the web marketing page. Schema (SoftwareApplication, MobileApplication) feeds entity extraction. See framework-aicitations.md, framework-aioverviews.md, framework-eeat.md. In-store ASO is a sibling discipline, not one of the four pillars. Section 13 audits the two layers separately.


4. App Store Ranking Signals

4.1 Apple App Store Ranking Signals (2025-2026)

apple_app_store_ranking_signals:

 title:
 weight: "highest"
 max_chars: 30
 rule: "Brandplus1to3high-intentkeywords.Strongestindexedfield."
 source: "SearchEngineLand2022;AppTweak2025benchmark."

 subtitle:
 weight: "very_high"
 max_chars: 30
 rule: "Distinctkeywordsfromtitle;weightroughlyequaltothehiddenkeywordfield."

 keyword_field:
 weight: "high"
 max_chars: 100
 rule: "Comma-separated,nospaces,notitle/subtitlerepeats,singularonly."
 visibility: "Hiddenfromusers."

 screenshot_text:
 weight: "high"
 method: "AIextraction(confirmedatWWDC25;notclassicalOCR)"
 rule: "Captiontexttreatedaskeywordmetadata;topandbottomregionsweightedmost."
 launched: "June2025"
 source: "Appfigures,'TheBiggestAppStoreAlgorithmChangeisHere',June2025."

 ai_generated_tags:
 weight: "emerging"
 status: "BetaiOS26asofWWDC2025;notyetonpublicAppStore"
 method: "LLManalyzesmetadata,description,category,screenshots;tappablechips"
 developer_control: "Cannotaddmanually;canremoveirrelevantonesinAppStoreConnect"
 source: "TechCrunch,June2025."

 download_velocity:
 weight: "high"
 rule: "Recentvelocity(last7to30days)outweighstotalall-timedownloads."

 conversion_rate:
 weight: "high"
 rule: "Productpageviewstoinstalls.AppTweak2025:33.4%iOSmedian."

 retention:
 weight: "high_and_growing"
 note: "Post-installretentionisaqualitysignal(AppScreenshotStudio2026rankingguide)."

 ratings_and_reviews:
 weight: "high"
 factors: ["Starrating", "Velocity", "Recency", "Helpful-voteweighting"]
 note: "SensorTower2025:4.3to4.6liftincreasesconversion22to28%inFinanceandHealth."

 category:
 weight: "medium"
 rule: "DrivesBrowsetabandcategorycharts."

 in_app_purchase_names:
 weight: "low"
 rule: "IAPnamesindexed;canincludekeywords."

 developer_name:
 weight: "low_to_medium"

 description:
 weight: "negligible_for_search"
 note: "NOTindexedoniOS.Conversiononly.GooglePlayDOESindexitslongdescription."

4.2 Google Play Store Ranking Signals (2025-2026)

google_play_store_ranking_signals:

 app_title: {weight: "highest", max_chars: 30}

 short_description:
 weight: "high"
 max_chars: 80
 note: "Indexedforsearch;visible.Googleauto-localizes(AppTweak2025:88%apps/94%games)."

 long_description:
 weight: "medium_to_high"
 max_chars: 4000
 rule: "Indexed;repeateachprimarykeyword2to3timesnaturally."

 install_count_and_velocity: {weight: "high"}

 ratings_and_reviews:
 weight: "high"
 factors: ["Starrating", "Velocity", "Recency", "Sentimentanalysisonreviewtext(PlayConsole)"]

 uninstalls:
 weight: "negative"
 rule: "Highuninstallratesuppressesranking."

 retention: {weight: "high", source: "30-dayretentionexposedinPlayConsole"}

 android_vitals:
 weight: "medium_to_high"
 thresholds:
 crash_rate: "under1.09%(PlayStoreBadBehaviorthreshold)"
 anr_rate: "under0.47%"
 additional: ["Slowrendering", "Slowstart", "Excessivewakeups", "Stuckwakelocks"]
 source: "AndroidVitalsdashboardinPlayConsole."

 tags: {weight: "medium", rule: "Controlledvocabulary;upto5perapp"}

 content_rating: {weight: "low", note: "Higherratingslimitreach;filter,notdirectrankingsignal"}

 developer_account_trust: {weight: "medium"}

4.3 Cross-Platform Differences

Signal Apple App Store Google Play
Title 30 chars 30 chars
Subtitle 30 chars n/a
Short description n/a 80 chars
Long description indexed for search No Yes
Hidden keyword field 100 chars n/a
Screenshots OCR-indexed Since June 2025 Less evidence
Screenshots count Up to 10 / device size Up to 8
Preview/promo video Up to 3, 30 sec, autoplay muted 1 (YouTube-hosted)
Native A/B testing PPO SLEs
Alternate listings CPPs (up to 70, since Oct 2025) CSLs (up to 50)
Crash rate dashboard Xcode Organizer Android Vitals

5. Keyword Research for ASO

5.1 Principles

Three differences from web keyword research. Universe is smaller (fewer in-store searches). Intent is narrower (almost every in-store search is install intent). Data sources are platform-specific (Apple Search Ads, Google Play Console; third-party tools approximate).

5.2 Sources by Platform

keyword_research_sources:

 apple_app_store:
 apple_search_ads:
 url: "searchads.apple.com"
 data: "SearchPopularityscore(1to100,Appleinternal)"
 access: "Free"
 caveat: "October2025updatedroppedthenumberofUSAppStorekeywordswithpopularityabove5by77%(aso.devanalysis).Cross-referencewiththird-partydata."
 apple_search_term_rank_report:
 status: "InsightssectionofAppleSearchAds,betaasofOctober2025"
 data: "Monthlyreport;howsearchtermsrankwithingenresandcountries."
 third_party: ["AppTweak", "SensorTower", "AppFigures", "MobileAction"]

 google_play_store:
 play_console_search_term_acquisition:
 path: "Acquirereports>Searchtermacquisition"
 data: "Realacquisitionperformancebysearchtermforyourownapp"
 google_keyword_planner:
 note: "Websearchvolume;correlatedtoPlayStorevolumeforhigh-intentterms"
 play_store_autocomplete:
 method: "TypeseedterminPlayStoresearch;recordsuggestions"
 third_party: ["AppTweak", "SensorTower", "AppFigures", "MobileAction", "ASOdesk"]

5.3 Selection Heuristics

aso_keyword_heuristics:
 brand_terms: "Exactbrandintitle;brandsearchesconvertat50%+installrate."
 high_intent_unbranded: "Subtitle(iOS)andshortdescription(Android)hold2to4high-intentunbrandedterms."
 long_tail_keyword_field: "iOS100-charfieldholdslong-tailcombinationsthatdonotfitintitleorsubtitle."

 cross_localization_ios:
 pattern: "Appleindexeskeywordsfromprimarylanguageplusoneormoresecondarylocalizations."
 us_example: "InUS,AppleindexesEnglish(US)plusSpanish(Mexico),Russian,Chinese,others."
 leverage: "UseSpanish(Mexico)keywordfieldonUS-targetedappfor100additionalEnglishkeywordcharacters(ifnotlocalizedintoSpanish)."
 citation: "AppTweak'HowtoBenefitfromCross-LocalizationontheAppStore';AppFigures'10xYourKeywordList'."

 apple_search_ads_research_loop: "Discoverycampaignbroad-matchharvestsconvertingtermsintoorganickeywordfield."
 google_play_long_description_repetition: "Eachprimarykeyword2to3timesnaturally;nostuffing(Googledetectsdensityanomalies)."
 competitor_gap_analysis: "Pulltop3competitors'indexedkeywordlists;targettheirhigh-volumetermsyoudonotyetcover."

5.4 The 100-Character iOS Keyword Field

ios_keyword_field_rules:

 total_chars: 100
 format: "Comma-separated,nospacesaftercommas(everyspacewastesachar)."
 case: "Lowercase;capitalizationdoesnotaffectmatching."
 no_repeats: "Donotincludewordsalreadyintitleorsubtitle."
 singular_only: "Applematchespluralautomatically.Includingbothwasteschars."
 no_competitor_names: "TrademarkrejectionriskunderGuideline4.0."
 no_apple_terms: "Avoid'free','app','iPhone','iPad','appstore'.Applestripsorrejects."
 no_punctuation_other_than_comma: true
 per_localization: "Eachlocalizationhasitsown100-charfield.Usecross-localizationtoexpandsurface."

 example:
 bad: "best,free,meditation,app,sleep,meditationapp,sleeping,meditate"
 why_bad: "'best'and'free'arefiller;'app'rejected;'meditationapp'repeats'meditation';'sleeping'isjustpluralof'sleep'."
 good: "meditation,sleep,calm,anxiety,mindfulness,breathing,relax,unwind,zen"
 why_good: "Ninedistinctindexedtermsin67chars;33charsremain."

6. Visual Asset Optimization

6.1 Icon

icon_guidelines:
 technical:
 ios: "1024x1024PNGnoalpha;Appleappliesrounded-cornermaskatruntime."
 android: "512x512PNGalphaallowed;adaptiveicontreatment."
 design:
 simplicity: "Recognizableat60x60pxhomescreensize."
 contrast: "Strongagainstlightanddarkstorebackgrounds."
 no_text: "Brandletteronly;fulltextillegibleatthumbnailsize."
 palette: "Twotothreecolorsmax."
 category_signaling: "Category-signalingiconsoutperformclever-but-ambiguousmarks(SplitMetrics2024-2025)."
 conversion_lift: "5to15%onaverage;outliers30%+(SplitMetrics2024-2025)."
 priority: "Highest-leveragesingleassettotestfirstformostcategories;Shoppingexception(firstscreenshotleads)."
 testing:
 ios: "PPO;upto3treatmentsvscontrol."
 android: "SLE."

6.2 Screenshots

screenshot_guidelines:

 technical_ios:
 iphone_6_7: "1290x2796px(iPhone15ProMax).Required;Appledownsizesforsmallerdevices."
 iphone_5_5: "1242x2208pxlegacy.Optional."
 ipad_12_9: "2048x2732px.RequiredifiPad-compatible."
 count: "Upto10perdevicesize."

 technical_android:
 phone: "Min320px,max3840px;aspectratio16:9to9:16."
 count: "Upto8."
 feature_graphic: "1024x500pxbannerattopoflisting."

 composition:
 first_two_critical: "Firsttwoseenbeforescroll.Mostdecisionshappenhere."
 caption_text: "SinceJune2025AppleAI-extractscaptiontextaskeywordmetadata.CaptionsmustbebothhumanbenefitANDindexedkeyword."
 caption_example:
 bad: "Thebestappever!"
 good: "TrackSleepPatterns"
 why: "Goodcaptionsurfaces'tracksleep'and'sleeppatterns'asindexedtermswhilereadingasabenefit."
 device_frame_vs_full_bleed: "A/Btestbycategory."
 visual_hierarchy: "Largetextfirst,UIsecond,micro-textlast."

 storytelling_pattern:
 s1: "Herobenefitwithbrand"
 s2: "Primaryfeature"
 s3: "Socialproof"
 s4_5: "Secondaryandtertiaryfeaturesorusecases"
 s6_to_10: "Additionalfeaturesandedgebenefits"

 conversion_lift:
 source: "AppTweak2025ASOTrendsandBenchmarks;SplitMetricsA/Bcompilation"
 findings:
 - "QuarterlyA/Btestingyields20to30%higherCVRthanstaticscreenshots"
 - "ScreenshotA/Btestsproduce11.8%medianCVRliftacrossvariants"
 - "IffirsttwoscreenshotsdonotchangebetweenPPOvariants,thetestiseffectivelyidenticaltocontrol"

 category_priorities:
 productivity: "Icon,thenscreenshots,thensubtitle"
 shopping: "Firstscreenshot,secondscreenshot,thenpreviewvideo"
 games: "Gameplayscreenshotsandpreviewvideodominate"
 finance_health: "Trustsignalingcritical(securitybadges,certifications,ratings)"

6.3 App Preview Video (iOS) and Promo Video (Android)

preview_video_guidelines:

 technical_ios:
 duration: "Upto30seconds"
 count: "Upto3perlanguage"
 format: "MOV,M4V,MP4;under500MB"
 resolution: "Matchdevicesize(e.g.,2796x1290foriPhone15ProMax)"
 autoplay: "Yes,muted,onproductpageandinsearchresults"
 source: "AppStoreConnectHelp:Apppreviewspecifications."

 technical_android:
 hosting: "YouTube-hosted;onepromovideoperlisting"
 duration: "Recommendedunder30sec;2minhardlimit"
 autoplay: "Onthelistingpage"

 content:
 audio_muted_default: "On-screentextandvisualsmustcarrythemessage."
 first_3_seconds: "Openwithherobenefitvisually."
 actual_app_footage: "Bothstoresrequirefootageoftheactualapp;conceptvideosriskrejection."

 conversion_lift:
 source: "Hilomedia2025PreviewVideosguide;SplitMetricsaggregateddata"
 findings:
 - "Well-producedpreviewliftsCVR20to40%overscreenshots-onlylistings"
 - "Watchersandengagersareroughly2xmorelikelytoinstall"
 - "Atleasthalfofviewerswatchthroughtoend"

 poster_frame_ios: "Appleshowswhenautoplaydisabled.Pickaframeconveyingvaluepropwithcaptiontext."

6.4 Custom Product Pages and Store Listing Experiments

custom_pages:

 ios_cpp:
 customizable: "Screenshots,previewvideos,promotionaltext,deeplinktarget"
 fixed: "Name,subtitle,icon,description,keywords"
 max_per_app: 70 # since October 29, 2025
 keyword_assignment: "Sincemid-2025CPPscanbeassignedkeywords;appearinorganicsearchresults."
 deep_links: "EachCPPcandeep-linkintoaspecificin-appdestinationafterinstall."
 use_cases: ["Audiencesegments", "Trafficsources", "Marketswithinalocale", "Featureemphasisforpaid"]
 source: "AppleDeveloperAppStoreConnectHelp:CustomProductPages."

 ios_ppo:
 elements: "Icon,screenshots,previewvideos"
 treatments: "Upto3vscontrol"
 duration: "Upto90dayspertest;oneatatime"
 reporting: "AppAnalytics"

 android_csl:
 customizable: "Title,shortdescription,longdescription,graphics,video"
 max_per_app: 50
 targeting: "Country,language,installstate,pre-registration"
 google_ads_integration: "IntegrateswithGoogleAdscampaigns"
 ai_text_generation: "2025:experimentalGeminiAIgeneratesCSLtextbytheme,tone,audience."

 android_sle:
 elements: "Icon,featuregraphic,screenshots,shortdescription"
 concurrent_tests: "Upto5onmainlisting;upto5perCSL(50CSLs=250+parallel)"
 reporting: "Significanceandconfidenceinterval"

7. Reviews and Ratings Management

7.1 Why Reviews Matter

Reviews and ratings are simultaneously a ranking signal, a conversion signal, and a trust signal. A 0.3 star delta lifts conversion 22 to 28% in competitive categories (Sensor Tower 2025 Finance and Health benchmark). High review velocity signals freshness; both stores reward it in ranking.

7.2 Review Acquisition (Compliant)

review_acquisition:

 ios_skstorereviewcontroller:
 api: "StoreKitSKStoreReviewController/requestReview()"
 throttle: "Applelimitspromptsto3peruserper365-dayperiod."
 timing: "Onlyafterdemonstrateduservalue.Neveronlaunch."
 apple_control: "Appledecideswhethertoactuallyshow;developerhasnooverride."
 source: "AppleDeveloperDocumentation:SKStoreReviewController."

 android_in_app_review_api:
 api: "GooglePlayIn-AppReviewAPI(PlayCorelibrary)"
 throttle: "Quotaenforced;over-frequentcallssilentlyno-op."

 prohibited:
 - "Incentivizedreviews(paying,rewarding,unlockingcontentforreviews)"
 - "Reviewgating(askingsatisfactionfirst;onlypromptinghappyusers)"
 - "Customnon-platformreviewprompts(AppleGuideline1.1.7)"
 - "Buyingreviews"
 - "Askingemployees,family,orpaidactors"
 citation: "AppleAppStoreReviewGuideline1.1.7;GooglePlayDeveloperProgramPolicyonRatings,Reviews,andUser-GeneratedContent."

 ethical_pattern:
 - "Triggerafteramomentofvalue"
 - "Pre-emptcomplaintswithavoluntaryin-appsupportchannelthatdoesNOTgatetheratingprompt"

7.3 Review Response

review_response:
 why:
 ranking: "Developerresponsesarevisible;signalactivemanagement."
 conversion: "Prospectiveusersreadresponsestonegativereviews."
 rating_recovery: "AppFollowbenchmark:5to15%ofusersupdateratingupafterathoughtfulresponse."
 pattern:
 structure: ["Acknowledgespecificissue", "Apologizewherewarranted(nounverifiedbugadmissions)", "Offerspecificnextstep", "Signasaperson"]
 tone: "Human,specific,accountable."
 timing: "Within7days;AppFollowtop-100medianisunder48hours."
 languages: "Respondinthelanguageofthereview."
 priority: "1-starfirst,2-starsecond,selectiveon4-5star."
 rating_decay:
 finding: "Reviewsolderthan12to24monthsdeeplydiscountedinbothstores."
 implication: "Anappwith100Kreviewsfrom5yearsagobut10inthelast30daysbehaveslikealow-velocityapp."
 citation: "LocalFalcon;SensorTowerreviewvelocitystudies."

7.4 Negative Review Recovery

When rating drops below 4.0 (iOS) or 3.8 (Android), conversion collapse risk.

negative_review_recovery:
 triage: ["Pulllast30daysof1-and2-starreviews", "Categorize:bugs,featurerequests,UX,content,monetization", "Identifydominantcategory"]
 fix_then_respond:
 - "Shipfixaddressingdominantcomplaint"
 - "Respondtoeachnegativereviewnotingthefix;askusertotrynewversion"
 - "Bumpversionconspicuously"
 reset_options:
 ios: "Resetappliestonewversiononly;cumulativestillincludeslegacy."
 android: "Noresetfeature;diluteviafreshpositivevelocity."
 flag_for_removal: "Bothstoresallowflaggingspam,off-topic,ordefamatoryreviews;successratevaries."

8. App Marketing Pages on the Web

The marketing page is the web URL that promotes the app to users arriving from Google, social, email, or direct paste. Must rank for app-name and feature queries, convert into store landings, deep-link into the app when installed, and feed schema for AI Overviews and citations.

8.1 Page Structure

app_marketing_page_structure:

 url:
 pattern: "/apps/[app-slug]/or/[app-slug]/"
 rule: "Stable.Donotversion;deep-linkrecordsdependonit."

 above_the_fold:
 - "Appname(H1)"
 - "One-linevalueproposition"
 - "AppStorebadge"
 - "GooglePlaybadge(bothpresent;missingplatformlabeled'Comingsoon'or'Notavailableon[platform]')"
 - "Heroimage"
 - "Starratingandreviewcount"

 body_content:
 - "Whattheappdoes(3to5paragraphs)"
 - "Keyfeatures(5to10bullets)"
 - "Howitworks(3to5steps)"
 - "Screenshotsgallery(3to6withcaptions)"
 - "Reviews(2to5best,linkedtostores)"
 - "FAQ(5to10:pricing,platforms,privacy,support,cancellation)"
 - "Aboutthedeveloper(1to2paragraphs,linkedtoOrganization)"
 rule: "Contentfirst.EverysectionininitialserverresponseHTML,notJS-injected.Seeframework-contentfirst.md."

 conversion_elements:
 primary_cta: "Bothstorebadgesinhero"
 secondary_cta: "Repeatedbadgesaftereachmajorsection"
 smart_app_banner: "iOSSafarimetatag(Section8.3)"
 qr_code_for_desktop: "QRopeningstorepageonuser'sphone"

 trust_signals: ["Starratinglinkedtostorereviews", "Presslogosifreal", "Privacyandterms", "Awardbadgesifrealandcurrent"]

8.2 Store Badges

Apple and Google publish official badge artwork. Use the official version.

<a href="https://apps.apple.com/us/app/example-app/id123456789">
 <img src="/img/app-store-badge.svg" alt="Download on the App Store" width="180" height="60">
</a>
<a href="https://play.google.com/store/apps/details?id=com.example.app">
 <img src="/img/google-play-badge.png" alt="Get it on Google Play" width="200" height="60">
</a>

Brand guidelines: Apple developer.apple.com/app-store/marketing/guidelines/; Google play.google.com/intl/en_us/badges/.

8.3 Smart App Banner (iOS Safari)

iOS Safari renders a native banner at the top if the meta tag is present. Shows app name, icon, rating, and "View" or "Open" depending on install state.

<meta name="apple-itunes-app" content="app-id=123456789, app-argument=https://example.com/path/to/content">

Rules:

  • app-id is the numeric App Store ID.
  • app-argument is the URL that opens inside the app via Universal Links (Section 9). If app installed, tapping opens app at that URL.
  • No Android equivalent. Android requires applinks: meta tags or a custom widget.

Citation: Apple Safari Web Content Guide on Smart App Banners; Branch and Adjust cross-platform smart banner documentation.

8.4 AppLinks Meta Tags (Cross-Platform)

The AppLinks spec (originally Facebook's, now broadly supported) defines OpenGraph-style meta tags declaring deep-link targets across platforms.

<meta property="al:ios:url" content="exampleapp://path/to/content">
<meta property="al:ios:app_store_id" content="123456789">
<meta property="al:ios:app_name" content="Example App">
<meta property="al:android:url" content="exampleapp://path/to/content">
<meta property="al:android:package" content="com.example.app">
<meta property="al:android:app_name" content="Example App">
<meta property="al:web:url" content="https://example.com/path/to/content">

8.5 The Hosting Layer

Marketing page lives on the client's own infrastructure, not a third-party CDN. For Joseph's agency stack: static HTML at /var/www/sites/[domain]/ on Bubbles, served via nginx. The page includes server-rendered HTML, schema, AppLinks and Smart App Banner meta tags, fetchable /.well-known/apple-app-site-association and /.well-known/assetlinks.json, plus standard SEO basics.

The nginx vhost must set proper Content-Type for the two well-known files:

location = /.well-known/apple-app-site-association {
 default_type application/json;
 add_header Cache-Control "public, max-age=3600";
}
location = /.well-known/assetlinks.json {
 default_type application/json;
 add_header Cache-Control "public, max-age=3600";
}

9. App Schema and Deep Linking

9.1 SoftwareApplication and MobileApplication Schema

Schema.org SoftwareApplication and its subtype MobileApplication declare the app as a structured entity. Enables rich results (price, rating, install count) and feeds AI entity extraction.

<script type="application/ld+json">
{
 "@context": "https://schema.org",
 "@type": "MobileApplication",
 "name": "Example App",
 "applicationCategory": "HealthApplication",
 "applicationSubCategory": "Meditation",
 "operatingSystem": "iOS, Android",
 "offers": {"@type": "Offer", "price": "0", "priceCurrency": "USD", "availability": "https://schema.org/InStock"},
 "aggregateRating": {"@type": "AggregateRating", "ratingValue": "4.7", "ratingCount": "12453", "bestRating": "5", "worstRating": "1"},
 "downloadUrl": ["https://apps.apple.com/us/app/example-app/id123456789", "https://play.google.com/store/apps/details?id=com.example.app"],
 "installUrl": ["https://apps.apple.com/us/app/example-app/id123456789", "https://play.google.com/store/apps/details?id=com.example.app"],
 "screenshot": ["https://example.com/img/screenshot-1.jpg", "https://example.com/img/screenshot-2.jpg", "https://example.com/img/screenshot-3.jpg"],
 "publisher": {"@type": "Organization", "name": "Example, Inc.", "url": "https://example.com"},
 "datePublished": "2024-03-15",
 "softwareVersion": "3.2.1"
}
</script>

Notes:

  • Use MobileApplication for native iOS/Android. SoftwareApplication for desktop or cross-platform. WebApplication for web-only PWAs. (schema.org/MobileApplication; Google Search Central Software App Schema).
  • applicationCategory uses schema.org enumerated values: HealthApplication, GameApplication, BusinessApplication, EducationalApplication, FinanceApplication, LifestyleApplication, MultimediaApplication, MusicApplication, NavigationApplication, PhotoApplication, ProductivityApplication, ShoppingApplication, SocialNetworkingApplication, SportsApplication, TravelApplication, UtilitiesApplication.
  • aggregateRating must be accurate. Falsified ratings risk manual action.
  • Integrate with the page's @graph so MobileApplication cross-references Organization and WebSite nodes (see framework-schema.md Section 4).

9.2 Apple Universal Links

Universal Links (since iOS 9, 2015) let https:// URLs open inside the native app when installed, or fall back to Safari when not.

universal_links_setup:

 capabilities:
 location: "Xcode>Project>SigningandCapabilities>AssociatedDomains"
 add: "applinks:example.com"

 aasa_file:
 path: "https://example.com/.well-known/apple-app-site-association"
 content_type: "application/json"
 https: "Required;noHTTPfallback."
 no_redirect: "Apple'srequestmusthita200directly."
 size_limit: "128KBuncompressed."
 example: |
 {"applinks": {"apps": [],
 "details": [{"appID": "ABCD1234EF.com.example.app",
 "paths": ["/path/to/content/*", "/another/*", "NOT /admin/*"]}]}}
 appID_format: "TeamID.BundleID(10-charAppleDeveloperTeamID)."
 paths_syntax: "Globpatterns;NOTprefixexcludes."

 validation:
 apple_validator: "search.developer.apple.com/appsearch-validation-tool/"
 curl_check: "curl-Ihttps://example.com/.well-known/apple-app-site-association"
 cache: "iOScachesAASAupto7days;forcerefreshbydeletingandreinstalling."

 source: "AppleDeveloperDocumentation:Supportinguniversallinksinyourapp."

9.3 Android App Links

Android App Links use the Digital Asset Links protocol. The assetlinks.json file declares which apps may handle URLs for a domain.

android_app_links_setup:

 manifest:
 location: "AndroidManifest.xml>Activity>intent-filter"
 example: |
 <intent-filter android:autoVerify="true">
 <action android:name="android.intent.action.VIEW" />
 <category android:name="android.intent.category.DEFAULT" />
 <category android:name="android.intent.category.BROWSABLE" />
 <data android:scheme="https" android:host="example.com" android:pathPrefix="/path" />
 </intent-filter>

 assetlinks_file:
 path: "https://example.com/.well-known/assetlinks.json"
 content_type: "application/json"
 example: |
 [{"relation": ["delegate_permission/common.handle_all_urls"],
 "target": {"namespace": "android_app",
 "package_name": "com.example.app",
 "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:..."]}}]
 sha256_source: "`keytool-list-v-keystore[keystore]`orPlayConsole>Setup>AppIntegrity."

 dynamic_app_links_2025:
 feature: "Android15(API35)+supportsDynamicAppLinks."
 declaration: "Path,query,fragmentmatchersinassetlinks.jsonitself;mergedwithmanifestatruntime."
 source: "AndroidDevelopersBlog:DynamicAppLinks,October2025."

 validation:
 google_tool: "developers.google.com/digital-asset-links/tools/generator"
 curl_check: "curl-Ihttps://example.com/.well-known/assetlinks.json"
 auto_verify: "android:autoVerify=truetriggersfetchoninstall."

 source: "GoogleDevelopersDigitalAssetLinks;AndroidDevelopersConfigurewebsiteassociations."

9.4 ITMS Scheme

Legacy itms-apps://itunes.apple.com/app/idXXXXXXXX opens App Store at the app page. Modern pattern: link https://apps.apple.com/...; Apple auto-routes to the App Store app on iOS, web App Store elsewhere.

9.5 Spotlight and Core Spotlight Indexing (iOS Apps)

Apps can index their own content into the device's local Spotlight index. Makes content searchable from iOS Spotlight even when the app is not open. Feeds Apple Intelligence app discovery (Section 11).

core_spotlight_indexing:

 apis:
 nsuseractivity: "Indexactivitiesasuserperformsthem(visitingpage,creatingcontent,viewingitems)."
 corespotlight: "Indexcontentprogrammaticallywithoutuservisit.Fordocuments,photos,persistentdata."
 web_markup: "WebURLswithmatchingschemacanalsobecrawledbyAppleforSpotlight."

 best_practice: "UsethesameidentifieracrossNSUserActivity,CoreSpotlight,andwebURL.Applededuplicatesbyidentifier;sameiteminmultipleAPIsranksstronger."

 privacy: "Indexison-device.Appledoesnotseethecontent."

 source: "AppleDeveloperDocumentation:CoreSpotlight;TechnicalNoteTN2416iOSSearchAPIBestPractices."

10. App Pack in Google SERPs

10.1 What App Pack Is

App Pack is a mobile-only SERP feature. Horizontal carousel of apps (icon, title, rating, install CTA) for install-intent queries. Mobile equivalent of Local Pack for apps. Citation: Search Engine Land "App Indexing and the New Frontier Of SEO" (2016).

10.2 When App Pack Appears

Triggers on:

  • Query contains "app", "download", "for iPhone", "for Android".
  • Query is a known app category (meditation, budgeting, habit tracker, ride share).
  • Historical install conversion from SERP is high.
  • User is on mobile.

Appearance rate varies by category. SERP-tracking platforms (AdvancedWebRanking, Semrush, Ahrefs) track App Pack but report only on tracked keyword sets; no published universal rate.

10.3 How to Win App Pack Inclusion

app_pack_inclusion:
 prerequisite_published: "Liveonatleastonestore;appsinreviewdonotappear."
 prerequisite_metadata_alignment: "Storetitleorcategoryalignswithquery."
 signal_install_velocity: "Recentinstallvelocityinrelevantcategory."
 signal_rating: "Higherstarratingfavored."
 signal_marketing_page_seo: "Well-rankedmarketingpageincreasesAppPackinclusionfortargetqueries."
 signal_appindex_legacy: "HistoricalGoogleAppIndexingsignalspersistinpart."
 practical_strategy:
 - "Optimizestoremetadatafortargetquery"
 - "Optimizemarketingpagefortargetquery"
 - "LinkmarketingpagetostoreURLs"
 - "ConfigureUniversalLinksandassetlinks.json"
 - "MonitorviaSemrush,Ahrefs,AccuRankerSERPfeaturesfilter"

10.4 Web Marketing Page Plus App Pack Coordination

When the same query produces both a marketing-page organic result and an App Pack inclusion, the combined SERP dominates visible area. Dual-surface play: rank marketing page AND win App Pack.


11. Apple Intelligence App Discovery and Spotlight

11.1 The 2025-2026 Surface

Apple Intelligence (on-device AI; iOS 18 late 2024, expanded through 2025) added app-discovery surfaces outside the App Store and Google. Device-side search and suggestion layer, powered by on-device models personalizing on user behavior.

apple_intelligence_app_discovery:

 spotlight_search:
 description: "Device-widesearch(swipedownonhome;Cmd+SpaceonMac)."
 indexes: "Apps,files,contacts,messages,calendar,in-appcontent(viaCoreSpotlight)."
 ai_layer: "Resultspersonalizedbyon-deviceAI;usagepatterns,time,location,recentactivity."
 scale: "Approximately700to900Mdailyusersglobally;85%ofiPhoneusersengageweekly(TechLila2026statistics)."

 siri_suggestions:
 description: "ProactivesuggestionsinLockScreen,Notifications,Spotlight."
 overlap: "80to90%samedataasSpotlight."

 app_store_today_tab:
 scale: "Approximately500Mweeklyusersbegindiscoveryhere(AppleDeveloperdocumentation)."
 ai_layer: "AI-generatedtagchips(betainiOS26)."
 featuring: "FeaturingNominationsinAppStoreConnect;2-weekminimumnotice."

 ai_generated_tags:
 description: "Tappablechipsgroupingappsbyinferredfunction('Meditation','SleepTracking')."
 status: "BetaiOS26developerbuildasofWWDC2025;notyetonpublicAppStore."
 source: "TechCrunchJune2025;AppleWWDC2025keynote."

 writing_tools_app_picks: "SomeflowssuggestappsduringAppleIntelligencedrafting,replying,summarizing."
 control_center_widget_suggestions: "SuggestedappsinControlCenterandWidgetGallery."

11.2 ASO Levers on Apple Intelligence Surfaces

apple_intelligence_aso_levers:
 spotlight_indexing: "ImplementCoreSpotlightandNSUserActivity(Section9.5)."
 app_store_metadata_quality: "AItagspullfrommetadata,screenshots,description,category.Precisemetadataleadstoaccuratetags."
 ai_tags_review: "Whenlive,auditandremoveinaccuratetagsinAppStoreConnectatlaunchandquarterly."
 featuring_nominations: "SubmitforTodaytabeditorialconsideration."
 category_choice: "PrimarycategorydrivesTodaytabplacement."
 cannot_influence: ["Personalizationweights", "SiriSuggestionsranking", "Spotlightrankingfromexternalcontent"]

11.3 Apple Intelligence x AIO Convergence

Apple Intelligence is an AI surface in the same sense as Google AI Overviews, ChatGPT, Claude, Perplexity, Gemini. The AI surface disciplines (framework-aicitations.md, framework-aioverviews.md) apply in modified form: citation surface is in-device, entity model is Apple's, input data is App Store metadata plus on-device indexing rather than the open web. The four pillars for the marketing page are unchanged. ASO for in-store and in-device surfaces is a sibling discipline that benefits from the same fundamentals: clear entity declaration, precise metadata, structured data, trust signals.


12. Common ASO Mistakes (Top 10 Anti-Patterns)

common_aso_mistakes:

 m1_keyword_stuffing_title:
 pattern: "Titleis'YourBrand:Meditation,Sleep,Calm,Yoga,Mindfulness'."
 why_bad: "ApplerejectsunderGuideline2.3(misleadingmetadata).Usersskipasspammy."
 fix: "Brandplus1to2keywords;subtitleforadditionalterms."

 m2_skipping_subtitle:
 pattern: "Subtitleblankorgenerictaglinelike'Thebestappever'."
 why_bad: "Wastes30charsequivalentinweighttothekeywordfield."
 fix: "Keyword-densereadabledescription:'Sleep,Meditate,RelaxDaily'."

 m3_keyword_field_repeats_title:
 pattern: "Titlehas'meditation';keywordfieldhas'meditation,meditate,meditations'."
 why_bad: "Title/subtitleindexedseparately;repetitionwastesthe100-charfield."
 fix: "Auditaftereachmetadatachange."

 m4_screenshots_without_captions:
 pattern: "Baredevicerenders,nocaptiontext."
 why_bad: "SinceJune2025AppleAI-extractscaptiontextasmetadata.Wastedrankingsignal."
 fix: "Captioneveryscreenshot;matchtorealkeywordswithconversionphrasing."

 m5_no_a_b_testing:
 pattern: "Screenshotsandiconsetatlaunch,neverupdated."
 why_bad: "AppTweak:quarterlyA/Btesterssee20to30%higherCVR."
 fix: "QuarterlyPPO(iOS)/SLE(Android)."

 m6_review_gating:
 pattern: "Asks'Areyouhappy?'thenonlypromptsSKStoreReviewControlleronyes."
 why_bad: "ViolatesAppleGuideline1.1.7andGooglePlayDeveloperPolicy.Removalrisk."
 fix: "Triggernativepromptunconditionallyaftervaluemoment;separatesupportchannelforcomplaints."

 m7_no_universal_links_no_assetlinks:
 pattern: "MarketingpagelinkstostoreURLsbutappdoesnothandledomainviaUniversalLinks/AppLinks."
 why_bad: "Installed-appuserslandonmarketingpageinsteadofintheapp."
 fix: "Implementboth;validate.well-knownfiles."

 m8_marketing_page_is_csr_spa:
 pattern: "Client-renderedReact/Vue;serverreturnsemptyshell."
 why_bad: "AIbots(GPTBot,ClaudeBot,PerplexityBot)cannotrender;pageinvisibletoAIcitation.AppPacksuffers."
 fix: "Server-render.Next.js,Astro,Hugo,plainHTML.Seeframework-contentfirst.md."

 m9_no_schema:
 pattern: "NoMobileApplicationorSoftwareApplicationschema."
 why_bad: "Norichresults;AIenginescannotextractappasstructuredentity."
 fix: "MobileApplicationin@graphcross-referencingOrganizationandWebSite.Validateatvalidator.schema.org."

 m10_ignoring_play_long_description:
 pattern: "200-wordPlaylongdescriptionwithnokeywordstrategy."
 why_bad: "GooglePlayindexeslongdescriptionforsearch."
 fix: "1500to3000chars;eachprimarykeyword2to3timesnaturally."

13. Audit Mode

13.1 In-Store Audit Rubric

# Criterion iOS Android
ASO1 Title uses brand plus 1 to 2 keywords; 30 chars used efficiently
ASO2 Subtitle (iOS) / short description (Android) keyword-dense; no overlap with title
ASO3 iOS 100-char keyword field: comma-separated, no spaces, singular, no repeats n/a
ASO4 Android long description: 1500 to 3000 chars, 2 to 3 reps per primary keyword n/a
ASO5 Icon: simple, high contrast, legible at 60x60
ASO6 At least 5 screenshots per device size on iOS; 5 to 8 on Android
ASO7 Screenshot caption text matches keyword strategy (post-June 2025 Apple AI extraction) n/a
ASO8 App preview video / promo video present
ASO9 Custom Product Pages configured for paid campaigns and segments n/a
ASO10 Custom Store Listings configured by country and audience n/a
ASO11 PPO test active or recent n/a
ASO12 SLE test active or recent n/a
ASO13 Rating above 4.3 (iOS) / 4.0 (Android)
ASO14 Review velocity at or above category median
ASO15 Recent reviews receive developer responses within 7 days
ASO16 SKStoreReviewController / In-App Review API triggered after value moment
ASO17 Crash rate under 1% (Xcode Organizer) n/a
ASO18 Crash under 1.09% AND ANR under 0.47% (Android Vitals) n/a
ASO19 Category selection aligns with core function
ASO20 Featuring nomination submitted at least once in last 12 months n/a

13.2 Web Coordination Layer Audit Rubric

# Criterion Pass/Fail
ASOW1 Marketing page at stable URL on client's own infrastructure
ASOW2 Server-rendered (content in first byte of HTML)
ASOW3 Clear primary CTA with both store badges above the fold
ASOW4 iOS Smart App Banner meta tag present
ASOW5 AppLinks meta tags for iOS, Android, and web
ASOW6 MobileApplication/SoftwareApplication schema in JSON-LD @graph
ASOW7 Schema includes aggregateRating, offers, screenshot, downloadUrl
ASOW8 apple-app-site-association at /.well-known/: 200, application/json, no redirects
ASOW9 assetlinks.json at /.well-known/: 200, application/json
ASOW10 Universal Links validated with Apple's validator
ASOW11 App Links validated with Google's Statement List Tester
ASOW12 App Pack visibility tracked for at least 3 target queries
ASOW13 CoreSpotlight or NSUserActivity indexing in iOS app
ASOW14 Marketing page in XML sitemap
ASOW15 Page 1 of Google for exact app name brand query
ASOW16 Marketing page passes Core Web Vitals on mobile
ASOW17 Compliant with framework-contentfirst.md (no JS-required content)

Score: 17 web layer plus 20 in-store layer, minus n/a items by platform. World-class ASO: 90%+ on applicable items.

13.3 First-90-Days Action Plan

first_90_days:
 day_0_to_7:
 - "Pullcurrentmetadata,assets,ratings,reviewsintointake"
 - "Runkeywordresearch(AppleSearchAds,PlayConsole,AppTweak/SensorTower)"
 - "Identifytop10targetkeywordsperplatform"
 - "Auditcompetitormetadatafortop3"
 day_8_to_30:
 - "Rewritetitle,subtitle,keywordfield(iOS);shortdescription(Android)"
 - "Writenewlongdescription(Android)withtargetkeywords"
 - "Designandshipnewscreenshotswithkeyword-alignedcaptions"
 - "Submitnewmetadataforreview"
 - "Buildorrefreshmarketingpage;shipschema,AppLinks,SmartAppBanner"
 - "Deployapple-app-site-associationandassetlinks.json"
 day_31_to_60:
 - "LaunchfirstPPO(iOS)/SLE(Android)oniconorfirstscreenshot"
 - "ConfigurefirstCPPs/CSLs"
 - "ImplementSKStoreReviewController/In-AppReviewAPI"
 - "ImplementCoreSpotlightindexing(iOS)"
 - "Setupreviewresponseworkflow"
 - "Submitfeaturingnominationforanupcomingproductmoment"
 day_61_to_90:
 - "Concludefirsttest;shipwinner"
 - "Launchsecondtestonnextpriorityelement"
 - "Add2to3additionalCPPs/CSLs"
 - "Refinekeywordperformance"
 - "AuditAppPackinclusion;refinemarketingpageifnotappearing"
 - "AuditAppleIntelligencesurfaces"
 - "Generatefirst90-dayreport"

14. Maintenance Schedule and Report Templates

14.1 Ongoing Cadence

aso_maintenance_cadence:
 weekly:
 - "Ratingandreviewvelocity"
 - "Respondto1-and2-starwithin7days"
 - "MonitorAppPackandSpotlightvisibilityfortopqueries"
 - "Crashrate(XcodeOrganizer)andAndroidVitals"
 monthly:
 - "Keywordrankingdeltas"
 - "Competitormetadatachanges"
 - "PPO/SLE;shipwinners;queuenexttest"
 - "DownloadsandCVRnumbers"
 - "Refreshfeaturingnominationsifproductmoment"
 quarterly:
 - "Fullmetadataaudit(title,subtitle,keywordfield,descriptions)"
 - "Refreshscreenshotswithnewfeatureorseasonalangle"
 - "Refreshpreviewvideoifolderthan6to9months"
 - "Re-runkeywordresearch"
 - "AuditAppleAI-generatedtagswhenpublic"
 - "AuditUniversalLinksandassetlinks.json"
 - "ReviewmarketingpageSEO(CoreWebVitals,schema,content)"
 annually:
 - "FullASOauditagainstSection13rubric"
 - "Strategiccompetitivepositionreview"
 - "Re-evaluateprimarycategoryifappfunctiondrifted"
 - "Refreshiconifolderthan18to24monthsandtrendshifted"

14.2 Monthly Report Template

aso_monthly_report:
 period: "[YYYY-MM-DD]to[YYYY-MM-DD]"
 downloads:
 ios_new: 0
 android_new: 0
 delta_vs_prior: ""
 conversion_rate:
 ios_cvr_pct: 0.0 # store as percentage; compare to category benchmark
 android_cvr_pct: 0.0
 ratings:
 ios_rating: 0.0
 android_rating: 0.0
 new_reviews_ios: 0
 new_reviews_android: 0
 response_rate_pct: 0
 keyword_ranking:
 tracked_top_10_ios: "NofN"
 tracked_top_10_android: "NofN"
 notable_movements: []
 tests:
 active_or_concluded: []
 web_marketing_page:
 sessions: 0
 branded_query_rank: 0
 non_branded_query_rank: 0
 app_pack_visibility: ""
 action_items_next_period: []

14.3 Quarterly Report Template

aso_quarterly_report:
 quarter: "Q[N][YYYY]"
 executive_summary: "" # two to four sentence narrative
 downloads_trend:
 quarter_total: 0
 prior_quarter: 0
 yoy_delta_pct: 0.0
 monthly_breakdown: []
 conversion_rate_trend:
 ios_q_minus_1: 0.0
 ios_q: 0.0
 android_q_minus_1: 0.0
 android_q: 0.0
 ratings_trend:
 ios_q_minus_1: 0.0
 ios_q: 0.0
 android_q_minus_1: 0.0
 android_q: 0.0
 test_outcomes: [] # list of {test_name, winner_shipped, lift_pct}
 keyword_strategy_update:
 keywords_added: 0
 keywords_retired: 0
 ranking_distribution: ""
 web_marketing_page:
 organic_sessions_qoq_delta_pct: 0.0
 schema_audit: ""
 universal_links_status: ""
 assetlinks_status: ""
 core_web_vitals: ""
 goals_next_quarter: []

End of Framework Document

Companion documents:

Phase 2 siblings (frameworks covering previously uncovered surfaces): video, voice, visual search, app stores (this framework), the broader AI surface set.


From the ThatDevPro Engine Optimization framework library. Studio: ThatDevPro (SDVOSB veteran-owned web + AI engineering). Sister property: ThatDeveloperGuy. Source: https://www.thatdevpro.com/insights/framework-aso/.