NewThe tragent CLI is on npm: npx @tragent/cli scan your-store.com

Issue reference

No sitemap listing your products

Issue code
SITEMAP_MISSING
Stage
Find products
Protocol
—
Severity
Medium

What it means

tragent reports this at the “Find products” stage. The question there is “Can an agent find your products at all?” An agent has to reach your site and locate products by searching or browsing before anything else can happen.

What it does to an agent

Agents can usually carry on, but more slowly or less sure of what they found, and an unsure agent is likelier to recommend another store.

A sitemap is the only machine-readable answer to "what do you sell" that does not require running your site's search. Search engines use it to find pages; agents use it the same way, and some read it to decide which product pages to fetch before answering a shopper.

Without one, an agent has to crawl from the home page and guess. It finds the products you feature and misses the long tail, which is where comparison shoppers land: the specific size, the discontinued colour, the replacement part.

How to fix it

Publish /sitemap.xml and point at it from robots.txt with a Sitemap: line. It is the only machine-readable answer to "what do you sell" that does not require running your search.

Before: robots.txt without a sitemap
User-agent: *
Disallow: /cart
After: robots.txt naming the sitemap
User-agent: *
Disallow: /cart

Sitemap: https://shop.example/sitemap.xml

On your platform

Shopify

Shopify generates /sitemap.xml automatically, as a sitemap index with child sitemaps for products, collections, pages and blogs, and adds the Sitemap line to robots.txt. If the scan cannot find it, check that the store is not password protected and that a customised robots.txt.liquid did not drop the Sitemap line.

WooCommerce

WordPress 5.5 and later serve /wp-sitemap.xml, which includes products. Yoast SEO and Rank Math replace it with /sitemap_index.xml. Pick one, make sure it lists products, and confirm robots.txt names it. Some security plugins block sitemap requests from unknown user agents; allow them.

Headless or custom

Generate the sitemap from the same catalogue the storefront reads, so a new product appears in it on the day it goes live.

sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://shop.example/products/trail-runner-2</loc>
    <lastmod>2026-10-01</lastmod>
  </url>
</urlset>

In practice

Large catalogues should use a sitemap index that points at several child sitemaps, each under 50,000 URLs and 50 MB uncompressed. Split them by type, products in one, collections in another, so a reader that only wants products fetches one file. Keep lastmod honest: set it when a product's price, stock or content changes, not on every deploy, or readers learn to ignore it.

List the canonical URL of each product, the same one in its canonical tag, not every variant parameter or tracking link. If a product is discontinued, remove it from the sitemap when the page starts returning 404 or redirects. A sitemap full of dead links costs every reader a request per entry and teaches agents that the file is out of date.

Check the fix

  1. Open https://your-store/sitemap.xml (or the address robots.txt names) and confirm it lists product URLs.
  2. Open /robots.txt and confirm a Sitemap: line with the full https address.
  3. Run the scan; the sitemap finding should be gone and the sitemap check should report product URLs found.

Run the check that reported SITEMAP_MISSING again after the change. The scan needs no account; an issue found during an AI shopping test needs that test run again.

Terminal
npx @tragent/cli scan https://your-store.com

Common mistakes

  • A relative Sitemap: line. It must be an absolute URL.
  • A sitemap that lists only pages and posts, with products excluded by an SEO plugin setting.
  • Serving the sitemap as an HTML page at the same address, which no reader can parse.