SlideShare a Scribd company logo
1 of 60
#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:scheme
android: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: Googlebot
Allow: /
#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-
Reference
WATCH:
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
1. 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 @goutaste
Image 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-Engagement
App Screens
Suggested 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 Public
Public 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, CA
MARCH 1-3, 2016

More Related Content

What's hot

Advanced Structured Data: Beyond Rich Snippets
Advanced Structured Data: Beyond Rich SnippetsAdvanced Structured Data: Beyond Rich Snippets
Advanced Structured Data: Beyond Rich Snippets
Justin Briggs
 

What's hot (20)

Deep linking slides
Deep linking slidesDeep linking slides
Deep linking slides
 
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015
 
UaMobitech - App Links and App Indexing API
UaMobitech - App Links and App Indexing APIUaMobitech - App Links and App Indexing API
UaMobitech - App Links and App Indexing API
 
App Indexing: Blurring the Lines Between Your Website and App
App Indexing: Blurring the Lines Between Your Website and AppApp Indexing: Blurring the Lines Between Your Website and App
App Indexing: Blurring the Lines Between Your Website and App
 
How to Setup App Indexation
How to Setup App IndexationHow to Setup App Indexation
How to Setup App Indexation
 
Software Testing for SEO
Software Testing for SEOSoftware Testing for SEO
Software Testing for SEO
 
An Introduction to Deep Linking and App Indexing Codelab
An Introduction to Deep Linking and App Indexing CodelabAn Introduction to Deep Linking and App Indexing Codelab
An Introduction to Deep Linking and App Indexing Codelab
 
Advanced Structured Data: Beyond Rich Snippets
Advanced Structured Data: Beyond Rich SnippetsAdvanced Structured Data: Beyond Rich Snippets
Advanced Structured Data: Beyond Rich Snippets
 
App Indexing & Mobile SEO - Friends of Search 2016
App Indexing & Mobile SEO - Friends of Search 2016App Indexing & Mobile SEO - Friends of Search 2016
App Indexing & Mobile SEO - Friends of Search 2016
 
Increasing App Installs With App Indexation By Justin Briggs
Increasing App Installs With App Indexation By Justin BriggsIncreasing App Installs With App Indexation By Justin Briggs
Increasing App Installs With App Indexation By Justin Briggs
 
Mobile Deep Linking for Apps – What? Why? How?
Mobile Deep Linking for Apps – What? Why? How?Mobile Deep Linking for Apps – What? Why? How?
Mobile Deep Linking for Apps – What? Why? How?
 
Indexing on Fire: Google Firebase Native & Web App Indexing - MozCon 2016
Indexing on Fire: Google Firebase Native & Web App Indexing - MozCon 2016Indexing on Fire: Google Firebase Native & Web App Indexing - MozCon 2016
Indexing on Fire: Google Firebase Native & Web App Indexing - MozCon 2016
 
Android Deep Linking
Android Deep Linking  Android Deep Linking
Android Deep Linking
 
Preparing for the Mobile Algorithm Shift
Preparing for the Mobile Algorithm ShiftPreparing for the Mobile Algorithm Shift
Preparing for the Mobile Algorithm Shift
 
Confoo Montreal : SEO for dynamic websites
Confoo Montreal :  SEO for dynamic websitesConfoo Montreal :  SEO for dynamic websites
Confoo Montreal : SEO for dynamic websites
 
The Future of Deep Linking & App Indexing
The Future of Deep Linking & App IndexingThe Future of Deep Linking & App Indexing
The Future of Deep Linking & App Indexing
 
Miracle Inameti-Archibong - We made our website a progressive web app and why...
Miracle Inameti-Archibong - We made our website a progressive web app and why...Miracle Inameti-Archibong - We made our website a progressive web app and why...
Miracle Inameti-Archibong - We made our website a progressive web app and why...
 
Complete A-Z Of Google App Content Indexing And Much More...
Complete A-Z Of Google App Content Indexing And Much More...Complete A-Z Of Google App Content Indexing And Much More...
Complete A-Z Of Google App Content Indexing And Much More...
 
