跳到正文
DEV Community· MrAdex77·· 3 小時前AI 評分53

開發者 ASO 指南:不買廣告也能增加應用程式用戶

ASO for Developers: Get App Users Without Paying for Ads

AI 導讀

這篇開發者 ASO 指南説明如何透過商店搜尋關鍵詞、上架資料和排名追蹤,改善應用程式在 App Store 與 Google Play 的搜尋曝光和轉換,並建議先做好 ASO 再投放廣告。

正文

You can ship a solid app, pass review, and still watch the downloads counter sit in single digits. In December 2025 a developer posted on the Apple Developer Forums that their app had about 40 downloads two months after launching on both stores, even after a new icon and new screenshots (Apple Developer Forums). A reply in the same thread said Apple Ads hadn't produced a single download for them either.

Before you buy installs, fix how the stores find your app. That's App Store Optimization (ASO), and every part of it can be done for free, a lot of it with a few lines of code. This post covers the playbook, two Node snippets you can run today, and the open-source ASO tool I maintain.

TL;DR

  • Apple says 70% of App Store visitors use search to discover apps (2022 data). Your metadata decides whether you show up in those searches.
  • The App Store indexes a 30-character name, a 30-character subtitle and a private 100-character keyword field. Google Play indexes a 30-character title, an 80-character short description and a 4,000-character description.
  • New apps win long, specific phrases first. On 2026-10-17 the top US result for "habit tracker" in Apple's iTunes Search API had 148,007 ratings, while the #2 result for "habit tracker for couples" had 4.
  • Track your rank every day down to position 200. A new app starts deep in the results, and a top-50 check shows nothing while it climbs.
  • Buy ads after your listing ranks and converts. Apple Ads uses the same metadata to judge relevance.

Why not start with paid ads?

Paid installs cost money every time and stop when the budget does. SplitMetrics put the average Apple Ads cost per acquisition at $3.76 in its 2025 campaign data, $13.28 for finance apps and $19.74 for sports apps (SplitMetrics, September 2026). At the average, 1,000 installs cost $3,760, and the next 1,000 cost the same again.

Ads also depend on the work ASO does. Apple's help pages say "your app title, descriptions, and keywords are all considerations Apple Ads uses to assess your app's relevance for specific search queries" (Apple Ads Help). And if people tap your ad and bounce off a weak page, you paid for taps that never became installs.

Ads do have a place. Apple reports tap-through install rates above 60% for ads at the top of search results (Apple Ads, November 2024 to October 2025). Once your listing ranks for a few phrases and converts, a small budget is a good way to test new keywords or push a launch.

What is App Store Optimization?

App Store Optimization is the practice of improving how an app ranks and converts in App Store and Google Play search. It covers which keywords you target, where you put them in your store metadata, how your listing compares with competing apps, and the ratings, icon and screenshots that turn a search result into an install.

Search is the main way people find apps. Apple says 70% of App Store visitors use search to discover apps and almost 65% of downloads happen directly after a search (Apple Ads, figures from 2022). Apple's 2025 Transparency Report lists 2,172,472 apps on the App Store.

Apple describes its ranking inputs as "text relevance (matches for your app's title, subtitle, keywords, and primary category), as well as user behavior (downloads, ratings and reviews, and more)" (App Store search). Google says Play ranks apps on "a combination of ratings, reviews, downloads, and other factors" (Play Console Help). Text relevance is the part you control on day one.

Which store fields count for search?

Field App Store Google Play
App name or title 30 characters, indexed 30 characters, indexed
Subtitle 30 characters, indexed Doesn't exist
Keyword field 100 characters, private, indexed Doesn't exist
Short description Doesn't exist 80 characters
Full description Not in Apple's list of search inputs Up to 4,000 characters
Promotional text Apple says it doesn't affect ranking Doesn't exist

Sources: Apple's Creating your product page, App Store search and Platform version information; Google's Create and set up your app.

Rules for the App Store keyword field

Apple's guidance for the field (Creating your product page):

  • Separate keywords with commas and no spaces.
  • Don't repeat words from your app name, subtitle or category.
  • Don't add plurals of words you already use in singular form.
  • Leave out category names, filler words like "the" and the word "app".
  • Leave out competitors' app names and trademarked terms. Apple lists them as reasons for rejection.

Here's a made-up but very typical field for an app named "Habit Tracker: Daily Goals" with the subtitle "Build routines that stick", run through AsoBeast's free keyword field checker:

Before, 83 of 100 characters:
habit tracker, daily habits, the best app, goals, routine, routines, free, reminder

After, 8 of 100 characters:
reminder

Spaces after commas, filler words, words already in the name and subtitle, and plurals of words already used took up 75 characters. Use the space for phrases you don't rank for yet.

