Emily Grossman's deck from Pubcon (Las Vegas) in October 2015 on App Deep Linking strategies after the 4/21 Mobile Friendly update. This deck covers:
- App Packs in Google Search
- Google App Indexing for Android & iOS
- Apple App Indexing
- Deep Linking for Email and Social Media
5. @goutaste
Types of App Results
App Pack App Single App Carousel Deep LinksIcon Deep Links
6. @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
App Store Model
7. @goutaste
“Google’s mission is to organize the world’s information
and make it universally accessible and useful.”
- Google’s initial mission statement -
10. @goutaste
“Google will be
considering "high
quality" apps to
be a positive
ranking factor in
mobile search.”
-Mariya Moeva (Google
Webmaster Trends Analyst,
SMX West 2015)
Website Parity = Positive Signal for Websites
WebApp
27. @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. @goutaste
iOS: Support Universal Links
Requirements:
• A registered domain
• SSL access to your domain
• Ability to upload a JSON file to your
domain
29. @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. @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. @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":[
”/folder/subfolder/”,
”/folder2/subfolder2/*”,
]
}
}
}
}
33. @goutaste
iOS: Support Cocoapods
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];
40. @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 -
46. @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. @goutaste
Private or Public
Public Only
Search results
meta data for
display and rankings
‘Canonical’
More info here: bit.ly/NSUserActivity
NSUserActivty
48. @goutaste
CoreSpotlight NSUserActivity Web MarkupNSUserActivity
with var eligibleForSearch with var eligibleForPublicIndexing
Private/
Device Index
Public/ Cloud
Index
PRIVATE APP SCREEN PUBLIC APP SCREEN
50. @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
53. @goutaste
CoreSpotlight NSUserActivity Web MarkupNSUserActivity
with var eligibleForSearch with var eligibleForPublicIndexing
Private/
Device Index
Public/ Cloud
Index
PRIVATE APP SCREEN PUBLIC APP SCREEN
54. @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
Packs often float to the top, pushing web results below the fold
Traffic May Drop Even if You Maintain 1st Place Ranking
High correlation between rankings and exact match keywords
Only higher-than-average rated apps (avg. 3.5-4 stars min)
Once upon a time, all apps lived in App Stores. You can think of the app store like a book store where all the books are shrink wrapped and you’re picking something out based on the cover and a small summary of text. Not a super ideal way to decide on a book unless you happen to already know what’s inside.
Now this also posed a major problem for google whose mission has been to organize the world’s information and make it universally accessible. If you’re only able to organize app information by what the developer says it’s about, you’re not doing much better than recommending a book based on its shrink-wrapped jacket summary.
A much better solution would be to organize and suggest apps based on the specific content within apps, such as a specific restaurant instead of the OpenTable overall app description. And this is exactly what Search Engines like Google and Bing and now Apple are trying to do with deep linking.
Deep Links between your website and your app may improve your website rankings in mobile search
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
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
Add google play services to your project, then modify activities to support the App Indexing API
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.
Verify website in Google Play and then log into Google Search console using Google Play account
Universal Links allow one URL to open content on either the web, or content in an app. And they work by specifying the path to sections of an app with a JSON file on a website.
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
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
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
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
Sort of like the iOS version of the App Indexing API
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.