Mobile-Friendly SEO: Why & How? Ari Roth at SMX Israel 2015
Mobile-Friendly SEO: Why & How? Ari Roth at SMX Israel 2015Mobile-Friendly SEO: Why & How? Ari Roth at SMX Israel 2015
Mobile-Friendly SEO: Why & How? Ari Roth at SMX Israel 2015
 
Mobile Summit 2016 Porto Alegre
Mobile Summit 2016 Porto AlegreMobile Summit 2016 Porto Alegre
Mobile Summit 2016 Porto Alegre
 

Similar to Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015

Similar to Why Deep Linking is the Next Big Thing: App Indexing - SMX East 2015 (20)

How to Optimize Apps for Apple iOS Search and iOS 9 Universal Links By Emily ...
How to Optimize Apps for Apple iOS Search and iOS 9 Universal Links By Emily ...How to Optimize Apps for Apple iOS Search and iOS 9 Universal Links By Emily ...
How to Optimize Apps for Apple iOS Search and iOS 9 Universal Links By Emily ...
 
How to Optimize Apps for Apple iOS Search and iOS 9 Universal Links - SMX Wes...
How to Optimize Apps for Apple iOS Search and iOS 9 Universal Links - SMX Wes...How to Optimize Apps for Apple iOS Search and iOS 9 Universal Links - SMX Wes...
How to Optimize Apps for Apple iOS Search and iOS 9 Universal Links - SMX Wes...
 
Google & Bing App Indexing - SMX Munich 2016
Google & Bing App Indexing - SMX Munich 2016Google & Bing App Indexing - SMX Munich 2016
Google & Bing App Indexing - SMX Munich 2016
 
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
 
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
 
What You Need to Know About Google App Indexing - SMX West 2016
What You Need to Know About Google App Indexing - SMX West 2016What You Need to Know About Google App Indexing - SMX West 2016
What You Need to Know About Google App Indexing - SMX West 2016
 
Cindy Krum Krum Cindy "What SEOs Need To Know About Progressive Web Apps" SMX...
Cindy Krum Krum Cindy "What SEOs Need To Know About Progressive Web Apps" SMX...Cindy Krum Krum Cindy "What SEOs Need To Know About Progressive Web Apps" SMX...
Cindy Krum Krum Cindy "What SEOs Need To Know About Progressive Web Apps" SMX...
 
SearchLove Boston 2016 | Emily Grossman | Mobile Jedi Mind Tricks: Master the...
SearchLove Boston 2016 | Emily Grossman | Mobile Jedi Mind Tricks: Master the...SearchLove Boston 2016 | Emily Grossman | Mobile Jedi Mind Tricks: Master the...
SearchLove Boston 2016 | Emily Grossman | Mobile Jedi Mind Tricks: Master the...
 
Mobile-First Indexing and AMP - SMX Advanced 2018
Mobile-First Indexing and AMP - SMX Advanced 2018Mobile-First Indexing and AMP - SMX Advanced 2018
Mobile-First Indexing and AMP - SMX Advanced 2018
 
Mobile-first indexing - SMX East
Mobile-first indexing - SMX East Mobile-first indexing - SMX East
Mobile-first indexing - SMX East
 
Mobile Jedi Mind Tricks: Master the Multi-Screen Universe
Mobile Jedi Mind Tricks: Master the Multi-Screen UniverseMobile Jedi Mind Tricks: Master the Multi-Screen Universe
Mobile Jedi Mind Tricks: Master the Multi-Screen Universe
 
Beginning Native Android Apps
Beginning Native Android AppsBeginning Native Android Apps
Beginning Native Android Apps
 
Front End Development for Back End Developers - vJUG24 2017
Front End Development for Back End Developers - vJUG24 2017Front End Development for Back End Developers - vJUG24 2017
Front End Development for Back End Developers - vJUG24 2017
 
