Getting app indexing right can improve mobile user experience, drive higher engagement and lead to better conversions. Google's Firebase App Indexing gets your app into Google mobile search results, whether your app is installed on a device or not.
This session takes a deep dive into the technical implementation of the Firebase App Indexing and APIs. You'll hear case studies demonstrating the results you can achieve by implementing these techniques and learn about common pitfalls and errors you can expect and how to avoid them.
1. #SMX #23A2 @goutaste
Emily Grossman, Director of App Strategy at MobileMoxie
What's New With
Google Firebase
App Indexing
2. #SMX #23A2 @goutaste
Use Impact Visuals Above, Move Presentation Title As Needed
TITLE SLIDE ALTERNATIVE LAYOUT
w/ *EXAMPLE* IMAGE
(SWAP IN YOUR OWN AS NEEDED)
App Indexing
Promised Benefits
3. #SMX #23A2 @goutaste
Personal
Content
Autocomplete
Install Buttons
Rankings
Boost
Deep Links to
App Content
Rich Search
Results (icons+)
Personal & private content can be indexed in
Android On-Device Search
Android deep links appear in Autocomplete
In Google app based on engagement signals
Install buttons can appear on web results
when app is not installed; improve acquisition
App &Webpage rank as a pair;
Pair gets rankings boost for implementing & for API
Search Results link to app instead of website
(when installed)
Search Results get app icon; increase CTR
How App Indexing Is Supposed to Benefit Publishers
4. #SMX #23A2 @goutaste
Personal
Content
Autocomplete
Install Buttons
Rankings
Boost
Deep Links to
App Content
Rich Search
Results (icons+)
Personal & private content can be indexed in
Android On-Device Search
Android deep links appear in Autocomplete
In Google app based on engagement signals
Install buttons can appear on web results
when app is not installed; improve acquisition
App &Webpage rank as a pair;
Pair gets rankings boost for implementing & for API
Search Results link to app instead of website
(when installed)
Search Results get app icon; increase CTR
Which Benefits Have Changed
ANDROID ONLY
5. #SMX #23A2 @goutaste
Personal
Content
Autocomplete
Install Buttons
Rankings
Boost
Deep Links to
App Content
Rich Search
Results (icons+)
Personal & private content can be indexed in
Android On-Device Search
Android deep links appear in Autocomplete
In Google app based on engagement signals
Install buttons can appear on web results
when app is not installed; improve acquisition
App &Webpage rank as a pair;
Pair gets rankings boost for implementing & for API
Search Results link to app instead of website
(when installed)
Search Results get app icon; increase CTR
Which Benefits Have Changed
VOID IF AMP ON SAME URL
ANDROID ONLY
6. #SMX #23A2 @goutaste
Personal
Content
Autocomplete
Install Buttons
Rankings
Boost
Deep Links to
App Content
Rich Search
Results (icons+)
Personal & private content can be indexed in
Android On-Device Search
Android deep links appear in Autocomplete
In Google app based on engagement signals
Install buttons can appear on web results
when app is not installed; improve acquisition
App &Webpage rank as a pair;
Pair gets rankings boost for implementing & for API
Search Results link to app instead of website
(when installed)
Search Results get app icon; increase CTR
Which Benefits Have Changed
ANDROID ONLY (?)
VOID IF AMP ON SAME URL
ANDROID ONLY
7. #SMX #23A2 @goutaste
Personal
Content
Autocomplete
Install Buttons
Rankings
Boost
Deep Links to
App Content
Rich Search
Results (icons+)
Personal & private content can be indexed in
Android On-Device Search
Android deep links appear in Autocomplete
In Google app based on engagement signals
Install buttons can appear on web results
when app is not installed; improve acquisition
App &Webpage rank as a pair;
Pair gets rankings boost for implementing & for API
Search Results link to app instead of website
(when installed)
Search Results get app icon; increase CTR
Which Benefits Have Changed
ONLY ON HOME SCREEN/ PAGE
ANDROID ONLY (?)
VOID IF AMP ON SAME URL
ANDROID ONLY
8. #SMX #23A2 @goutaste
Personal
Content
Autocomplete
Install Buttons
Rankings
Boost
Deep Links to
App Content
Rich Search
Results (icons+)
Personal & private content can be indexed in
Android On-Device Search
Android deep links appear in Autocomplete
In Google app based on engagement signals
Install buttons can appear on web results
when app is not installed; improve acquisition
App &Webpage rank as a pair;
Pair gets rankings boost for implementing & for API
Search Results link to app instead of website
(when installed)
Search Results get app icon; increase CTR
Which Benefits Have Changed
NO CHANGE
ONLY ON HOME SCREEN/ PAGE
ANDROID ONLY (?)
VOID IF AMP ON SAME URL
ANDROID ONLY
9. #SMX #23A2 @goutaste
Personal
Content
Autocomplete
Install Buttons
Rankings
Boost
Deep Links to
App Content
Rich Search
Results (icons+)
Personal & private content can be indexed in
Android On-Device Search
Android deep links appear in Autocomplete
In Google app based on engagement signals
Install buttons can appear on web results
when app is not installed; improve acquisition
App &Webpage rank as a pair;
Pair gets rankings boost for implementing & for API
Search Results link to app instead of website
(when installed)
Search Results get app icon; increase CTR
Which Benefits Have Changed
OUT OF BETA (YAY!)
NO CHANGE
ONLY ON HOME SCREEN/ PAGE
ANDROID ONLY (?)
VOID IF AMP ON SAME URL
ANDROID ONLY
10. #SMX #23A2 @goutaste
On the Horizon: ‘Android Instant Apps’
Run Android Apps without
installation
Currently in limited release
Built off the same deep linking
framework as App Indexing
11. #SMX #23A2 @goutaste
Use Impact Visuals Above, Move Presentation Title As Needed
TITLE SLIDE ALTERNATIVE LAYOUT
w/ *EXAMPLE* IMAGE
(SWAP IN YOUR OWN AS NEEDED)
App Indexing
Implementation
Changes
12. #SMX #23A2 @goutaste
App Indexing Process – Until Fall of 2016
Support HTTP URLs
(HTTP URLs + Digital Asset Links File)
App Indexing API
Test & Report
(Many Tools + Search Console)
Support Universal Links
(HTTP URLs + App Site Association File)
App Indexing Pod
Test
(New Tool! But no Search Console)
ANDROID iOS
13. #SMX #23A2 @goutaste
App Indexing Process – After Fall of 2016
Support HTTP URLs
(HTTP URLs + Digital Asset Links File)
App Indexing API
Test & Report
(Many Tools + Search Console)
Support Universal Links
(HTTP URLs + App Site Association File)
App Indexing Pod
Test
(New Tool! But no Search Console)
Migrate To new API Version 10 or higher
Add Personal/zed & private Content
This still exists but is kinda irrelevant
ANDROID iOS
14. #SMX #23A2 @goutaste
Use Impact Visuals Above, Move Presentation Title As Needed
TITLE SLIDE ALTERNATIVE LAYOUT
w/ *EXAMPLE* IMAGE
(SWAP IN YOUR OWN AS NEEDED)
Step-By-Step
15. #SMX #23A2 @goutaste
App Indexing Process – After Fall of 2016
Support HTTP URLs
(HTTP URLs + Digital Asset Links File)
App Indexing API
Test & Report
(Many Tools + Search Console)
Support Universal Links
(HTTP URLs + App Site Association File)
App Indexing Pod
Test
(New Tool! But no Search Console)
Migrate To new API Version 10 or higher
Add Personal/zed & private Content
This still exists but is kinda irrelevant
ANDROID iOS
16. #SMX #23A2 @goutaste
Use Impact Visuals Above, Move Presentation Title As Needed
TITLE SLIDE ALTERNATIVE LAYOUT
w/ *EXAMPLE* IMAGE
(SWAP IN YOUR OWN AS NEEDED)
Android HTTP URLs
17. #SMX #23A2 @goutaste
Support HTTP URLs
(Add & Handle Intent Filers)
You think this is easy but consider...
Does everything in this folder
have app content?
Does your app content match
your web content?
What happens if you retire
content in the app but not the
web?
Have you considered https
URLs?
https://firebase.google.com/docs/app-indexing/android/public-content
19. #SMX #23A2 @goutaste
Add Digital Asset Links File To Web
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "web",
"site": "https://host.sampleapp.com"
},{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": “com.host.sampleapp",
"sha256_cert_fingerprints":
["10:39:38:EE:45:37:E5:9E:8E:E7:92:F6:54:50:4F:B8:34:6F:C6:B3:46:D0:BB:C4
:41:5F:C3:39:FC:FC:8E:C1"]
}
}]
https://developer.android.com/training/app-links/index.html
Host this file at:
https://domain.well-
known/assetlinks.json
20. #SMX #23A2 @goutaste
<?xml version="1.0" encoding="utf-8"?>
<search-engine
xmlns:android="http://schemas.android.com/apk/res/android">
<noindex android:value="notification"/>
<noindex uri="http://recipe-app.com/profile/hidden-page"/>
<noindex uriPrefix="http://recipe-app.com/users/hidden_prefix"/>
</search-engine>
Noindex.xml
<meta-data android:name="search-engine"
android:resource="@xml/noindex"/>
Reference it in the Manifest:
https://firebase.google.com/docs/app-indexing/android/public-content
21. #SMX #23A2 @goutaste
Use Impact Visuals Above, Move Presentation Title As Needed
TITLE SLIDE ALTERNATIVE LAYOUT
w/ *EXAMPLE* IMAGE
(SWAP IN YOUR OWN AS NEEDED)
iOS Universal Links
22. #SMX #23A2 @goutaste
To support universal links in your app, take the following steps:
Add an entitlement that specifies the domains your app
supports.
Update your app delegate to respond appropriately when it
receives the NSUserActivity object.
Support Universal Links In-App
https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html
23. #SMX #23A2 @goutaste
Add Apple App Site Association File
"applinks": {
"apps": [],
"details": [
{
"appID": “SAMPLE-APP.com.host.location",
"paths": [ "/news/story/", ”NOT /news/video/2010",
"/news/video/201?/*"]
},
{
"appID": “DIFFERENT-APP.com.host.location",
"paths": [ "*" ]
}
]
}
}
Host this file at:
https://domain.well-
known/apple-app-
site-association
OR
https://domain/apple-
app-site-association
24. #SMX #23A2 @goutaste
App Indexing Process – After Fall of 2016
Support HTTP URLs
(HTTP URLs + Digital Asset Links File)
App Indexing API
Test & Report
(Many Tools + Search Console)
Support Universal Links
(HTTP URLs + App Site Association File)
App Indexing Pod
Test
(New Tool! But no Search Console)
Migrate To new API Version 10 or higher
Add Personal/zed & private Content
This still exists but is kinda irrelevant
ANDROID iOS
25. #SMX #23A2 @goutaste
Use Impact Visuals Above, Move Presentation Title As Needed
TITLE SLIDE ALTERNATIVE LAYOUT
w/ *EXAMPLE* IMAGE
(SWAP IN YOUR OWN AS NEEDED)
Android App
Indexing API
27. #SMX #23A2 @goutaste
How to Support Personalized Content In-App
public class AppIndexingService extends IntentService {
public AppIndexingService() {
super("AppIndexingService");
}
@Override
protected void onHandleIntent(Intent intent) {
ArrayList<Indexable> indexableNotes = new ArrayList<>();
for (Recipe recipe : getAllRecipes()) {
Note note = recipe.getNote();
if (note != null) {
Indexable noteToIndex = Indexables.noteDigitalDocumentBuilder()
.setName(recipe.getTitle() + " Note")
.setText(note.getText())
.setUrl(recipe.getNoteUrl())
.build();
...
Identify and group indexable content (https://firebase.google.com/docs/app-indexing/android/personal-content)
28. #SMX #23A2 @goutaste
How to Support Personalized Content In-App
<service android:name=".client.AppIndexingService"
android:exported="true"
android:permission="com.google.android.gms.permission.APPINDEXI
NG">
<intent-filter>
<action
android:name="com.google.firebase.appindexing.UPDATE_INDEX" />
</intent-filter>
</service>
Add the AppIndexingService and an <intent-filter> tag to the manifest
https://firebase.google.com/docs/app-indexing/android/personal-content
29. #SMX #23A2 @goutaste
App Indexing API for Android (Migrate to the New API)
// Before
import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;
// After
import com.google.firebase.appindexing.Action;
import com.google.firebase.appindexing.FirebaseUserActions;
import com.google.firebase.appindexing.Indexable;
import com.google.firebase.appindexing.builders.Actions;
Upgrade to API version 10.0 or higher
https://firebase.google.com/docs/app-indexing/android/migrate
30. #SMX #23A2 @goutaste
Use API for Both Private & Public Content
@Override
public void onStart() {
super.onStart();
FirebaseUserActions.getInstance().start(getRecipeViewAction());
}
@Override
public void onStop() {
FirebaseUserActions.getInstance().end(getRecipeViewAction());
super.onStop();
}
https://firebase.google.com/docs/app-indexing/android/log-actions
This drives autocomplete App Indexing & gives Google Engagement Data (ooooh)
This
example
is for public
indexing
31. #SMX #23A2 @goutaste
Use Impact Visuals Above, Move Presentation Title As Needed
TITLE SLIDE ALTERNATIVE LAYOUT
w/ *EXAMPLE* IMAGE
(SWAP IN YOUR OWN AS NEEDED)
iOS App Indexing
2015 - 2016
33. #SMX #23A2 @goutaste
Google Recommends Removing iOS App Indexing Pod
effectively ends the “indexing” part of iOS app indexing
Due to recent changes in Apple’s App Store Review Guidelines,
iOS apps that use the App Indexing SDK feature might not be accepted by the App
Store. Apps that implement iOS Universal Links without using App Indexing SDK
features will not be affected.
The details
Firebase's App Indexing feature on iOS uses SafariViewController to help display and
promote your app results on Google Search.
Apple’s new guidelines now limit the use of SafariViewController making it challenging
for us to continue offering this functionality. This change also means that we will no
longer be able to provide Search Console analytics for your iOS app.
What you need to do
To ensure that your app will continue to be accepted by the App Store, we recommend
that you remove references to Firebase App Indexing pod by removing these lines of
code:
In your Podfile:
pod ‘Firebase/AppIndexing’
or
pod 'GoogleAppIndexing‘
In your AppDelegate class:
@import Firebase
or
@import <GoogleAppIndexing/GoogleAppIndexing.h>
In your application:didFinishLaunchingWithOptions: method:
[[FIRAppIndexing sharedInstance] registerApp:<yourApple ID from iTunes Connect>];
or
[[GSDAppIndexing sharedInstance] registerApp:<yourApple ID from iTunes Connect>];
Make sure to maintain your iOS Universal Links implementation as this will continue
to bring users directly into your app from Google Search.
34. #SMX #23A2 @goutaste
JULY NOV
iOS Deep Links No
Longer Show App Icon
in Search Results
Only the web URL is indexed.
Because Universal Links work of
the web URL, Universal Links still
work from:
Safari
Chrome (iOS)
35. #SMX #23A2 @goutaste
App Indexing Process – After Fall of 2016
Support HTTP URLs
(HTTP URLs + Digital Asset Links File)
Test & Report
(Many Tools + Search Console)
Support Universal Links
(HTTP URLs + App Site Association File)
Test
(New Tool! But no Search Console)
This still exists but is kinda irrelevant
ANDROID iOS
App Indexing API App Indexing Pod
Migrate To new API Version 10 or higher
Add Personal/zed & private Content
37. #SMX #23A2 @goutaste
Test HTTP Deep
Links on Android
Device with QR
Code
(you can also
used this to
check on your
competitors)
https://firebase.google.com/docs/app-indexing/android/test
38. #SMX #23A2 @goutaste
See if Android
Deep Links Are
Indexed &
Preview Search
Result
(you can also use
this to check out
your competitors)
https://firebase.google.com/docs/app-indexing/android/test
39. #SMX #23A2 @goutaste
Use Impact Visuals Above, Move Presentation Title As Needed
TITLE SLIDE ALTERNATIVE LAYOUT
w/ *EXAMPLE* IMAGE
(SWAP IN YOUR OWN AS NEEDED)
iOS App Indexing
Testing
2015 - 2016
41. #SMX #23A2 @goutaste
The Android Tool
exists for iOS as
well but…
The ‘simulator’ is
not very helpful.
42. #SMX #23A2 @goutaste
The Android Tool
exists for iOS as
well but…
The ‘simulator’ is
not very helpful.
Thanks for
simulating
normal web
results, Googs.
43. #SMX #23A2 @goutaste
For Universal Links, Try This:https://search.developer.apple.com/appsearch-validation-tool
44. #SMX #23A2 @goutaste
For Universal Links, Try This:https://search.developer.apple.com/appsearch-validation-tool
47. #SMX #23A2 @goutaste
People started to
notice a huge uptick in
“Crawl Errors” starting
around 2/3
Shameless plug for Barry’s article:
https://www.seroundtable.com/google-
search-console-crawl-status-errors-apps-
update-23406.html
51. #SMX #23A2 @goutaste
So now you can see your Google Search referral behavior
in your analytics platform of choice!
52. #SMX #23A2 @goutaste
Use Impact Visuals Above, Move Presentation Title As Needed
TITLE SLIDE ALTERNATIVE LAYOUT
w/ *EXAMPLE* IMAGE
(SWAP IN YOUR OWN AS NEEDED)
App Indexing
Webmaster
Support Forums
? - 2017
56. #SMX #23A2 @goutaste
Use Impact Visuals Above, Move Presentation Title As Needed
TITLE SLIDE ALTERNATIVE LAYOUT
w/ *EXAMPLE* IMAGE
(SWAP IN YOUR OWN AS NEEDED)
Android Instant
Apps
57. #SMX #23A2 @goutaste
Android Instant Apps
Upcoming Requirements:
Reduce size of APK
Support Digital Asset Links
Modularize your app (4MB
chunks)
Implement Runtime
Permissions
Support SmartLock