Google & Bing App Indexing - SMX Munich 2016

55
Google & Bing App Indexing Emily Grossman, Mobile Marketing Specialist, MobileMoxie

Transcript of Google & Bing App Indexing - SMX Munich 2016

Page 1: Google & Bing App Indexing - SMX Munich 2016

Google & Bing App IndexingEmily Grossman, Mobile Marketing Specialist, MobileMoxie

Page 2: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 2

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

@goutaste #SMXMunich

Page 3: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 3

“Google’s mission is to organize the world’s information and make it

universally accessible and useful.”- Google’s initial mission statement -

@goutaste #SMXMunich

Page 4: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 4@goutaste #SMXMunich

Page 5: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 5

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

@goutaste #SMXMunich

Page 6: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 6

App Packs ≠ Deep Links

But Indexed Deep Links are a Small Ranking Factor for App Pack Results.

@goutaste #SMXMunich

Page 7: Google & Bing App Indexing - SMX Munich 2016

7

App Pack Links Go to App Stores

Page 8: Google & Bing App Indexing - SMX Munich 2016

8

Deep Links Go To App Content

Page 9: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 9

Google App Indexing

bit.ly/appindexinggoogle

@goutaste #SMXMunich

Page 10: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 10

Android VS iOS AppsAndroid iOS

Step 1: Create Web Parity with Your App

Step 2: Set up HTTP Deep Links in Your App Manifest,Exclude Deep Links with noindex.XML

Set up Universal Links in App & Server,Exclude by Not Supporting for All Deep Links

Step 3: Optimize Deep Links in the App with API Markup

Optimize Web Markup* Add Cocoa Pods & App Indexing SDK Pod to App

Step 4: Submit Deep Links for Pre-Launch Crawling in Google Search Console & Fix Errors

Say a meaningful prayer to the god of your choice and/or grab a doughnut

Step 5: Go Live & Verify Proper Indexing & Behavior from SERPS

*Doh! Google can’t actually extract Title &Description info from iOS apps, so all keyword relevance comes from meta data on corresponding web pages.

@goutaste #SMXMunich

Page 11: Google & Bing App Indexing - SMX Munich 2016

Custom URL Scheme

HTTP URL Scheme

Intent Filters (Where Android Deep Links are Born)

@goutaste #SMXMunich Emily Grossman | MobileMoxie 11

Page 12: Google & Bing App Indexing - SMX Munich 2016

Custom URL Scheme

HTTP URL Scheme

Intent Filters (Where Android Deep Links are Born)

@goutaste #SMXMunich Emily Grossman | MobileMoxie 12

Page 13: Google & Bing App Indexing - SMX Munich 2016

Intent Filters (Where Android Deep Links are Born)

Intent Filters need:

<action>

<data> android:schemeandroid:path

<category>

@goutaste #SMXMunich Emily Grossman | MobileMoxie 13

Page 14: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 14

Control Indexing

@goutaste #SMXMunich

<?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://examplepetstore.com/dogs/hidden-page"/>  <noindex uriPrefix="http://examplepetstore.com/cats/hidden_prefix"/></search-engine>

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.android.Petstore">  <application>    <activity android:name="com.example.android.PetstoreActivity" ...>      ...    </activity>    <meta-data android:name="search-engine" android:resource="@xml/noindex"/>  </application>       ...</manifest>

Noindex.xml

Reference it in the Manifest:

Page 15: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 15

Control Indexing

@goutaste #SMXMunich

<?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://examplepetstore.com/dogs/hidden-page"/>  <noindex uriPrefix="http://examplepetstore.com/cats/hidden_prefix"/></search-engine>

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.android.Petstore">  <application>    <activity android:name="com.example.android.PetstoreActivity" ...>      ...    </activity>    <meta-data android:name="search-engine" android:resource="@xml/noindex"/>  </application>       ...</manifest>

Noindex.xml

Reference it in the Manifest:

Page 16: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 16

Prepare App:• 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

Universal Links (Where iOS Deep Links Are Born)

@goutaste #SMXMunich

Page 17: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 17

