Реализация App Indexing для Android-приложения
App Indexing — механизм, позволяющий Google индексировать контент внутри Android-приложения и показывать его в результатах поиска. Пользователь ищет в Google — видит результат с deep link в ваше приложение, тапает — попадает сразу на нужный экран. Если приложение не установлено — переход на веб-версию.
Технически это связка двух вещей: App Links (верификация домена для надёжных deep link) и Firebase App Indexing SDK (индикация активности для персональных результатов поиска).
App Links и верификация домена
Без App Links Android показывает disambiguation dialog («Открыть через...»). С App Links система сразу открывает ваше приложение, минуя диалог.
Манифест:
<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="yourdomain.com" android:pathPrefix="/products/" />
</intent-filter>
android:autoVerify="true" запускает верификацию при установке: система обращается к https://yourdomain.com/.well-known/assetlinks.json. Если файл недоступен или некорректен — верификация провалится, диалог вернётся.
assetlinks.json должен содержать SHA-256 fingerprint сертификата подписи APK. Для debug и release — разные сертификаты. При использовании Play App Signing нужен fingerprint из Google Play Console, а не локального keystore.
Частая ошибка: файл assetlinks.json отдаётся с Content-Type: text/plain вместо application/json, или закрыт авторизацией, или редиректит с www. Android верификация не следует редиректам.
Firebase App Indexing SDK
FirebaseAppIndex.getInstance(context).update(
Indexable.Builder("Article")
.setName(article.title)
.setUrl("https://yourdomain.com/articles/${article.id}")
.setDescription(article.summary)
.put("keywords", article.tags.joinToString(","))
.build()
)
setUrl() — это же URL что в App Links. Именно его Google индексирует и показывает в поиске.
Индексируем при каждом просмотре контента пользователем. Для пакетной индексации — в WorkManager задаче при первом запуске или обновлении контента. Не индексируем весь каталог сразу в onCreate() — это замедляет запуск.
App Indexing History. FirebaseUserActions.getInstance(context).start(action) / end(action) — логирует действия пользователя для персональных Siri (Google Assistant) предложений. Action.Builder(Action.Builder.VIEW_ACTION).setObject(title, url). Start — при открытии контента, End — при закрытии.
Обработка deep link
class ArticleActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
handleIntent(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleIntent(intent)
}
private fun handleIntent(intent: Intent) {
val action = intent.action
val data = intent.data
if (Intent.ACTION_VIEW == action && data != null) {
val articleId = data.lastPathSegment
viewModel.loadArticle(articleId)
}
}
}
onNewIntent нужен если Activity запущена с launchMode="singleTop" или singleTask — иначе повторный deep link не обработается.
Web vs App: связка контента
Для корректной индексации Google нужно, чтобы контент по URL в App Links совпадал с контентом на веб-странице. Страница должна содержать meta-теги:
<link rel="alternate" href="android-app://com.yourapp/https/yourdomain.com/articles/42">
Без этой связки Google может проиндексировать веб-версию, но не знать о приложении.
Тестирование
adb shell am start -a android.intent.action.VIEW \
-d "https://yourdomain.com/products/123" com.yourapp
Проверка верификации App Links: adb shell pm get-app-links --user cur com.yourapp — должно показать verified для вашего домена.
Google Search Console → Mobile Usability → App Indexing показывает статус индексации.
Сроки
App Links + базовое App Indexing: 2–3 недели. Полная интеграция с Firebase App Indexing, пакетной индексацией, Google Assistant actions: 4–7 недель. Стоимость зависит от объёма контента и сложности deep link схемы.







