Custom-built shop? Your product data is probably missing
The big hosted platforms write schema.org product data for you: name, price, currency and stock, in a form AI shopping assistants read without guessing. Shops built by a developer or agency, and many on other platforms or older themes, often leave it out or leave out price and stock. Nothing looks wrong to a human visitor, so nobody notices.
Why it matters
When someone asks an AI assistant what to buy, it compares products by those facts. A product without them can be misread or left out of the answer.
Check yours
- Run the free check on one of your product pages: it lists exactly which facts are missing.
- Or check a whole catalogue: our free quote reads your sitemap and checks a sample of product pages.
The fix: one template, added once
Don't paste product data into each page by hand: it goes stale the day a price changes. Instead your developer adds one template to the product page template, filled from your product records. Every product is covered, and it stays right.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "{{ product name }}",
"description": "{{ short description, plain text }}",
"url": "{{ this page's full address }}",
"image": ["{{ main image, full https address }}"],
"sku": "{{ product code }}",
"brand": { "@type": "Brand", "name": "{{ brand }}" },
"offers": {
"@type": "Offer",
"url": "{{ this page's full address }}",
"price": "{{ current selling price, number only, e.g. 1299.00 }}",
"priceCurrency": "{{ ISO currency code, e.g. ZAR or USD }}",
"availability": "https://schema.org/{{ InStock or OutOfStock }}"
}
}
</script>- Add it once to the product page template, filled from the product database, so every product page gets its own values. Don't paste fixed values into individual pages: they go stale when prices change.
- Output it in the HTML the server sends (server-side), not with JavaScript after the page loads: most AI crawlers don't run JavaScript.
- price is a plain number with a dot for decimals (1299.00, not "R1 299,00"); priceCurrency is the three-letter ISO code.
- availability must change with stock: InStock, OutOfStock, PreOrder or BackOrder.
- Leave out a field rather than guess it (for example brand or sku if the shop doesn't record them).
- Check one page with Google's Rich Results Test, then click "Check my catalogue again" on your Khanyo report to check every product page.
On a platform with an app store
OpenCart, PrestaShop, Magento, Wix and Squarespace each have a marketplace or settings for structured data or rich snippets. Look for one that outputs schema.org Product with price, currency and availability, then run the free check on a product page to confirm it worked.
Check your shop free. It takes about 20 seconds and tells you exactly what’s blocked and the lines that fix it.
Check my shop