{ "applinks": { "apps": [], "details": {  »ABC0123.com.domain.App": { "paths":[ "*" ] } } }}

Associate App with Website:• 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.

Universal Links (Where iOS Deep Links Are Born)

@goutaste #SMXMunich

Page 18: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 18

{ "applinks": { "apps": [], "details": {  »ABC0123.com.domain.App": { "paths":[

”/folder/subfolder/”,

”/folder2/subfolder2/*”, ] } } }}

Modify apple-app-site-association file to specify only the content that is parallel between the app and the website.

@goutaste #SMXMunich

Control Indexing

Page 19: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 19

App Indexing API (Where Android Deep Links are Discovered)

– Update App Code to include Google Play Services

– Define Indexable Activities or Fragments in the App• View/Search/Watch/Like/Listen/Reserve, Etc.

(https://developers.google.com/android/reference/com/google/android/gms/appindexing/Action)

– Modify App Activities or Fragments with proper API Calls – Including:• Title & Description• Web Url, Multiple Web Urls or ‘Null’

@goutaste #SMXMunich

Page 20: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 20

...public class MainActivity extends Activity {  private GoogleApiClient mClient;  private Uri mUrl;  private String mTitle;  private String mDescription;

  @Override  protected void onCreate(Bundle savedInstanceState) {    mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();    mUrl = "http://examplepetstore.com/dogs/standard-poodle";    mTitle = "Standard Poodle";    mDescription = "The Standard Poodle stands at least 18 inches at the withers";  }...

Full code sample here: bit.ly/appindexingAPIcode

Android App Indexing API

@goutaste #SMXMunich

Page 21: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie

...@Override  public void onStart() {    super.onStart();    mClient.connect();    AppIndex.AppIndexApi.start(mClient, getAction());  }

  @Override  public void onStop() {    AppIndex.AppIndexApi.end(mClient, getAction());    mClient.disconnect();    super.onStop(); }...

Full code sample here: bit.ly/appindexingAPIcode

Android App Indexing API

“Can Haz Engagement Data?”-Google

@goutaste #SMXMunich

Page 22: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie

...@Override  public void onStart() {    super.onStart();    mClient.connect();    AppIndex.AppIndexApi.start(mClient, getAction());  }

  @Override  public void onStop() {    AppIndex.AppIndexApi.end(mClient, getAction());    mClient.disconnect();    super.onStop(); }...

Full code sample here: bit.ly/appindexingAPIcode

Android App Indexing API

“Can Haz Engagement Data?”-Google

+ ExtraRankings

Boost

@goutaste #SMXMunich

Page 23: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 23

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];

Google App Indexing “Pod” (Where iOS Deep Links Are Discovered)

@goutaste #SMXMunich

Page 24: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 24

Where do I put my deep link Title and Description on iOS?

@goutaste #SMXMunich

Page 25: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 25

Where do I put my deep link Title and Description on iOS?

@goutaste #SMXMunich

Page 26: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 26

bit.ly/g-app-indexing

@goutaste #SMXMunich

Page 27: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 27

bit.ly/g-app-indexing

@goutaste #SMXMunich

Page 28: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 28

bit.ly/g-app-indexing

@goutaste #SMXMunich

Page 29: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 29@goutaste #SMXMunich

Page 30: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 30@goutaste #SMXMunich

Page 31: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 31

Android VS iOS AppsAndroid iOS

Step 1: Create Web Parity with Your App

Step 2: Set up HTTP Deep Links in Your App Manifest,Exclude Deep Links with noindex.XML

Set up Universal Links in App & Server,Exclude by Not Supporting for All Deep Links

Step 3: Optimize Deep Links in the App with API Markup

Optimize Web Markup* Add Cocoa Pods & App Indexing SDK Pod to App

Step 4: Submit Deep Links for Pre-Launch Crawling in Google Search Console & Fix Errors

Say a meaningful prayer to the god of your choice and/or grab a doughnut

Step 5: Go Live & Verify Proper Indexing & Behavior from SERPS

*Doh! Google can’t actually extract Title & Description info from iOS apps, so all keyword relevance comes from meta data on corresponding web pages.

@goutaste #SMXMunich

Page 32: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 32

Alternative Google App Indexing Methods (Android):

Web Markup Allow Googlebot App M URLs

@goutaste #SMXMunich

Page 33: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 33

Web Markup Allow Googlebot App M URLs

Custom URL Scheme

HTTP URL Scheme

Remember This?

@goutaste #SMXMunich

Alternative Google App Indexing Methods (Android):

Page 34: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 34

Web Markup Allow Googlebot App M URLs

Custom URL Scheme

HTTP URL Scheme

If you have to use custom schemes, you will make Google and Mariya sad have to use web markup to tell Google about your deep links

@goutaste #SMXMunich

Alternative Google App Indexing Methods (Android):

Page 35: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 35

Web Markup Allow Googlebot App M URLs

Custom URL Scheme

HTTP URL Scheme

If you have to use custom schemes, you will make Google and Mariya sad have to use web markup to tell Google about your deep links

@goutaste #SMXMunich

And NO API BOOST for you.

Alternative Google App Indexing Methods (Android):

Page 36: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 36

Web Markup Allow Googlebot App M URLs

android-app://com.travel_app/travel_app/travel-app.com/hotels/curtis-hotel-denver

Protocol PackageID Scheme(custom)

Host Path

@goutaste #SMXMunich

Alternative Google App Indexing Methods (Android):

Page 37: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 37

Web Markup Allow Googlebot App M URLs

<head> ... <link rel="alternate" href="android-app://com.travelapp.android/http/travelapp.com/examplescreen" /> ...</head>

@goutaste #SMXMunich

Alternative Google App Indexing Methods (Android):

Page 38: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 38

Web Markup Allow Googlebot App M URLs

Update App’s Robots.txt:

User-Agent: GooglebotAllow: /

@goutaste #SMXMunich

Alternative Google App Indexing Methods (Android):

Page 39: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 39

Web Markup Allow Googlebot App M URLs

• Uses an HTTP or HTTPS link scheme

• Declare the Website-App Association by hosting a Digital Asset Links (App Association) file assetlinks.json

@goutaste #SMXMunich

Alternative Google App Indexing Methods (Android):

Page 40: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 40

Web Markup Allow Googlebot App M URLs

• Uses an HTTP or HTTPS link scheme

• Declare the Website-App Association by hosting a Digital Asset Links (App Association) file assetlinks.json

@goutaste #SMXMunich

Alternative Google App Indexing Methods (Android):

Page 41: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 41

What Breaks Deep Links?• Blocking Googlebot on Your Website• Android Users Signed into the Wrong

Account• Apple Products and Policies• Bad Custom URL Schemes• Bad handling of deep links in App Code• Forgetting to Deep Link Pages on an mDot

subdomain, Mobile Subdirectory & other Subdomains

@goutaste #SMXMunich

Page 42: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 42@goutaste #SMXMunich

You Need A Separate Intent Filter for EVERY

Domain Your App Supports

Page 43: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 43

Deep Link Ranking Factors in GooglePositive Ranking Factors

• Installation Status• Good Technical Implementation• Website SEO Signals• App Indexing API (Android)• Positive Engagement

Negative Ranking Factors

• Installation Status (Esp for iOS)• Technical Errors• Website SEO Signals• Content Mis-Match• Interstitials on Web• Negative Engagement (Soon?)

+ -@goutaste #SMXMunich

Page 44: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 44@goutaste #SMXMunich

Page 45: Google & Bing App Indexing - SMX Munich 2016

45@goutaste

Deep Links (Uninstalled) On Android

Page 46: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 46@goutaste #SMXMunich

Page 47: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 47

Bing App Indexing

https://msdn.microsoft.com/en-us/library/dn614167.aspx

@goutaste #SMXMunich

Page 48: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 48

Bing Deep Linking = Windows Phone Apps

1

2

3

4

Publish App To Windows Store & Define Launch Protocol (AKA URL Scheme)

Add applinks.org markups to webpages that you want to link your app to.

Test implementation.

Set up “URI Activation” (AKA a default URL Scheme)

@goutaste #SMXMunich

Page 49: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 49

Bing Deep Linking = Windows Phone Apps

1

2

3

4

Publish App To Windows Store & Define Launch Protocol (AKA URL Scheme)

Add applinks.org markups to webpages that you want to link your app to.

Test implementation.

Set up “URI Activation”(AKA a default URL Scheme)

@goutaste #SMXMunich

Page 50: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 50

AppLinks.Org<html>  <head>    <meta property="al:windows:url" content=“foolinks://docs"/>       <meta property="al:windows:app_id" content="115b13de-2d8e-4c70-9a36-dfd2c6a7a923"/>      <meta property="al:windows:app_name" content=“Foo App" />       <meta property="al:windows:package" content=“Foo.Fooapp_54ggd3ev8bvz6"/>       <meta property="al:windows_phone:url" content=“foolinks://docs"/>     <meta property="al:windows_phone:app_name" content=“Foo App"/>       <meta property="al:windows_phone:package" content=“Foo.Fooapp"/>      <meta property="al:web:url" content="http://applinks.org/documentation" />   </head>  <body>Hello, world!</body></html>

@goutaste #SMXMunich

Page 51: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 51

FYI, This Same Protocol Used for Apple Spotlight Search, Too

Just reference your iOS app properties instead…

@goutaste #SMXMunich

Page 52: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 52

bit.ly/applinks-validator

@goutaste #SMXMunich

Page 53: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 53

Further Reading for a Deeper Understanding of Deep Linking

@Goutaste

http://searchengineland.com/app-indexing-new-frontier-seo-apple-search-ios-app-indexing-223880

http://searchengineland.com/app-indexing-new-frontier-seo-google-search-deep-linking-226517

@goutaste #SMXMunich

Page 54: Google & Bing App Indexing - SMX Munich 2016

Emily Grossman | MobileMoxie 54

http://searchengineland.com/android-marshmallow-seo-series-sponsored-google-now-cards-23-234719

http://searchengineland.com/android-marshmallow-seo-series-googles-private-index-screen-crawling-234711 @Suzzicks

Further Reading for a Deeper Understanding of Android Marshmallow & Now on Tap

@goutaste #SMXMunich

Page 55: Google & Bing App Indexing - SMX Munich 2016

55

Emily Grossman@goutaste

www.mobilemoxie.com2 Months Free Code:

SMXMUNICHfacebook.com/mobilemoxie@mobilemoxie

Thank You!