A

Discovery

MEDIUM

Sitemap resolvable and includes at least one product URL

An XML sitemap is reachable and includes at least one product-shaped URL. A sitemap that omits product URLs forces every crawler into slower, less complete frontier discovery.

What this check looks for

We resolve the XML sitemap (or sitemap index) declared in robots.txt — or fall back to `/sitemap.xml` — and classify each `<loc>` entry against a set of product-URL patterns (`/products/...`, `/product/...`, `/p/<id>`, etc.). v2 drops the legacy ≥10 product threshold: a single product URL is enough to confirm the sitemap covers products. We surface the product-URL coverage percentage as evidence so the merchant can see how much of their catalog is actually discoverable.

Which AI surfaces it affects

  • Google AI Mode (UCP)80
  • Microsoft Copilot70
  • ChatGPT (ACP)30
  • Perplexity30
  • Meta AI30

Weighted against the live specs — ACP 2026-04-17, UCP 2026-04-08.

How to fix it

Publish a sitemap containing product URLs

Shopify

A few minutes
  1. Shopify auto-generates `/sitemap.xml` (an index) plus per-section sitemaps including `/sitemap_products_*.xml`.
  2. If product URLs are missing, confirm the products are published (Online Store sales channel) and SEO-visible.

Platform docs ↗

BigCommerce

A few minutes
  1. BigCommerce auto-generates `/xmlsitemap.php` containing product URLs.
  2. Storefront → SEO → confirm `Include in store sitemap` is enabled for products.

WooCommerce

A few minutes
  1. Install Yoast SEO or Rank Math. Both publish an XML sitemap including products at `/sitemap_index.xml`.
  2. Yoast: SEO → Settings → APIs → XML sitemaps → ON.

Custom / headless

Developer
  1. Generate a sitemap that lists every product URL.
  2. Place it at `/sitemap.xml` and reference it from `robots.txt`.
// Example sitemap generator (run on build or cron)
import { writeFile } from "node:fs/promises";

async function generateSitemap(products: { handle: string; updatedAt: string }[]) {
  const urls = products.map(p => `
  <url>
    <loc>https://yourdomain.com/products/${p.handle}</loc>
    <lastmod>${p.updatedAt}</lastmod>
  </url>`).join("");
  const xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">${urls}
</urlset>`;
  await writeFile("public/sitemap.xml", xml);
}

The spec it's pinned to

  • sitemaps.org — XML sitemap format

    The sitemaps.org protocol defines the XML sitemap format crawlers consume to enumerate a site's URLs. A sitemap that omits product URLs forces crawlers into frontier discovery, which on JS-heavy stores misses the long tail.

sitemaps.org protocol

Does your store pass this check?

Run the full audit — 82 checks across five AI shopping surfaces. Most tools only check whether you get mentioned; we check whether an agent can buy from you.

Related discovery checks

← All 82 checks