{"id":1480,"date":"2026-06-17T09:00:00","date_gmt":"2026-06-17T14:00:00","guid":{"rendered":"https:\/\/tolinku.com\/blog\/?p=1480"},"modified":"2026-03-07T03:49:27","modified_gmt":"2026-03-07T08:49:27","slug":"app-indexing-ecommerce","status":"publish","type":"post","link":"https:\/\/tolinku.com\/blog\/app-indexing-ecommerce\/","title":{"rendered":"App Indexing for E-Commerce Apps"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">E-commerce apps have a natural advantage for app indexing: they have thousands of product pages, each with structured data, and users actively search for products on Google. When your product pages are indexed with app links, mobile shoppers can jump directly from a search result into your app&#39;s product page, where the buying experience is typically faster and converts better than the mobile web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide covers the specific strategies for indexing e-commerce app content. For the general app indexing setup, see <a href=\"https:\/\/tolinku.com\/blog\/app-indexing-seo-mobile-apps\/\">app indexing and SEO for mobile apps<\/a>. For e-commerce deep linking strategies, see <a href=\"https:\/\/tolinku.com\/blog\/deep-linking-ecommerce-apps\/\">deep linking for e-commerce apps<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What to Index<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Product Pages (Highest Priority)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Every product in your catalog should have:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A web page at a clean URL (e.g., <code>\/products\/blue-running-shoes<\/code>).<\/li>\n<li>App Links \/ Universal Links handling for that URL.<\/li>\n<li>Structured data with Product schema.<\/li>\n<li>Alternate link tags pointing to the Android app.<\/li>\n<\/ol>\n\n\n\n<pre><code class=\"language-html\">&lt;head&gt;\n  &lt;title&gt;Blue Running Shoes - YourApp&lt;\/title&gt;\n  &lt;link rel=&quot;canonical&quot; href=&quot;https:\/\/www.yourapp.com\/products\/blue-running-shoes&quot; \/&gt;\n  &lt;link rel=&quot;alternate&quot; href=&quot;android-app:\/\/com.yourapp\/https\/www.yourapp.com\/products\/blue-running-shoes&quot; \/&gt;\n  &lt;meta name=&quot;apple-itunes-app&quot; content=&quot;app-id=YOUR_ID, app-argument=https:\/\/www.yourapp.com\/products\/blue-running-shoes&quot;&gt;\n\n  &lt;script type=&quot;application\/ld+json&quot;&gt;\n  {\n    &quot;@context&quot;: &quot;https:\/\/schema.org&quot;,\n    &quot;@type&quot;: &quot;Product&quot;,\n    &quot;name&quot;: &quot;Blue Running Shoes&quot;,\n    &quot;image&quot;: &quot;https:\/\/www.yourapp.com\/images\/blue-running-shoes.jpg&quot;,\n    &quot;description&quot;: &quot;Lightweight running shoes with responsive cushioning for road running&quot;,\n    &quot;brand&quot;: {&quot;@type&quot;: &quot;Brand&quot;, &quot;name&quot;: &quot;RunBrand&quot;},\n    &quot;sku&quot;: &quot;RB-BRS-001&quot;,\n    &quot;gtin13&quot;: &quot;0012345678901&quot;,\n    &quot;offers&quot;: {\n      &quot;@type&quot;: &quot;Offer&quot;,\n      &quot;url&quot;: &quot;https:\/\/www.yourapp.com\/products\/blue-running-shoes&quot;,\n      &quot;priceCurrency&quot;: &quot;USD&quot;,\n      &quot;price&quot;: &quot;129.99&quot;,\n      &quot;availability&quot;: &quot;https:\/\/schema.org\/InStock&quot;,\n      &quot;seller&quot;: {&quot;@type&quot;: &quot;Organization&quot;, &quot;name&quot;: &quot;YourApp&quot;}\n    },\n    &quot;aggregateRating&quot;: {\n      &quot;@type&quot;: &quot;AggregateRating&quot;,\n      &quot;ratingValue&quot;: &quot;4.5&quot;,\n      &quot;reviewCount&quot;: &quot;230&quot;\n    },\n    &quot;potentialAction&quot;: {\n      &quot;@type&quot;: &quot;ViewAction&quot;,\n      &quot;target&quot;: &quot;https:\/\/www.yourapp.com\/products\/blue-running-shoes&quot;\n    }\n  }\n  &lt;\/script&gt;\n&lt;\/head&gt;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Category Pages (Medium Priority)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Category and collection pages help users discover products:<\/p>\n\n\n\n<pre><code class=\"language-html\">&lt;script type=&quot;application\/ld+json&quot;&gt;\n{\n  &quot;@context&quot;: &quot;https:\/\/schema.org&quot;,\n  &quot;@type&quot;: &quot;CollectionPage&quot;,\n  &quot;name&quot;: &quot;Running Shoes&quot;,\n  &quot;description&quot;: &quot;Browse our collection of running shoes for road, trail, and track&quot;,\n  &quot;url&quot;: &quot;https:\/\/www.yourapp.com\/categories\/running-shoes&quot;,\n  &quot;numberOfItems&quot;: 45,\n  &quot;potentialAction&quot;: {\n    &quot;@type&quot;: &quot;ViewAction&quot;,\n    &quot;target&quot;: &quot;https:\/\/www.yourapp.com\/categories\/running-shoes&quot;\n  }\n}\n&lt;\/script&gt;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Deal and Sale Pages (High Priority, Time-Sensitive)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sale pages attract high-intent searches (&quot;running shoes sale,&quot; &quot;Black Friday deals&quot;). Index them with time-sensitive structured data:<\/p>\n\n\n\n<pre><code class=\"language-html\">&lt;script type=&quot;application\/ld+json&quot;&gt;\n{\n  &quot;@context&quot;: &quot;https:\/\/schema.org&quot;,\n  &quot;@type&quot;: &quot;OfferCatalog&quot;,\n  &quot;name&quot;: &quot;Summer Sale&quot;,\n  &quot;description&quot;: &quot;Up to 50% off running shoes and activewear&quot;,\n  &quot;url&quot;: &quot;https:\/\/www.yourapp.com\/sale\/summer&quot;,\n  &quot;potentialAction&quot;: {\n    &quot;@type&quot;: &quot;ViewAction&quot;,\n    &quot;target&quot;: &quot;https:\/\/www.yourapp.com\/sale\/summer&quot;\n  }\n}\n&lt;\/script&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Product Structured Data for Rich Results<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Google supports <a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/product\" rel=\"nofollow noopener\" target=\"_blank\">product rich results<\/a> that show price, availability, and ratings directly in the SERP. These require specific fields:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Required Fields<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Field<\/th>\n<th>Example<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td><code>name<\/code><\/td>\n<td>&quot;Blue Running Shoes&quot;<\/td>\n<td>Product title<\/td>\n<\/tr>\n<tr>\n<td><code>image<\/code><\/td>\n<td>URL to product image<\/td>\n<td>Shows in rich result<\/td>\n<\/tr>\n<tr>\n<td><code>offers.price<\/code><\/td>\n<td>&quot;129.99&quot;<\/td>\n<td>Displays price<\/td>\n<\/tr>\n<tr>\n<td><code>offers.priceCurrency<\/code><\/td>\n<td>&quot;USD&quot;<\/td>\n<td>Currency code<\/td>\n<\/tr>\n<tr>\n<td><code>offers.availability<\/code><\/td>\n<td>InStock\/OutOfStock<\/td>\n<td>Stock status<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Recommended Fields<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Field<\/th>\n<th>Example<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td><code>aggregateRating<\/code><\/td>\n<td>4.5 stars<\/td>\n<td>Shows star rating<\/td>\n<\/tr>\n<tr>\n<td><code>review<\/code><\/td>\n<td>Individual reviews<\/td>\n<td>May show review snippets<\/td>\n<\/tr>\n<tr>\n<td><code>brand<\/code><\/td>\n<td>&quot;RunBrand&quot;<\/td>\n<td>Brand name in results<\/td>\n<\/tr>\n<tr>\n<td><code>sku<\/code><\/td>\n<td>&quot;RB-BRS-001&quot;<\/td>\n<td>Product identifier<\/td>\n<\/tr>\n<tr>\n<td><code>gtin<\/code><\/td>\n<td>&quot;0012345678901&quot;<\/td>\n<td>Universal product code<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Product with Reviews<\/h3>\n\n\n\n<pre><code class=\"language-html\">&lt;script type=&quot;application\/ld+json&quot;&gt;\n{\n  &quot;@context&quot;: &quot;https:\/\/schema.org&quot;,\n  &quot;@type&quot;: &quot;Product&quot;,\n  &quot;name&quot;: &quot;Blue Running Shoes&quot;,\n  &quot;image&quot;: [&quot;https:\/\/www.yourapp.com\/images\/shoes-front.jpg&quot;, &quot;https:\/\/www.yourapp.com\/images\/shoes-side.jpg&quot;],\n  &quot;brand&quot;: {&quot;@type&quot;: &quot;Brand&quot;, &quot;name&quot;: &quot;RunBrand&quot;},\n  &quot;offers&quot;: {\n    &quot;@type&quot;: &quot;Offer&quot;,\n    &quot;price&quot;: &quot;129.99&quot;,\n    &quot;priceCurrency&quot;: &quot;USD&quot;,\n    &quot;availability&quot;: &quot;https:\/\/schema.org\/InStock&quot;,\n    &quot;priceValidUntil&quot;: &quot;2026-12-31&quot;\n  },\n  &quot;aggregateRating&quot;: {\n    &quot;@type&quot;: &quot;AggregateRating&quot;,\n    &quot;ratingValue&quot;: &quot;4.5&quot;,\n    &quot;reviewCount&quot;: &quot;230&quot;,\n    &quot;bestRating&quot;: &quot;5&quot;\n  },\n  &quot;review&quot;: [\n    {\n      &quot;@type&quot;: &quot;Review&quot;,\n      &quot;author&quot;: {&quot;@type&quot;: &quot;Person&quot;, &quot;name&quot;: &quot;Alex M.&quot;},\n      &quot;datePublished&quot;: &quot;2026-02-15&quot;,\n      &quot;reviewRating&quot;: {&quot;@type&quot;: &quot;Rating&quot;, &quot;ratingValue&quot;: &quot;5&quot;},\n      &quot;reviewBody&quot;: &quot;Best running shoes I have owned. Lightweight and comfortable.&quot;\n    }\n  ],\n  &quot;potentialAction&quot;: {\n    &quot;@type&quot;: &quot;ViewAction&quot;,\n    &quot;target&quot;: &quot;https:\/\/www.yourapp.com\/products\/blue-running-shoes&quot;\n  }\n}\n&lt;\/script&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Sitemaps for Large Catalogs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">E-commerce apps often have thousands of products. Generate sitemaps programmatically:<\/p>\n\n\n\n<pre><code class=\"language-javascript\">async function generateProductSitemap(products) {\n  let xml = &#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\\n&#39;;\n  xml += &#39;&lt;urlset xmlns=&quot;http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9&quot;\\n&#39;;\n  xml += &#39;        xmlns:xhtml=&quot;http:\/\/www.w3.org\/1999\/xhtml&quot;\\n&#39;;\n  xml += &#39;        xmlns:image=&quot;http:\/\/www.google.com\/schemas\/sitemap-image\/1.1&quot;&gt;\\n&#39;;\n\n  for (const product of products) {\n    xml += &#39;  &lt;url&gt;\\n&#39;;\n    xml += `    &lt;loc&gt;https:\/\/www.yourapp.com\/products\/${product.slug}&lt;\/loc&gt;\\n`;\n    xml += `    &lt;lastmod&gt;${product.updatedAt}&lt;\/lastmod&gt;\\n`;\n    xml += `    &lt;changefreq&gt;daily&lt;\/changefreq&gt;\\n`;\n    xml += `    &lt;priority&gt;0.8&lt;\/priority&gt;\\n`;\n    xml += `    &lt;xhtml:link rel=&quot;alternate&quot; href=&quot;android-app:\/\/com.yourapp\/https\/www.yourapp.com\/products\/${product.slug}&quot; \/&gt;\\n`;\n\n    if (product.imageUrl) {\n      xml += &#39;    &lt;image:image&gt;\\n&#39;;\n      xml += `      &lt;image:loc&gt;${product.imageUrl}&lt;\/image:loc&gt;\\n`;\n      xml += `      &lt;image:title&gt;${escapeXml(product.name)}&lt;\/image:title&gt;\\n`;\n      xml += &#39;    &lt;\/image:image&gt;\\n&#39;;\n    }\n\n    xml += &#39;  &lt;\/url&gt;\\n&#39;;\n  }\n\n  xml += &#39;&lt;\/urlset&gt;&#39;;\n  return xml;\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Sitemap Index<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For catalogs with over 50,000 products, use a <a href=\"https:\/\/developers.google.com\/search\/docs\/crawling-indexing\/sitemaps\/large-sitemaps\" rel=\"nofollow noopener\" target=\"_blank\">sitemap index<\/a>:<\/p>\n\n\n\n<pre><code class=\"language-xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&lt;sitemapindex xmlns=&quot;http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9&quot;&gt;\n  &lt;sitemap&gt;\n    &lt;loc&gt;https:\/\/www.yourapp.com\/sitemaps\/products-1.xml&lt;\/loc&gt;\n    &lt;lastmod&gt;2026-06-17&lt;\/lastmod&gt;\n  &lt;\/sitemap&gt;\n  &lt;sitemap&gt;\n    &lt;loc&gt;https:\/\/www.yourapp.com\/sitemaps\/products-2.xml&lt;\/loc&gt;\n    &lt;lastmod&gt;2026-06-17&lt;\/lastmod&gt;\n  &lt;\/sitemap&gt;\n  &lt;sitemap&gt;\n    &lt;loc&gt;https:\/\/www.yourapp.com\/sitemaps\/categories.xml&lt;\/loc&gt;\n    &lt;lastmod&gt;2026-06-17&lt;\/lastmod&gt;\n  &lt;\/sitemap&gt;\n&lt;\/sitemapindex&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Deep Link Handling for Product URLs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your app must handle every product URL correctly:<\/p>\n\n\n\n<pre><code class=\"language-kotlin\">class ProductActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        val uri = intent.data ?: run {\n            showHomePage()\n            return\n        }\n\n        val productSlug = uri.lastPathSegment ?: run {\n            showProductListing()\n            return\n        }\n\n        \/\/ Load product by slug\n        viewModel.loadProduct(productSlug)\n    }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Handling Out-of-Stock and Removed Products<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When a user opens a deep link to a product that no longer exists:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Show a helpful fallback<\/strong> (similar products, category page), not a blank screen or error.<\/li>\n<li><strong>Track the 404<\/strong> in your analytics to identify broken deep links.<\/li>\n<li><strong>On the web side<\/strong>, return a 410 (Gone) HTTP status for permanently removed products so Google removes them from the index.<\/li>\n<\/ol>\n\n\n\n<pre><code class=\"language-kotlin\">viewModel.loadProduct(productSlug).observe(this) { result -&gt;\n    when (result) {\n        is Success -&gt; showProduct(result.product)\n        is NotFound -&gt; showSimilarProducts(productSlug)\n        is Error -&gt; showCategory()\n    }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Measuring E-Commerce App Indexing<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Search-to-Purchase Funnel<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Track the complete funnel:<\/p>\n\n\n\n<pre><code>Google search impression\n  \u2192 Click (Search Console)\n    \u2192 App open via deep link (app analytics)\n      \u2192 Product view (app analytics)\n        \u2192 Add to cart (app analytics)\n          \u2192 Purchase (app analytics + revenue tracking)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Attribution<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Attribute purchases to search traffic using UTM parameters preserved through the deep link:<\/p>\n\n\n\n<pre><code>Search result \u2192 https:\/\/www.yourapp.com\/products\/shoes?utm_source=google&amp;utm_medium=organic\n  \u2192 App opens with these parameters\n    \u2192 Track: purchase attributed to &quot;google \/ organic&quot;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Tolinku E-Commerce Integration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/tolinku.com\/features\/deep-linking\">Tolinku<\/a> handles deep link routing for e-commerce product URLs. Configure routes like <code>\/products\/:slug<\/code> in the <a href=\"https:\/\/tolinku.com\/docs\/use-cases\/e-commerce\/\">Tolinku dashboard<\/a> and Tolinku handles App Links verification, Universal Links hosting, and fallback routing for users without the app.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For e-commerce deep linking strategies, see <a href=\"https:\/\/tolinku.com\/blog\/deep-linking-ecommerce-apps\/\">deep linking for e-commerce apps<\/a>. For app content search visibility, see <a href=\"https:\/\/tolinku.com\/blog\/app-content-search-results\/\">app content in search results<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Set up app indexing for e-commerce apps. Index product pages, category listings, and deal pages to drive organic traffic from search to your shopping app.<\/p>\n","protected":false},"author":2,"featured_media":1479,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"App Indexing for E-Commerce Apps","rank_math_description":"Set up app indexing for e-commerce apps. Index product pages, category listings, and deal pages to drive organic traffic from search.","rank_math_focus_keyword":"app indexing e-commerce","rank_math_canonical_url":"","rank_math_facebook_title":"","rank_math_facebook_description":"","rank_math_facebook_image":"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/og-app-indexing-ecommerce.png","rank_math_facebook_image_id":"","rank_math_twitter_title":"","rank_math_twitter_description":"","rank_math_twitter_image":"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/og-app-indexing-ecommerce.png","footnotes":""},"categories":[16],"tags":[64,20,58,110,69,190,63,359],"class_list":["post-1480","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-marketing","tag-app-indexing","tag-deep-linking","tag-e-commerce","tag-marketing","tag-mobile-development","tag-product-pages","tag-seo","tag-structured-data"],"_links":{"self":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/comments?post=1480"}],"version-history":[{"count":4,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1480\/revisions"}],"predecessor-version":[{"id":2613,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1480\/revisions\/2613"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media\/1479"}],"wp:attachment":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media?parent=1480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/categories?post=1480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/tags?post=1480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}