OpenMIC March-2012.phonegap
OpenMIC March-2012.phonegapOpenMIC March-2012.phonegap
OpenMIC March-2012.phonegap
 
Parse Apps with Ember.js
Parse Apps with Ember.jsParse Apps with Ember.js
Parse Apps with Ember.js
 
Android in practice
Android in practiceAndroid in practice
Android in practice
 
Alexander Lukin, Yandex
Alexander Lukin, YandexAlexander Lukin, Yandex
Alexander Lukin, Yandex
 
Desenvolvimento Mobile Híbrido
Desenvolvimento Mobile HíbridoDesenvolvimento Mobile Híbrido
Desenvolvimento Mobile Híbrido
 
Basics of AngularJS
Basics of AngularJSBasics of AngularJS
Basics of AngularJS
 
Bootstrapping an App for Launch
Bootstrapping an App for LaunchBootstrapping an App for Launch
Bootstrapping an App for Launch
 

More from MobileMoxie

More from MobileMoxie (20)

Fighting Off Digital Marketing Imposter Syndrome with Facts
Fighting Off Digital Marketing Imposter Syndrome with FactsFighting Off Digital Marketing Imposter Syndrome with Facts
Fighting Off Digital Marketing Imposter Syndrome with Facts
 
Don't Blame it on Your MUM: Mobile SEO Now & in the Future - Cindy Krum
Don't Blame it on Your MUM: Mobile SEO Now & in the Future - Cindy KrumDon't Blame it on Your MUM: Mobile SEO Now & in the Future - Cindy Krum
Don't Blame it on Your MUM: Mobile SEO Now & in the Future - Cindy Krum
 
Is this New - Tracking Local SEO Results IRL
Is this New - Tracking Local SEO Results IRLIs this New - Tracking Local SEO Results IRL
Is this New - Tracking Local SEO Results IRL
 
Mobile-First Indexing & The Story Your Data Isn't Telling You
Mobile-First Indexing & The Story Your Data Isn't Telling YouMobile-First Indexing & The Story Your Data Isn't Telling You
Mobile-First Indexing & The Story Your Data Isn't Telling You
 
What gotyouthere cindykrum-mobilev2
What gotyouthere cindykrum-mobilev2What gotyouthere cindykrum-mobilev2
What gotyouthere cindykrum-mobilev2
 
Mobile-First Indexing & Language - 3XE Dublin 2018 - Cindy Krum
Mobile-First Indexing & Language - 3XE Dublin 2018 - Cindy KrumMobile-First Indexing & Language - 3XE Dublin 2018 - Cindy Krum
Mobile-First Indexing & Language - 3XE Dublin 2018 - Cindy Krum
 
Mobile-First Indexing or a Whole New Google - Digitalzone 2018
Mobile-First Indexing or a Whole New Google - Digitalzone 2018Mobile-First Indexing or a Whole New Google - Digitalzone 2018
Mobile-First Indexing or a Whole New Google - Digitalzone 2018
 
The New Way Google Understands the World #Turingfest 2018
The New Way Google Understands the World #Turingfest 2018The New Way Google Understands the World #Turingfest 2018
The New Way Google Understands the World #Turingfest 2018
 
PWAs, Voice & Cross-Deice Search - Friends of Search 2018
PWAs, Voice & Cross-Deice Search - Friends of Search 2018 PWAs, Voice & Cross-Deice Search - Friends of Search 2018
PWAs, Voice & Cross-Deice Search - Friends of Search 2018
 
From Web Site to Web App: Fantastic Optimisations and Where To Find Them
From Web Site to Web App: Fantastic Optimisations and Where To Find ThemFrom Web Site to Web App: Fantastic Optimisations and Where To Find Them
From Web Site to Web App: Fantastic Optimisations and Where To Find Them
 
Introduction to PWAs & New JS Frameworks for Mobile
Introduction to PWAs & New JS Frameworks for MobileIntroduction to PWAs & New JS Frameworks for Mobile
Introduction to PWAs & New JS Frameworks for Mobile
 
