why deep linking is the next big thing: app indexing - smx east 2015
Post on 12-Apr-2017
953 Views
Preview:
TRANSCRIPT
#SMX #23C @goutaste
Emily Grossman, MobileMoxie
Beyond The Web: Why App Deep Linking Is The Next Big Thing
#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
#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 -
#SMX #23C @goutaste
#SMX #23C @goutaste
http://www.tripadvisor.com/Hotel_Review-g33388-d83020-Reviews-The_Curtis_Denver_a_DoubleTree_by_Hilton_Hotel-Denver_Colorado.html
tripadvisor://Hotel_Review-g33388-d83020-Reviews-The_Curtis_Denver_a_DoubleTree_by_Hilton_Hotel-Denver_Colorado.html
#SMX #23C @goutaste
Google App Indexing
bit.ly/appindexinggoogle
#SMX #23C @goutaste
#SMX #23C @goutaste
#SMX #23C @goutaste
AUG
11
AUG
125
#SMX #23C @goutaste
AUG
11
AUG
129
#SMX #23C @goutaste
#SMX #23C @goutaste
Google App Indexing: ANDROID
#SMX #23C @goutaste
Android – Intent Filters
Custom URL Scheme
HTTP URL Scheme
Create Intent Filters:
#SMX #23C @goutaste
Android – Intent filters
Intent Filters need:
<action>
<data> android:schemeandroid:path
<category>
#SMX #23C @goutaste
Android App Indexing API
Deep Link to previously-viewed ‘Calafia Café’ screen in the Zagat app
#SMX #23C @goutaste
Android App Indexing API
...public class MainActivity extends Activity {
static final Uri APP_URI = Uri.parse("android-app://com.example.android.recipes/http/recipe-app.com/recipes"); static final Uri WEB_URL = Uri.parse("http://recipe-app.com/recipes/"); private GoogleApiClient mClient; ... }
@Override public void onStop() { ... // Call end() and disconnect the client String title = "App Indexing API Title"; Action viewAction = Action.newAction(Action.TYPE_VIEW, title, WEB_URL, APP_URI); AppIndex.AppIndexApi.end(mClient, viewAction); mClient.disconnect(); ... Full code sample here: bit.ly/appindexingAPIcode
#SMX #23C @goutaste
Android – Robots.txt (Required if you don’t use the API)
Update App’s Robots.txt:
User-Agent: GooglebotAllow: /
#SMX #23C @goutaste
Custom URL Schemes: Web Markup
#SMX #23C @goutaste
Android
Deep Link URL Format:
android-app://com.travel_app/travel_app/travel-app.com/hotels/curtis-hotel-denver
Protocol PackageID Scheme(custom)
Host Path
#SMX #23C @goutaste
Rel=alternate XML Sitemaps Schema
<head> ... <link rel="alternate" href="android-app://com.travelapp.android/http/travelapp.com/examplescreen" /> ...</head>
<head> ... <link rel="alternate" href="android-app://com.travelapp.android/travelapp/examplescreen" /> <link rel="alternate" href="ios-app://123456/travelapp/examplescreen" /> ...</head>
#SMX #23C @goutaste
Rel=alternate XML Sitemaps Schema
<?xml version="1.0" encoding="UTF-8" ?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url> <loc>http://travelwebsite.com/examplepage</loc> <xhtml:link rel="alternate" href="android-app://com.travelapp.android/travelapp/examplescreen" /> <xhtml:link rel="alternate" href="ios-app://123456/travelapp/examplescreen" /></url> <xhtml:link rel="alternate" href="android-app://com.travelapp.android/http/travelapp.com/examplescreen" />...</urlset>
#SMX #23C @goutaste
Rel=alternate SchemaXML Sitemaps
<script type="application/ld+json">{ "@context": "http://schema.org", "@type": "WebPage", "@id": "http://travelwebsite.com/examplepage", "potentialAction": { "@type": "ViewAction", "target": "android-app://com.travelapp.android/http/travelapp.com/examplescreen" }}</script>
#SMX #23C @goutaste
Android – Google Play Developer Console/ Google Search Console Sync
#SMX #23C @goutaste
Google App Indexing: iOS
#SMX #23C @goutaste
The Good News Is…
#SMX #23C @goutaste
The Bad News Is…
#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:
#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
#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-ReferenceWATCH: http://bit.ly/appleuniversallinks
#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":[ "*" ] } } }}
#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.
#SMX #23C @goutaste
iOS – Cocoapods Support
#SMX #23C @goutaste
iOS – Cocoapods Support
#SMX #23C @goutaste
iOS – Cocoapods Support
#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
5. Register app
pod 'GoogleAppIndexing'
pod install
#import <GoogleAppIndexing/GoogleAppIndexing.h>
[[GSDAppIndexing sharedInstance] registerApp:your iTunes ID];
#SMX #23C @goutaste
Custom URL Schemes: Web Markup
#SMX #23C @goutasteImage attribution: http://k9s4cops.org/coming-soon-the-pack/
iOS – Testing
#SMX #23C @goutaste
Apple Search App Indexing
#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 -
#SMX #23C @goutaste
Apple Search SPOTLIGHT SAFARISIRI
#SMX #23C @goutaste
High-EngagementApp ScreensSuggested in
‘Siri Suggestions’ on iOS 9 Spotlight
#SMX #23C @goutaste
DEVICE INDEX(PRIVATE)
CLOUD INDEX(PUBLIC)
Apple Search Sources from Two Indexes
#SMX #23C @goutaste
APPLE SEARCH APP INDEXING
CoreSpotlight NSUserActivity Web Markup
#SMX #23C @goutaste
Apple Search App Indexing Option 1:
NSUserActivity
#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
#SMX #23C @goutaste
NSUserActivity
Private or PublicPublic Only
Search results meta data for
display and rankings
‘Canonical’More info here: bit.ly/NSUserActivity
#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
#SMX #23C @goutaste
Apple Search App Indexing Option 2:
Core Spotlight
#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
#SMX #23C @goutaste
CoreSpotlight
Search results meta data for
display and rankings
More info here: bit.ly/corespotlight
#SMX #23C @goutaste
Apple Search App Indexing Option 3:
Web Markup
#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
#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
#SMX #23C @goutaste
Web Markup
#SMX #23C @goutaste
Web Markup
Twitter Cards AppLinks Smart App Banners
#SMX #23C @goutaste
Web Markup
Twitter Cards AppLinks Smart App Banners
#SMX #23C @goutaste
Web Markup
Twitter Cards AppLinks Smart App Banners
#SMX #23C @goutaste
Web Markup – Meta Data (Schema & Open Graph)
#SMX #23C @goutaste
http://bit.ly/applesearchvalidator
#SMX #23C @goutaste
THANK YOU!
SEE YOU @SMX WEST
SAN JOSE, CAMARCH 1-3, 2016
top related