As mobile technology becomes an increasingly common way for users to access the internet, you need to ensure that your mobile content (whether on a mobile website or in a mobile app) is as accessible to users as possible. In the past this process has been relatively siloed, with separate URLs for desktop and mobile content and apps tucked away in app stores.
But as app and mobile web usage continues to rise, the ways in which people access this content is beginning to converge, which means it's becoming more important to keep all of these different content locations linked up. This means that the way we think about managing our web and mobile content is evolving:
So how do we improve the interaction between these different types of content and different platforms, getting to the point of being able to have a single URL which takes the user to the most appropriate version of the content based on their personal context?
The first step is to ensure that we are correctly implementing deep linking (e.g., linking to a particular screen within an app) for apps which have comparable webpage content, to allow for our app content to rank in mobile search.
Google indexation provides benefits for both Android and iOS apps. The benefits for Android apps are twofold:
- users searching on an Android device who have not yet installed your app will see the app show up in mobile search results; and
- Android users who do have your app installed will get query autocompletions when they use browser search which can include results from your app, as well as seeing enhanced display elements in the SERP (such as the app icon). It’s basically like rich snippets for apps.
On iOS, app ranking is currently only supported for apps already installed on the device. Apple users should see search results which include links to installed apps and also include the enhanced display elements mentioned above.
In addition, Google recently announced that mobile apps which use the new App Indexing API for deep linking may receive a rankings boost in mobile web search. They are releasing a new and improved version of Google Now, "Now on Tap," in their latest OS update (Android M), which allows you to search content across your phone without navigating out of whatever app (or website) you are currently using. The catch is, that app content has to be in their index in order to be included in a "Now on Tap" search.
It’s not just Google, either; Apple is implementing their own version of a search index to allow iOS9 users to search and discover web and app content without using a third-party search engine, Bing has its own approach to app indexation and ranking, and other services aren’t far behind.
This post, however, will focus on how to setup your Android and iOS apps to appear in Google search results. While the idea of app indexation isn’t new, it is an area of rapid innovation and the process for getting your apps indexed by Google has recently been simplified. This post is therefore intended to provide a brief overview of that process and to serve as an update to the information which is currently available.
The implementation
The good news is that it’s getting simpler to add the relevant markup to your web content and get your app content indexed and ranking in mobile search results.
The basic process is only three steps:
- Support HTTP deep links in your mobile app. For iOS you will need to do this by setting up support for "Universal Links." "Universal Links" are what Apple calls HTTP links that have a single URL which can open both a specific page on a website and the corresponding view in an app.
Note: At this point, you can register your app with Google, associate it with your website and stop there—as long as you are using the same URLs for your web content and your app content, they should be able to automatically crawl, index, and attempt to rank your app content based on your website’s structure. However, implementing App Indexing and explicitly mapping your web content to your app content using on-page markup can provide additional benefits and allow for a bit more control. Therefore, I recommend following the full process, if possible. - Implement Google App Indexing using the App Indexing API for Android, or by integrating the App Indexing SDK for iOS 9.
- Explicitly map your web pages to their corresponding app screens using either a rel=alternate link element on the individual page, by referencing the app URLs in your XML sitemaps, or by using schema.org markup.
You can find a more step-by-step explanation of this process (looking at Android and iOS separately) below.
The app indexation process used to be a bit more complex, because HTTP links aren’t supported by older iOS versions. Instead, developers had to use something called "Custom URL Schemes" to link to iOS app content. This meant that you essentially had to create a unique scheme for your app URLs and then add support for these in the app code.
Custom URL schemes have a couple other downsides besides adding complexity, namely:
- different app developers can claim the same custom URL scheme, whereas with HTTP links you can associate the app to a particular domain or set of domains; and
- with custom URL schemes, tapping the URL when the app isn’t installed results in a broken link (because it only links to content within the app), whereas HTTP links are web links as well and can take the user to a webpage if the app isn’t installed (as long as the URL is the same for both the app view and the corresponding webpage).
While you can still use the custom URL scheme approach, the good news is that Google’s App Indexing is now compatible with HTTP deep link standards for iOS 9, which Apple calls "Universal Links."
You should still add markup to any webpages which have content corresponding to a particular app screen. Think of it like like rel=canonical or like mobile switchboard tags, but for apps. Be aware that when Google finds a link between a webpage and an app page which they think are equivalent, they will compare the two pages and you will receive a ‘Content Mismatch’ error in the Search Console if they don’t believe the content is similar enough.
Getting Android apps indexed in Google
Step 1: Support HTTP deep links in your app by adding intent filters to your manifest.
An intent filter is a way of specifying how an app responds to a particular action. Intent filters for deep links have three required elements: <action>, <category>, and <data>. You can find more guidance on this from Google Developers. Here is their example of an intent filter which enables support for HTTP deep links:
<intent-filter android:label="@string/filter_title_viewrecipes"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="recipe-app.com" android:pathPrefix="/recipes" /> </intent-filter> </activity>
Noindex option:
Just like for websites, you can add noindex directives for app content as well. Include a noindex.xml file in your app to indicate which deep links should not be indexed, and then reference that file in the app’s manifest (AndroidManifest.xml) file. You can find more detail on how to create and reference the noindex.xml file here.
Step 2: Associate your app to your site in Google Search Console.
This is done in Google Search Console (you can also do it from the Developer Console). As long as your app is set up to support deep links, this step is technically all you have to do to allow Google to start indexing your app. It will allow Google to index and crawl your app automatically by attempting to figure out the app structure from your website structure.
However, if you do stop here, you will not have as much control over how Google understands your content, which is why the explicit mapping of pages to app versions is recommended. Also, if you can’t use the API for some reason, you need to make sure that Googlebot can access your content. You can check that this is configured correctly in your site’s robots.txt file by testing some of your deep links using the robots.txt tester tool in the Search Console.
Step 3: Implement app indexing using the App Indexing API.
Using the App Indexing API is definitely worthwhile; apart from anything else, apps which use the API should receive a rankings boost in mobile search results, and you don’t need to worry about Googlebot struggling to access your content.
The App Indexing API allows you to annotate information about the activities within your app that support deep links (as laid out in your intent filters). For details on how to set this up, see the Google Developers guidance.
Step 4: Test your implementation.
You can test your implementation (always on a fresh installation of your app!) with the following tools. (Find more info about how to use each of these tools here.)
Android Debug Bridge – to test deep links from the command line
Fetch as Google (Search Console) – to test what Google sees when it crawls your app deep links
You can also track search traffic to these deep links in the Search Console’s Search Analytics report.
Getting iOS apps indexed in Google
Step 1: Support HTTP deep links in your app by setting up support for "Universal Links."
To support universal links in your iOS app, you need to first ensure that your app handles these links correctly by adopting the UIApplicationDelegate methods (if it doesn’t already use this protocol). Once this is in place, you can associate your app with your domain.
You’ll do this by:
- adding an "associated domains" entitlement file to your app’s project in XCode that lists each domain associated with your app; and
- uploading an apple-app-site-association file to each of these domains with the content your app supports—note that the file must be hosted at the root level and on a domain that supports HTTPS.
To learn more about supporting Universal Links, view the Apple Developer guidance.
Step 2: Register your app with Google (using the GoogleAppIndexing SDK for iOS 9).
You’ll need to add the App Indexing SDK to your app using the CocoaPods dependency manager. For step by step instructions, check the Google Developers’ guide. Basically what this does is allows you to register your app with Google, just like Android apps are registered via the Search Console. This also means that Google can now read the apple-app-site-association file to understand what URLs your app can open.
Step 3: Test your implementation.
You can test whether this is set up correctly by tapping a universal link in Safari on an iOS 9 device and checking that it opens the right location in your app.
Mapping your webpages to your app with on-page markup or sitemaps
Once you’ve set up the deep linking support for your Android and/or iOS app(s), the final step is to explicitly identify the corresponding webpages to the correct app screens using one of the supported markup options. This step allows you to indicate more clearly to Google what the relationship is between a given page and its corresponding app link (both of which should already share the same URL if you are using HTTP links). Following this step also allows you to indicate the relationship to Bing crawlers, which otherwise wouldn’t see the app content, and to allow Apple to index your iOS app.
You can do this mapping either in the head of the individual page using a link element, using schema.org markup (for Android only), or in an XML sitemap.
A note on formats for app links
The format for an Android HTTP link uses the format of:
android-app://{package_name}/http/{host_path}
The {package_name} is the app’s "Application ID," which is how it is referenced in the Google Play Store. So a link to the (example) Gizmos app might look like this:
android-app://com.gizmos.android/http/gizmos.com/example
For iOS links, you use the app’s iTunes ID instead of the Package Name. So an iOS app URL uses this format:
ios-app://{itunes_id}/{scheme}/{host_path}
For HTTP links the {scheme} is "http," which would mean your URL would look like this:
ios-app://{itunes_id}/http/{host_path}
How to reference your app links
Note: Google provides guidance on the three currently supported deep link methods here.
Option 1: Link rel=alternate element
To add an app link reference to an individual page, you can use an HTML <link> element in the <head> of the page.
Here is an example of how this might look if you have both an iOS and Android app:
<html> <head> ... <link rel="alternate" href="android-app://com.gizmos.android/http/gizmos.com/example" /> <link rel="alternate" href="ios-app://123456/http/gizmos/example" /></head> <body> … </body>
Option 2: Schema.org markup (currently supported on Android only)
Alternatively, if you have an Android app, you can use schema.org markup for the ViewAction potential action on an individual page to reference the corresponding app link.
Here is an example of how this might look:
script type="application/ld+json"> { "@context": "<a href="https://schema.org">https://schema.org</a>", "@type": "WebPage", "@id": "<a href="https://gizmos.com/example">https://gizmos.com/example</a>", "potentialAction": { "@type": "ViewAction", "target": "android-app://com.gizmos.android/http/gizmos.com/example" } } </script>
Option 3: Add your app deep links to your XML sitemap
Instead of marking up individual pages, you can use an <xhtml:link> element in your XML sitemap, inside the <url> element specifying the relevant webpage.
Here is an example of how this would look if you have both an iOS and an Android app:
<?xml version="1.0" encoding="UTF-8" ?> <urlset xmlns="https://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="https://www.w3.org/1999/xhtml"> <url> <loc>https://gizmos.com/example</loc> <xhtml:link rel="alternate" href="ios-app://123456/http/gizmos/example" /> <xhtml:link rel="alternate" href="android-app://com.gizmos.android/http/gizmos.com/example" /> </url> ... </urlset>
Additional information
What about apps which don’t have corresponding web pages?
Unfortunately, as of this writing, Google does not officially offer app indexation for apps which don’t have corresponding web content. However, they are trying to move in this direction, and as such are beginning to try this out with a handful of apps with “app-only” content. If you have an app with app-only content, and would like to get this content indexed, you can express interest using this form.
What about getting my app indexed in Bing?
Bing supports two open standard options for linking webpages to app links:
To learn more about how to implement these types of markup, see the guidance on the Bing blog.
Quick reference checklists
Will Critchlow recently spoke about app indexation in his presentation at Searchlove London. He provided two useful checklists for Android and iOS app indexing:
To learn more about app indexing by Google, check out Emily Grossman and Cindy Krum’s excellent post over on SearchEngineLand.
Hello, Bridget
You have provided much-needed info and ideas at the perfect time. Many of my client's websites are receiving an average 70% traffic through the mobiles and now we are working for an app for all those ecommerce websites. It is indeed a challenging task to get your app content indexed by Google. Android M has many amazing features, including in mobile search. I really appreciate your given insights. These checklists should be followed, and I think it will work for sure.
Definitely not an area of SEO I have ever gotten into, but am starting to work on an app project with a client. Perfect timing with some clarity on what I need to look at!
I agree. I've done some App Store optimization but never needed to get app content indexed. I now know where to go to get this info. I do think that we'll see the need for this decline though. As web applications get better and behave like more like real applications and not static webpages there will be fewer actual "apps" on phones.
Recently i lunched my mobile app on android and i phone .and i want to increase visibility of my app on search engine.This blog help lot.thanks Bridget nice way to discussed about mobile indexing .I have completed 4 week but still my app did not index by google . steps related to Android apps indexed and IOS indexed in Google is important for every app owner.
Good development! Everything is very clear. You know how to find the good functioning of the app for Google? thanks.
One wow data from Google which can prove app indexing is must (but for that app is must).
Google: "40% Of Searches Return App-Indexed Results In Top Five"
It is a very interesting article today because most people connect these devices Tarver .
Thank you Bridget.
Today online marketing competition is very high and we need to better and different from other website. It's happed the same with SEO and optimize website. Any way , these article´s so helpful and i agree with Alberto. thank you for sharing your knowledge Bridget
Hello Bridget,
Thanks for the way you have shared the information is much appreciated. Apps are the part of our daily life now. In IT industry, This is the time of apps and games which need to be optimized on the android app store and iOS app store which would helps to generate the traffic from mobile searches because people are not able to optimize the apps in the way they need to optimized. Indexing of the app content mean you would gain authority on app store, have boost in apps position and direct your apps for more download.
This is a really nice reference article. Can you also perhaps recommend an article for analytics tracking best practices in iOS and Android apps specifically for tracking app-indexing and deeplinking URLs which capture Appl's spotlight search as well as Google Search please?
Those instructions are great and a really big help! You can always find someone lost in the beggining when they're starting their own business and a lot more if they don't know how to handle these sort of things, we've all been there! So knowledge goes from ones to the others, thanks!
@Bridget Randolph, thanks for your handy article to get your app content indexed by Google.
Can you recommend any tool to optimize your apps for search engine (Google)?
Hi Asim, for now rather than trying to specifically optimize app content for search engine crawlers, I would simply suggest that you make sure the web version of your content is well-optimized and that the web page and app screen content is the same. The web page and app screen should be equivalent in order for the app content to be able to rank (otherwise you may get a Content Mismatch error in the Search Console).
That being said, once app-only content indexation becomes more widespread I'm sure app content optimization will be a topic in itself!
great article Bridget!
I have a couple of question for you of for whoever is facing my same case..
I'm trying to optimize a website including a web desktop version, a web mobile version (with a different domain) and a IOS native app. In order to optimize the desktop site and the web mobile site I'm following the Google guideline for the separate urls configuration. This means that I have to add a meta tag link="alternate" on the desktop page, pointing the corresponding web mobile page..and viceversa, I have to add a meta tag canonical in the web mobile page pointing to its corresponding desktop page.
If I also want to optimize my IOS native app, should I insert in the desktop page another meta tag <link rel="alternate"> pointing to the native app link? (Es: <link rel="alternate" href="NativeApplink" >). If yes, I'll have in the same desktop page, two different meta tag link="alternate" pointing to the web mobile page and to the native app page. Is this configuration correct?
If I have my native IOS app installed in my Iphone with IOS9, what will be the preferred version in the Google SERP after a Google search? The native app version rather than the mobile web version?
Thanks
Great article, Bridget. Thanks for sharing!
I really do not like using apps to view websites on mobile phones, Google may penalize you for duplicate content. So I always use responive web pages. The responsive web design is essential today to attract customers using mobile devices to browse, every day more, helps to improve the ranking since the last Google update their algorithm said they would reward the websites with responsive design, and has many more advantages.
Brilliant, thanks very much, very useful actionable article!
Just the information I was looking for. Thank you!
I will follow your guide for indexing my future apps.
Great article Bridget! This is the most informative and clearest article I have found on this subject.
I have one question though, my deep links are set up for my iOS app as {scheme}://{host}/{path} with an example looking like exampleapp://detail/product. For mapping my webpages to my app I would use ios-app://{itunes_id}/{scheme}/{host_path}. Would the above example look like ios-app://123456789/exampleapp/product or ios-app://123456789/exampleapp/detail/product?
Thanks!
It's too important that Google index your app but a lot of people don't know how to do this. Thanks to you we have learn a little bit about this question. The app's are the future probably!
Awesome stuff Bridget!
That's an extensive guide about app indexing Bridget, I just want to ask a question here: "Have you observed any ranking change after moving to the new indexing API?
Thanks for the great and on time information which we need as like many other, we are also working on apps for our few clients. I am just wondering if you guys can recommend us any tool for optimization purposeses.
Very interesting, thanks for sharing!
Very useful post. Thanks for sharing!
Thanks for wonderful article.
I runs a tax and finance blog. I had just developed a native app for android.
Most of my articles are of 2000 to 3000 words on desktop version. For ease of reading and searching by user i breaks the pages into 5-7 segments and post them as diff articles in the app. Now i want to use app indexing but i am confused how to use the canonical tags to avoid duplicate data issue in my situation.
How does this work with content duplication, e.g. your app is pretty much your mobile site?
Thanks Bridget Randolph , for such a useful information, I got the points for options 1,2,3 and Quick reference checklists like a SEO work.... Great! .. Good Luck..!!
The documentation is fine, will try this one out.
Nice read and love the fact that you included schema.org as so many people forget about rich data markup.
This is helpful post so thanks to share this information.........
Thanks for developing this type of analyzing content and sharing with us.