Emily Grossman's deck on app indexing from SMX East 2015 in New York. This deck covers:
- Why App Indexing?
- Google App Indexing for Android and iOS
- Apple Search App Indexing
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
1. #SMX #23C @goutaste
Emily Grossman, MobileMoxie
Beyond The Web: Why App Deep
Linking Is The Next Big Thing
2. #SMX #23C @goutaste
Meta-data can provide a “preview” of
the type of content in the app
You don’t know what’s IN the app
until you download it
App Store search is heavy on brand
and head terms vs. long tail
3. #SMX #23C @goutaste
“Google’s mission is to organize the world’s
information and make it universally accessible
and useful.”
- Google’s initial mission statement -
27. #SMX #23C @goutaste
iOS – Support Universal Links
https://subdomain.domain.com/path/subpath/
Scheme
“http” or “https”
Domain or Host Name Path or Prefix
Anatomy of a Universal Link:
28. #SMX #23C @goutaste
iOS – Support Universal Links
Requirements:
• A registered domain
• SSL access to your domain
• Ability to upload a JSON file to your domain
29. #SMX #23C @goutaste
iOS – Support Universal Links
1 Get Your App
Ready
• Modify your application
delegate
• Adopt an entitlement in Xcode
that lists each domain
associated with your app
READ:
http://bit.ly/ios9universallinks
http://bit.ly/UIApplicationDelegate-
Reference
WATCH:
http://bit.ly/appleuniversallinks
30. #SMX #23C @goutaste
iOS – Support Universal Links
2 Get Your Server
Ready
• Create an apple-app-site-
association file for each
associated domain with the content
your app supports and host it at the
root level.
NOTE: The association file must be hosted
on a domain that supports HTTPS/TLS,
even if the HTTP deep links are not
themselves served via HTTPS.
{
"applinks": {
"apps": [],
"details": {
»ABC0123.com.domain.App": {
"paths":[ "*" ]
}
}
}
}
31. #SMX #23C @goutaste
iOS – Support Universal Links
2
{
"applinks": {
"apps": [],
"details": {
»ABC0123.com.domain.App": {
"paths":[
”/folder/subfolder/”,
”/folder2/subfolder2/*”,
]
}
}
}
}
Get Your Server
Ready
• Create an apple-app-site-
association file for each
associated domain with the content
your app supports and host it at the
root level.
NOTE: The association file must be hosted
on a domain that supports HTTPS/TLS,
even if the HTTP deep links are not
themselves served via HTTPS.
35. #SMX #23C @goutaste
iOS – Cocoapods Support
1. Use most up-to-date version of CocoaPods
2. Add ‘GoogleAppIndexing’ pod to Podfile
3. Save and Install Pod
4. Import GoogleAppIndexing
1. Register app
pod 'GoogleAppIndexing'
pod install
#import <GoogleAppIndexing/GoogleAppIndexing.h>
[[GSDAppIndexing sharedInstance] registerApp:your iTunes ID];
39. #SMX #23C @goutaste
“Apple’s App Store commission is now at a
run-rate of $9 billion, more than its total revenue
in the year the iPod launched.”
- Benedict Evans, @BenedictEvans -
45. #SMX #23C @goutaste
Core Spotlight NSUserActivity Web Markup
Used for…
Indexing public app screens
that mirror content on the web
DOES require corresponding
web content
Add code to WEB
Public Cloud Index
Used for…
Indexing app screens that
contain private/ personal data
Does NOT require
corresponding web content
Add code to APP
Private Device Index
Used for…
Indexing private and public
navigation points in the app
Does NOT require
corresponding web content
Add code to APP
Private Device Index and/ or
Public Cloud Index
Private Public
47. #SMX #23C @goutaste
CoreSpotlight NSUserActivity Web MarkupNSUserActivity
with var eligibleForSearch with var eligibleForPublicIndexing
Private/
Device Index
Public/ Cloud Index
PRIVATE APP SCREEN PUBLIC APP SCREEN
49. #SMX #23C @goutaste
Core Spotlight NSUserActivity Web Markup
Used for…
Indexing public app screens
that mirror content on the web
DOES require corresponding
web content
Add code to WEB
Public Cloud Index
Used for…
Indexing app screens that
contain private/ personal data
Does NOT require
corresponding web content
Add code to APP
Private Device Index
Used for…
Indexing private and public
navigation points in the app
Does NOT require
corresponding web content
Add code to APP
Private Device Index and/ or
Public Cloud Index
Private Public
52. #SMX #23C @goutaste
CoreSpotlight NSUserActivity Web MarkupNSUserActivity
with var eligibleForSearch with var eligibleForPublicIndexing
Private/
Device Index
Public/ Cloud Index
PRIVATE APP SCREEN PUBLIC APP SCREEN
53. #SMX #23C @goutaste
Core Spotlight NSUserActivity Web Markup
Used for…
Indexing public app screens
that mirror content on the web
DOES require corresponding
web content
Add code to WEB
Public Cloud Index
Used for…
Indexing app screens that
contain private/ personal data
Does NOT require
corresponding web content
Add code to APP
Private Device Index
Used for…
Indexing private and public
navigation points in the app
Does NOT require
corresponding web content
Add code to APP
Private Device Index and/ or
Public Cloud Index
Private Public
Although this is a template, all of the slides have been created as examples to show you what’s possible within the template. PLEASE DELETE ALL EXAMPLE SLIDES AND NOTES BEFORE CREATING OR IMPORTING YOUR OWN DECK.
This template works best if you use it to create a presentation from scratch. However, this blank layout offers you flexibility to insert your own slides above the SMX footer. You must use this footer at minimum on almost all of your slides. If a screenshot overlaps the footer on occasion, that’s fine – but do your best to crop appropriately!
Before you do anything else, replace “#XXa” in the footer with your session’s specific hashtag. In PowerPoint, Select VIEW>SLIDE MASTER to edit and include it on all slides of your presentation. Also add your @twitterhandle (or @companyhandle if you prefer). You can find your session specific hashtag next to its title on the online agenda: http://searchmarketingexpo.Com/advanced/agenda/ (click through to your session to see the hashtag).
This template is high-resolution 16:9. Do not change it to 4:3. Also note that if you import a 4:3 presentation into 16:9 you may encounter display issues.
The template uses arial & arial black as default fonts. Verdana is a secondary font that may appear. Note that older versions of PowerPoint do not have this as an option; change to arial or other standard sans-serif-font.
When inserting text, please use only standard fonts. We cannot guarantee event laptops will have specialty fonts installed.
Powerpoints with animations may not translate well to pdf/slideshare format – you may also submit a 2nd version / scrubbed deck more appropriate for that medium.
Apps were initially conceived in an add-on model, where the platform of the phone that you purchased would allow you to add on functionality that you could purchase or download from a walled garden.
Developers were expected to describe their apps so that users could know what they did, but the problem was that developers are not very good at writing product descriptions, and in the walled garden, there was no way to see what content was actually IN the app beyond just a few screenshots and summary text.
There’s a lot of documentation out there on deep linking right now. My colleague Cindy Krum and I even wrote this piece on Google App Indexing for SEL last month and it was a pretty exhaustive look at what’s going on with Google app indexing and how to get your apps indexed. It was very well received…
… even John Mueller tweeted it out! But then, at the end of the month…
Google changed some documentation!
So step 1 is largely the same… pick out a URL scheme.
Defining the activity or screen that the app opens for different paths
Until recently, Google’s App Indexing API has been used solely to index previously-viewed android deep links for inclusion in Google’s autocomplete, but now it’s Google’s preferred method for app indexing. This is because, if your app supports HTTP scheme URLs, Google can now use the App Indexing API to discover new screens in your app as they are created. This is great for Google because they no longer have to rely on their web crawler to find App Screen URLs.
Add google play services to your project, then modify activities to support the App Indexing API. ABOVE CODE IS NOT COMPLETE>DO NOT JUST COPY PASTE INTO YOUR APP>JUST FOR EXAMPLE
Bonus: https://github.com/google/santa-tracker-android
Google open-sourced a project that uses the App Indexing API so you (or your developers) can go snoop
Required for Android apps if you’re not using the API. Create a new XML file, res/xml/noindex.xml, and put it in your app's XML resources directory.
This is a requirement for custom schemes (so all iOS apps and Android apps that use custom schemes), and will still help give you more granular control if you’re using HTTP schemes and the API
Verify website in Google Play and then log into Google Search console using Google Play account
So step 1 is largely the same… pick out a URL scheme.
So step 1 is largely the same… pick out a URL scheme.
So step 1 is largely the same… pick out a URL scheme.
The domain is securely associated with your app using an SSL cert to sign a file that is stored on your secure web server
The domain is securely associated with your app using an SSL cert to sign a file that is stored on your secure web server
*you’re sending a sitemap for your app
NOTES: In some cases, it’s possible that the URL your app receives doesn’t represent anything in your app, or it could represent outdated or malformed content. In this case, Apple wants your app to “fail gracefully” which could mean displaying an error alert or opening the URL in Safari instead, by calling UIApplication OpenURL
Entitlements: You have to prefix it with applinks: and also add any subdomains and variants that you might have (www.domain.com, news.domain.com, etc.).
This will enable your app to request a special JSON file apple-app-site-association from your domain. When you first run your app it will download this file from https://domain.com/apple-app-site-association. Jump to the next step to learn how to build this file.
You can use a wildcard so you don’t have to submit each URL one by one
We no longer need to support cocoapods
This is a requirement for custom schemes (so all iOS apps and Android apps that use custom schemes), and will still help give you more granular control if you’re using HTTP schemes and the API
Verification tool is coming soon
What does it mean when we talk about apple search and where will deep links show up if they are indexed for apple search?
Not just in search *queries* in Spotlight, Siri, and Safari, but also in Siri Suggestions in Spotlight. Now if you’re paying attention to this slide, you may notice that there are some pretty personal results showing up here, like a calendar event and a playback on a podcast that notes it was listened to “yesterday”… Apple is able to surface these incredibly user-specific style results because…
Apple has two indexes, a device index for private content and a public cloud index for public content. Apps can have both kinds of screens. EX. an Airbnb listing may be a public screen, while a message between a host and a guest would be a private screen. In Apple search, both of these results can surface from the same query. Users will likely never know which index their search results are coming from, but this is very important for developers and marketers to understand as we set our iOS apps up for Apple app indexing.
There are 3 different methods for apple app indexing, and each method is a little different.
Don’t forget to implement UIApplication delegate so this can be opened in your app later
And again the same UIApplication delegate we used for handoff is called when the app is opened from a corespotlight search result
Once you’ve set all of this up, you need to make sure Applebot knows your website exists. And the easiest way to do this is to include it in your Support URL or Marketing URL fields in iTunes Connect when you submit your app to the store.