Structured data is a block of JSON-LD in your page that states its key facts in the schema.org vocabulary: who publishes the site, what the page is, the questions it answers, the product and its price. Answer engines and search engines can read those facts without guessing. The one rule that matters most: mark up only what is visible on the page, word for word.
This post covers the types that help answer engines most, how to write them, and what changed with FAQ rich results.
Why structured data helps answer engines
An answer engine has to work out what your page is about, who wrote it, and which facts it states. From plain HTML that takes inference, and inference makes mistakes: a price read from the wrong element, a company name confused with a product name.
JSON-LD removes the guesswork. It says, in a fixed vocabulary, "this page is an FAQ, published by this organization, and here are the questions and answers". Search engines use it for rich results and for understanding entities. Other systems that parse pages can use it the same way. No markup guarantees that an assistant will quote you, but clear, consistent facts are easier to trust than facts a system had to guess.
The types that matter most
You do not need dozens of types. For most business sites, five cover the ground:
| Use it for | Key properties | |
|---|---|---|
| Organization | Who is behind the site | name, url, logo, sameAs |
| FAQPage | A visible list of questions and answers | mainEntity, Question, acceptedAnswer |
| Product | A product page | name, offers, price, availability |
| HowTo | Step-by-step instructions | step, name, text |
| BreadcrumbList | Where the page sits | itemListElement, position |
Organization
Define your organization once, usually on the home page, with a stable @id such as https://example.com/#org. Other pages then reference it by that id instead of repeating it. Include name, url, logo and sameAs links to your official profiles. This is the anchor for your entity.
WebPage and BreadcrumbList
Every page can state its own name, description and place in the site. Breadcrumbs help systems understand structure: this post sits under the blog, which sits under the site.
FAQPage
Use it when the page shows a list of questions with their answers. Each Question has a name and an acceptedAnswer with text. The text must match the visible answer.
Product
For product pages: name, description, image, and offers with price, priceCurrency and availability. Keep it in sync with the page, or you risk stating a price the customer will not see.
HowTo
For genuine step-by-step instructions. Each step gets a name and text. Google has reduced how it displays HowTo rich results, so treat it as a description of the page, not a display feature.
The rule: markup must match the page
Google's structured data guidelines are clear that markup should describe content visible to users, and that misleading markup can lead to a manual action. For FAQs that means the questions and answers in JSON-LD should be the same text people read on the page.
The simplest way to keep them in sync is to generate both from one source. On this site, each post's FAQ is written once and rendered into the visible list and the JSON-LD from the same data, so they cannot drift.
What changed with FAQ rich results
In August 2023 Google announced that FAQ rich results would be shown only for well known, authoritative government and health websites, and that HowTo rich results would be limited too. Most sites no longer get the expandable FAQ display in search.
That does not make FAQ markup useless. It is still valid schema.org, it still describes the page accurately to any system that reads it, and a visible FAQ section is still good content: short, direct answers to real questions are exactly the kind of passage answer engines can quote. See how to write content AI assistants quote.
How to add it
- Add one
<script type="application/ld+json">block per page, in the head or body. - Use an
@grapharray to hold several connected items, linked by@id. - Validate with the Schema Markup Validator and Google's Rich Results Test after every change.
- Regenerate the markup whenever the visible content changes.
For a wider view of which types are worth your time, read JSON-LD schema that matters. For how structured data fits with other answer engine work, see what is answer engine optimization.
Common mistakes
- Markup for content that is not on the page. An FAQ in JSON-LD with no visible FAQ is exactly what the guidelines warn against.
- Answers that drift. Someone edits the visible answer and forgets the JSON-LD. Generate both from one source to avoid this.
- Several Organization entities. Defining your organization differently on every page gives machines conflicting facts. Define it once and reference it by
@id. - Stale product data. A price or availability in markup that no longer matches the page misleads both search engines and shoppers.
- Invalid JSON. One missing comma breaks the whole block. Validate every time.
Most of these come from maintaining markup by hand. If your platform or build process can generate it from the same data as the page, do that.
Beyond Google
Rich results are one use of structured data, but not the only one. Other search engines, social previews, shopping tools and AI systems that parse pages can all read schema.org markup. Because the vocabulary is shared and public, one accurate block of JSON-LD describes your page to all of them at once. That is why the markup is worth keeping even where a particular display feature has gone.
Next step
The free agent-readiness scan checks whether your homepage carries valid JSON-LD, along with the other files AI agents look for. If you run a store, the platform pages for Shopify and WordPress explain where structured data fits in agent work, and our SEO service covers the markup itself.