Technical SEO 10 min read

App Indexing SEO: Getting Your App Content in Search Results

Learn how to get your app content indexed by Google. Complete guide to app indexing, deep linking, and Firebase App Indexing for better app visibility.

By Rankture Team
App Indexing SEO: Getting Your App Content in Search Results

App indexing allows Google to surface your app content in search results. When implemented correctly, users can tap search results to open specific content directly in your app.

Here’s how to get your app indexed.

What Is App Indexing?

App indexing connects your app content to Google Search:

Benefits

How App Indexing Works

The Connection

  1. Website has content - example.com/product/123
  2. App has corresponding screen - Product screen for item 123
  3. Deep link connects them - myapp://product/123
  4. Google understands the link - Shows app option in results
  5. User taps result - Opens directly in app

Prerequisites

Setting Up App Indexing

Android (Intent Filters):

<!-- AndroidManifest.xml -->
<activity android:name=".ProductActivity">
  <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" />
    
    <!-- HTTP URLs -->
    <data android:scheme="https" 
          android:host="example.com" 
          android:pathPrefix="/product" />
  </intent-filter>
</activity>

iOS (Universal Links):

// apple-app-site-association
{
  "applinks": {
    "apps": [],
    "details": [{
      "appID": "TEAMID.com.example.app",
      "paths": ["/product/*", "/category/*"]
    }]
  }
}

Step 2: Verify Domain Ownership

Android App Links:

// /.well-known/assetlinks.json
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.app",
    "sha256_cert_fingerprints": ["YOUR_SHA256_FINGERPRINT"]
  }
}]

iOS Universal Links: Host apple-app-site-association at: https://example.com/.well-known/apple-app-site-association

Step 3: Add App Markup to Website

On web pages with app equivalents:

<head>
  <!-- iOS -->
  <meta name="apple-itunes-app" content="app-id=123456789, app-argument=https://example.com/product/123">
  
  <!-- Android -->
  <link rel="alternate" href="android-app://com.example.app/https/example.com/product/123">
</head>

Step 4: Connect in Search Console

  1. Open Google Search Console
  2. Go to Settings > Associations
  3. Add your app
  4. Verify ownership

Firebase App Indexing

Firebase provides a complete app indexing solution:

Setup

// Android
implementation 'com.google.firebase:firebase-appindexing:20.0.0'

Index App Content

// Index a product
val productIndex = Indexables.newSimple(
    "Product Name",
    "https://example.com/product/123"
)

FirebaseAppIndex.getInstance().update(productIndex)

Log User Actions

// Log when user views content
FirebaseUserActions.getInstance().start(
    Actions.newView("Product Name", "https://example.com/product/123")
)

// End action when user leaves
FirebaseUserActions.getInstance().end(action)

Benefits of Firebase

Deep Linking Best Practices

URL Structure

Mirror your website URLs in app:

Web URLApp Deep Link
example.com/product/123myapp://product/123
example.com/category/shoesmyapp://category/shoes
example.com/user/profilemyapp://user/profile

Handle Missing Content

// Check if content exists
val productId = intent.data?.lastPathSegment

if (productId == null || !productExists(productId)) {
    // Fallback to home or show error
    openHomeScreen()
    return
}

openProductScreen(productId)

Deferred Deep Linking

For users without the app installed:

// Firebase Dynamic Links
val dynamicLink = FirebaseDynamicLinks.getInstance()
    .createDynamicLink()
    .setLink(Uri.parse("https://example.com/product/123"))
    .setDomainUriPrefix("https://example.page.link")
    .setAndroidParameters(
        DynamicLink.AndroidParameters.Builder()
            .build()
    )
    .setIosParameters(
        DynamicLink.IosParameters.Builder("com.example.app")
            .build()
    )
    .buildDynamicLink()

Flow:

  1. User without app taps link
  2. Goes to app store
  3. Installs app
  4. Opens to intended content

Testing App Indexing

Android Debug Bridge

# Test deep link
adb shell am start -a android.intent.action.VIEW \
  -d "https://example.com/product/123" \
  com.example.app

Search Console URL Inspection

  1. Enter your website URL
  2. Check “Google app” section
  3. Verify app links are detected

Google App Preview

Search for your content on mobile:

Fetch as Google

Use Search Console to fetch pages:

Common App Indexing Issues

Problem: Google can’t verify domain ownership.

Fix:

# Test assetlinks.json
curl https://example.com/.well-known/assetlinks.json

2. Intent Filter Errors

Problem: App not opening from search.

Fix:

<!-- Ensure autoVerify is true -->
<intent-filter android:autoVerify="true">
  <!-- ... -->
</intent-filter>

3. Content Mismatch

Problem: Web and app content don’t match.

Fix:

Common issues:

Fix:

App Indexing SEO Tips

1. Ensure Content Parity

App and web should have:

2. Structure URLs Consistently

Web:  example.com/product/blue-shoes-123
App:  myapp://product/blue-shoes-123

3. Index Important Screens

Focus on:

4. Handle App-Only Content

For content only in app:

5. Monitor Performance

Track in Firebase/Search Console:

When You Don’t Have a Website

You can still get app content indexed:

// Index app-only content
val content = Indexables.newSimple(
    "Exclusive App Content",
    "android-app://com.example.app/content/123"
)

// Set metadata
content.setDescription("Description of content")
content.setImage("https://example.com/image.jpg")

FirebaseAppIndex.getInstance().update(content)

App Actions

Enable voice search for your app:

<!-- actions.xml -->
<actions>
  <action intentName="actions.intent.ORDER_MENU_ITEM">
    <fulfillment urlTemplate="myapp://order?item={menuItem.name}">
      <parameter-mapping urlParameter="menuItem.name" 
                        intentParameter="menuItem.name" />
    </fulfillment>
  </action>
</actions>

Checklist

Setup

Content

Testing

Monitoring


Related Resources:

Tags:

app indexing mobile seo deep linking firebase

Share this article:

Ready to improve your SEO?

Get a free SEO audit and see exactly what needs fixing on your site

Start Free Audit