The Truth About Mobile-First Indexing #MozCon 2017
The Truth About Mobile-First Indexing #MozCon 2017The Truth About Mobile-First Indexing #MozCon 2017
The Truth About Mobile-First Indexing #MozCon 2017
 
From Website to Web App - Indexing, Optimizing, and Auditing Experiences for ...
From Website to Web App - Indexing, Optimizing, and Auditing Experiences for ...From Website to Web App - Indexing, Optimizing, and Auditing Experiences for ...
From Website to Web App - Indexing, Optimizing, and Auditing Experiences for ...
 
Cindy Krum Mobile First Keynote Next10x 2017
Cindy Krum Mobile First Keynote Next10x 2017Cindy Krum Mobile First Keynote Next10x 2017
Cindy Krum Mobile First Keynote Next10x 2017
 
Mobile-First Indexing: Re-thinking Position Zero
Mobile-First Indexing: Re-thinking Position ZeroMobile-First Indexing: Re-thinking Position Zero
Mobile-First Indexing: Re-thinking Position Zero
 
Ashley Berman Hale "SEO Alchemy: Location-Based Mobile Search" - MozLocal 2017
Ashley Berman Hale "SEO Alchemy: Location-Based Mobile Search" - MozLocal 2017Ashley Berman Hale "SEO Alchemy: Location-Based Mobile Search" - MozLocal 2017
Ashley Berman Hale "SEO Alchemy: Location-Based Mobile Search" - MozLocal 2017
 
Cindy Krum "Mobile-First Indexing for Local SEO" - LocalU 2017
Cindy Krum "Mobile-First Indexing for Local SEO" - LocalU 2017Cindy Krum "Mobile-First Indexing for Local SEO" - LocalU 2017
Cindy Krum "Mobile-First Indexing for Local SEO" - LocalU 2017
 
Emily Grossman "The New Mobile" - SearchLove 2017
Emily Grossman "The New Mobile" - SearchLove 2017 Emily Grossman "The New Mobile" - SearchLove 2017
Emily Grossman "The New Mobile" - SearchLove 2017
 
Looking Beyond Website Competition: How Apps Impact Local-Mobile Searches
Looking Beyond Website Competition: How Apps Impact Local-Mobile SearchesLooking Beyond Website Competition: How Apps Impact Local-Mobile Searches
Looking Beyond Website Competition: How Apps Impact Local-Mobile Searches
 
Digital Marketing & Artificial Intelligence - Zenith 2016
Digital Marketing & Artificial Intelligence - Zenith 2016Digital Marketing & Artificial Intelligence - Zenith 2016
Digital Marketing & Artificial Intelligence - Zenith 2016
 

Recently uploaded

CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
anilsa9823
 
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
anilsa9823
 

Recently uploaded (7)

Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
 
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
 