The AsoBeast keyword field checker flagging five issues in a sample keyword field and freeing 75 characters.

Rules for Google Play

Google Play has no keyword field, so your phrases go into the title, short description and description. Google's advice is to "give an overview of your app or game using everyday language, not a list of keywords" (Best practices for your store listing). Its metadata policy says to "avoid using repetitive or unrelated keywords or references" and bans ranking claims such as "#1" in the title, icon or developer name (Metadata policy).

How do you find keywords a new app can win?

Collect 30 to 50 candidate phrases, then keep the ones that real people search where the current top results look beatable.

Store autocomplete is the cheapest source of real search phrases. On Google Play you can read it with @mradex77/google-play-scraper, the scraper from my Stackademic post on scraping Google Play:

import { suggest } from '@mradex77/google-play-scraper';

for (const term of ['habit tracker', 'habit tracker for']) {
  const suggestions = await suggest({ term });
  console.log(`${term}: ${suggestions.join(', ')}`);
}

Output on 2026-10-17:

habit tracker: habit tracker, habit tracker free, habit tracker app, habit tracker widget, habit tracker free app
habit tracker for: habit tracker for adhd, habit tracker for couples, habit tracker for free, habit tracker for study, habit tracker for students

Ending a seed with "for" or another preposition pulls out the audience-specific phrases. Check those next, because the apps ranking for them can be small. I looked up the top App Store results in the US for two of these phrases through Apple's iTunes Search API on the same day:

  • "habit tracker": the #1 app had 148,007 ratings, and the #4 had 764,669.
  • "habit tracker for couples": the #2 app had 4 ratings, and the #4 had none.

Apple gives the same advice in its own search guide. Popular terms "are highly competitive", especially for newer or smaller apps, while less common terms bring less traffic and less competition (App Store search). Start where an app with 4 ratings can rank, and move to the head terms once your ratings and downloads grow.

Two more sources are worth a pass: the names and subtitles of the top 10 apps for your main phrase, and reviews, yours and your competitors'. People describe an app in the words they search with.

How do you check your App Store rank in code?

Apple's public iTunes Search API returns up to 200 apps for a search term, which is enough for a rank check. This needs Node 22 or newer and no dependencies:

const [appId, term, country = 'us'] = process.argv.slice(2);

const url = new URL('https://itunes.apple.com/search');
url.search = new URLSearchParams({ term, country, entity: 'software', limit: '200' });

const { results } = await (await fetch(url)).json();
const position = results.findIndex((app) => String(app.trackId) === appId) + 1;

console.log(position ? `#${position} for "${term}" in ${country.toUpperCase()}` : `Not in the top ${results.length}`);
$ node rank.mjs 570060128 "learn spanish" us
#1 for "learn spanish" in US
$ node rank.mjs 570060128 "spanish vocabulary" de
#10 for "spanish vocabulary" in DE

The app id is the number after id in your App Store URL (570060128 is Duolingo). Keep the request rate low: Apple documents the Search API limit as "approximately 20 calls per minute (subject to change)", which is why AsoBeast's free rank tracker checks at most 10 keywords at a time. The API returns iPhone apps, and a search on your own phone can differ because Apple Ads results and your history change what you see.

Run it every day and store the result, and check all 200 positions. A new app usually first shows up far down the list. With a top-50 check you'd see "not ranked" while the app climbs from 180 to 60, and conclude that nothing worked.

If you'd rather not write a cron job, AsoBeast's free App Store keyword rank tracker does the same check in your browser for up to 10 keywords in any of 175 countries, with no signup.

How do you research competitors?

Your competitors are whoever holds the top 10 for your target phrases, which may not be the apps you had in mind. For each, note the name and subtitle, the rating count and the date of the last update. Phrases where they rank and you don't are gaps. Phrases where nobody strong ranks are openings.

Keep watching them. A competitor that rewrites its title or subtitle may be going after a new keyword, and you can follow its rank on that phrase for a few weeks without spending one of your own releases on the experiment. Their one- and two-star reviews tell you what to promise in your screenshots.

AsoBeast's metadata change timeline showing a competitor's title change with the before and after values.

How should you ship and measure ASO changes?

Treat the first update as the baseline. Clean up the keyword field and put your main phrase in the name, subtitle or title in one release, because wasted characters cost you every day they stay. After that, change one field per release and wait about two weeks before you judge it. Change three fields at once and you won't know which one moved your rankings.

On the App Store, the keyword field sits on your version page in App Store Connect, so new keywords ship with a version you submit for review. On Google Play, listing edits can go through review too.

Track three numbers: your daily rank for each target phrase, installs from search, and the conversion rate from page view to install. In App Store Connect, App Analytics splits downloads by source, and App Store Search is one of them.

