An AI crawler reading a page has to infer what it's looking at from HTML and prose alone, unless the page tells it directly. JSON-LD structured data does exactly that — a block of machine-readable metadata, invisible to human visitors, that states explicitly what a page is and what its key facts are, instead of leaving a model to guess from surrounding text.
Why structured data matters more for AI than it did for classic SEO
Search engines have used structured data for rich results — star ratings, recipe cards, FAQ dropdowns in search listings — for years. AI answer engines use the same underlying data for a related but distinct purpose: extracting discrete facts to state directly in a generated answer. A price, an availability status, or an FAQ answer expressed in valid JSON-LD is a much more reliable thing for a model to quote correctly than the same fact stated only in prose, where it has to be parsed out of a sentence and could be misread or missed entirely.
The schema types that matter most for AI visibility
Organization — name, logo, URL, and sameAs links to verified profiles (social accounts, Wikipedia, Crunchbase). This is the anchor fact an AI system uses to confirm what company a page belongs to, and it's disproportionately useful for reducing brand-fact errors — see how AI hallucinations about a brand happen for why a weak or missing Organization schema tends to correlate with more of them.
Product and Offer — name, description, price, currency, and availability. For any e-commerce or SaaS pricing page, this is the single highest-leverage schema type, since price and availability are exactly the kind of fact a customer is likely to ask an AI shopping assistant about directly.
FAQPage — question-and-answer pairs matched to visible on-page content. A well-structured FAQPage block gives a model pre-packaged, citable answer text instead of requiring it to extract an answer from a longer paragraph.
Article — headline, author, and published/modified dates. Establishes recency and authorship, both relevant to whether a model treats a piece of content as current and trustworthy.
HowTo — step-by-step instructions with explicit ordering. Useful for any page answering a "how do I..." query, since it gives a model discrete, orderable steps rather than a single block of instructional prose.
Ready to optimize for AI?
Install the free CrawlPod plugin and see your WordPress site's AI visibility score in minutes.
A worked example
A minimal Product-with-Offer block, the kind that would sit in a <script type="application/ld+json"> tag on a WooCommerce product page:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless Keyboard",
"description": "Compact wireless keyboard with USB-C charging.",
"offers": {
"@type": "Offer",
"priceCurrency": "USD",
"price": "49.00",
"availability": "https://schema.org/InStock",
"url": "https://example.com/products/wireless-keyboard"
}
}
Every field here is one an AI shopping assistant could plausibly be asked about directly — price, currency, stock status. That's the general principle worth applying to any schema type: fill in the fields that correspond to the questions customers actually ask, not just the minimum required to pass a validator.
Common mistakes
- Invalid nesting. A malformed
@type/@contextstructure, or anoffersobject missing its own@type, causes some parsers to silently drop the block rather than partially read it. - Missing required fields. Product schema without a price, Article schema without a date — technically present but functionally useless for the fact it was meant to convey.
- Stale data that no longer matches the page. JSON-LD price that doesn't match the visible price, or availability marked
InStockfor a product that's actually sold out, is worse than no schema at all — it's a direct, machine-readable source of the kind of brand hallucination discussed elsewhere on this site, since a model has no reason to doubt structured data specifically flagged as machine-readable fact. - Schema that describes something the page doesn't actually contain. FAQPage schema with questions not visibly answered anywhere on the page is a mismatch between what's declared and what's real, and is the kind of thing a careful crawler — or a human auditor — can flag.
How to test what you've shipped
Two low-effort checks before treating any new JSON-LD as done: run the markup through Google's Rich Results Test to confirm it parses as valid schema.org syntax, and separately confirm the values inside it (price, availability, dates) actually match what's visibly on the page today — a validator checks syntax, not truthfulness, so both checks matter and neither substitutes for the other.
Keeping promotional data current automatically
Static JSON-LD works well for facts that don't change often — company info, product descriptions — but pricing, discounts, and time-limited offers are exactly the kind of data that goes stale fastest if maintained by hand. CrawlPod's Dynamic AI Promo Codes feature keeps Offer schema and promotional data current automatically, with auto-expiry so an AI system never surfaces a discount code that's no longer valid. For a broader look at how WordPress sites specifically add and maintain this kind of markup, see the WordPress AI visibility guide.