9892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x79892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x7
 
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
 
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
 
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPowerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
 
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCRFULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
 

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 -
  • 6. #SMX #23C @goutaste Google App Indexing bit.ly/appindexinggoogle
  • 12. #SMX #23C @goutaste Google App Indexing: ANDROID
  • 13. #SMX #23C @goutaste Android – Intent Filters Custom URL Scheme HTTP URL Scheme Create Intent Filters:
  • 14. #SMX #23C @goutaste Android – Intent filters Intent Filters need: <action> <data> android:scheme android:path <category>
  • 15. #SMX #23C @goutaste Android App Indexing API Deep Link to previously- viewed ‘Calafia Café’ screen in the Zagat app
  • 16. #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
  • 17. #SMX #23C @goutaste Android – Robots.txt (Required if you don’t use the API) Update App’s Robots.txt: User-Agent: Googlebot Allow: /
  • 18. #SMX #23C @goutaste Custom URL Schemes: Web Markup
  • 19. #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
  • 20. #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>
  • 21. #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>
  • 22. #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>
  • 23. #SMX #23C @goutaste Android – Google Play Developer Console/ Google Search Console Sync
  • 24. #SMX #23C @goutaste Google App Indexing: iOS
  • 25. #SMX #23C @goutaste The Good News Is…
  • 26. #SMX #23C @goutaste The Bad News Is…
  • 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.
  • 32. #SMX #23C @goutaste iOS – Cocoapods Support
  • 33. #SMX #23C @goutaste iOS – Cocoapods Support
  • 34. #SMX #23C @goutaste iOS – Cocoapods Support
  • 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];
  • 36. #SMX #23C @goutaste Custom URL Schemes: Web Markup
  • 37. #SMX #23C @goutaste Image attribution: http://k9s4cops.org/coming-soon-the-pack/ iOS – Testing
  • 38. #SMX #23C @goutaste Apple Search App Indexing
  • 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 -
  • 40. #SMX #23C @goutaste Apple Search SPOTLIGHT SAFARISIRI
  • 41. #SMX #23C @goutaste High-Engagement App Screens Suggested in ‘Siri Suggestions’ on iOS 9 Spotlight
  • 42. #SMX #23C @goutaste DEVICE INDEX (PRIVATE) CLOUD INDEX (PUBLIC) Apple Search Sources from Two Indexes
  • 43. #SMX #23C @goutaste APPLE SEARCH APP INDEXING CoreSpotlight NSUserActivity Web Markup
  • 44. #SMX #23C @goutaste Apple Search App Indexing Option 1: NSUserActivity
  • 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
  • 46. #SMX #23C @goutaste NSUserActivity Private or Public Public Only Search results meta data for display and rankings ‘Canonical’ More info here: bit.ly/NSUserActivity
  • 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
  • 48. #SMX #23C @goutaste Apple Search App Indexing Option 2: Core Spotlight
  • 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
  • 50. #SMX #23C @goutaste CoreSpotlight Search results meta data for display and rankings More info here: bit.ly/corespotlight
  • 51. #SMX #23C @goutaste Apple Search App Indexing Option 3: Web Markup
  • 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
  • 55. #SMX #23C @goutaste Web Markup Twitter Cards AppLinks Smart App Banners
  • 56. #SMX #23C @goutaste Web Markup Twitter Cards AppLinks Smart App Banners
  • 57. #SMX #23C @goutaste Web Markup Twitter Cards AppLinks Smart App Banners
  • 58. #SMX #23C @goutaste Web Markup – Meta Data (Schema & Open Graph)
  • 60. #SMX #23C @goutaste THANK YOU! SEE YOU @SMX WEST SAN JOSE, CA MARCH 1-3, 2016

Editor's Notes

  1. 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.
  2. 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.
  3. 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…
  4. … even John Mueller tweeted it out! But then, at the end of the month…
  5. Google changed some documentation!
  6. So step 1 is largely the same… pick out a URL scheme.
  7. Defining the activity or screen that the app opens for different paths
  8. 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.
  9. 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
  10. 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.
  11. 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
  12. Verify website in Google Play and then log into Google Search console using Google Play account
  13. So step 1 is largely the same… pick out a URL scheme.
  14. So step 1 is largely the same… pick out a URL scheme.
  15. So step 1 is largely the same… pick out a URL scheme.
  16. The domain is securely associated with your app using an SSL cert to sign a file that is stored on your secure web server
  17. 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
  18. 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.
  19. You can use a wildcard so you don’t have to submit each URL one by one
  20. We no longer need to support cocoapods
  21. 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
  22. Verification tool is coming soon
  23. What does it mean when we talk about apple search and where will deep links show up if they are indexed for apple search?
  24. 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…
  25. 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.
  26. There are 3 different methods for apple app indexing, and each method is a little different.
  27. Don’t forget to implement UIApplication delegate so this can be opened in your app later
  28. And again the same UIApplication delegate we used for handoff is called when the app is opened from a corespotlight search result
  29. 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.
  30. https://search.developer.apple.com/appsearch-validation-tool/ http://bit.ly/applesearchvalidator