Where do keyword installs show up in Google Play Console?

Under "Google Play explore". Play Console's "Google Play search" source counts only people who searched for your app's name or a closely associated brand. Generic searches like "racing game" and taps on autocomplete suggestions count as explore, and the Search term dimension shows what people typed (Play Console Help).

How do you turn rankings into installs?

Once you rank, the icon, the first screenshots and the rating decide whether people install. Both stores give you the tools for free:

AsoBeast: the open-source ASO tool I maintain

The snippets above are fine for ten keywords in one country. AsoBeast does it daily for hundreds of keywords across countries, in both stores, and keeps the history. It's an App Store Optimization tool for the App Store and Google Play: it tracks keyword rankings daily, watches competitors and reviews, and turns it all into a to-do list ranked by impact. I wanted that workflow without paying per keyword or sending my keyword list to a vendor, so the whole thing is AGPL-3.0 with no open core.

GitHub logo AsoBeast / asobeast

Open source, self-hosted App Store Optimization toolkit for the Apple App Store and Google Play.

What is AsoBeast?

AsoBeast is an App Store Optimization (ASO) tool and keyword rank tracker for the Apple App Store and Google Play. It imports a listing, tracks keyword rankings daily to a depth of 200, watches competitors, reviews and metadata, and turns that history into a prioritized queue of ASO work. This repository is the free, open source edition that you run on your own server, and the hosted service at asobeast.com runs the same code.

Every store request runs on the machine hosting AsoBeast as an ordinary public search or page request, so Apple and Google see each…

What it does in v1.11.0:

  • Imports an App Store or Google Play link and checks its keywords daily to position 200, in any of 175 App Store storefronts and 225 Google Play countries. One search per keyword covers your app and all of its competitors.
  • Scores keyword popularity and difficulty, shows where each number comes from, and suggests keywords from your metadata, search results, similar apps, competitors and reviews.
  • Finds competitors in live search results, lists keyword gaps and records the title, subtitle and description changes it detects.
  • Syncs reviews and rating history and groups reviews into themes.
  • Runs an Action Center: fifteen deterministic rules read the stored history and produce items like "Push 'make memes' from #12 into the top 10", each with its evidence and a check that the fix worked. AI is optional and never invents or reorders an action.
  • Ships a REST API and an MCP server that reads by default, so Claude Code, Claude Desktop or Cursor can query your rankings.

The AsoBeast dashboard with an Action Center list, keyword climbers and fallers, app visibility charts and recent competitor changes.

The stack is TypeScript throughout: NestJS, Prisma, PostgreSQL 18, BullMQ, Redis 8 and Next.js, in a pnpm and Turborepo monorepo. The Google Play side runs on the same @mradex77/google-play-scraper as the snippet above. There's no telemetry, and apart from the store searches themselves, nothing leaves your server unless you turn on an integration such as webhook alerts or email.

To run it, you need Docker with Compose and roughly 2.5 GB of memory. This uses the published images, with no clone or build:

curl -fsSLO https://raw.githubusercontent.com/AsoBeast/asobeast/main/docker-compose.pull.yml
printf 'POSTGRES_PASSWORD=%s\nAUTH_SECRET=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
chmod 600 .env
docker compose -f docker-compose.pull.yml up -d --wait

Open http://localhost:3001, create the owner account (registration closes after that), and import a store link. Tracking starts right away. The quickstart covers the rest, including a one-click Railway deploy. There's also a hosted version at asobeast.com that runs the same code, if you'd rather not run a server.

It has limits, and the README lists them. Popularity and difficulty are estimates built from public store data. The stores' rate limits, not your hardware, cap how many keyword markets one instance can track. Backups and upgrades are your job when you self-host.

FAQ

Is ASO free?

The work is. App Store Connect and Google Play Console analytics and listing tests are free, the iTunes Search API and store autocomplete are public, and open-source tools like AsoBeast are free to self-host. Paid ASO tools save time once you track hundreds of keywords in many countries.

How long does ASO take to work?

A metadata change goes live with your next approved App Store version, or once Google reviews your listing update. Rankings move over the following weeks. Give each change about two weeks before you judge it.

Should I run Apple Ads at launch?

Only once the listing converts. Apple judges ad relevance from your title, description and keywords, so ASO comes first either way. After that, ads are a good way to test a phrase before you put it in your title.

Your first hour

  1. Run suggest() on your main phrase with "for", "with" and "without" appended, and write down 30 phrases.
  2. Check your rank for the ten most relevant ones with the snippet or the free rank tracker.
  3. Paste your keyword field into the keyword field checker and fill the characters it frees.

If AsoBeast saves you an ad budget, a star on GitHub helps other developers find it, and issues and pull requests are welcome.

來源:DEV Community · dev.to