Structured data is a small block of JSON that states what a page is: an article, a product, an organisation, a set of questions. Search engines use it for rich results, and AI systems use it to understand entities and relationships.
Start with two types
Organization, once, on the homepage. It connects your name, logo, site and official profiles.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Acme",
"url": "https://acme.com",
"logo": "https://acme.com/logo.png",
"sameAs": [
"https://www.linkedin.com/company/acme",
"https://www.wikidata.org/wiki/Q123456"
]
}
</script>
sameAs is the part people skip and the part machines use most: it is how a brand name gets tied to a specific website.
BreadcrumbList, on any page with a hierarchy, so results show the path rather than a bare URL.
Then the type that matches the page
| Page | Type | What it can earn |
|---|---|---|
| Blog post or guide | Article |
Date and author shown, clearer understanding of the page |
| Product | Product with Offer |
Price, availability and reviews in results |
| Service | Service |
Clearer match for "who does X in Y" questions |
| Questions and answers | FAQPage |
Expandable questions under the result, quotable answers |
| How-to | HowTo |
Step display in some results |
| Local business | LocalBusiness |
Address, hours and map details |
| Job posting | JobPosting |
Inclusion in job search results |
Only mark up what is visible on the page. Marking up prices or reviews that a visitor cannot see breaks the rules and can cost you rich results entirely.
Common mistakes
- Invalid JSON. One trailing comma and the whole block is ignored silently. Rankwell's crawler reports pages whose JSON-LD cannot be parsed.
- Copying an example and leaving the example's values. "Acme Corp" on a real site happens more than you would think.
- Review markup on category pages that aggregates reviews of different products.
- Different data for the same page in several blocks that contradict each other.
Test before you ship
- Google's Rich Results Test shows which rich result types a page qualifies for.
- Schema.org's validator checks the syntax and types.
- View the page source and confirm the block is really in the HTML, not added later by JavaScript that crawlers may not run.
What it does for AI answers
Assistants read the page text, but structured data resolves ambiguity fast: which "Acme" this is, what the price is now, whether this is a guide or a product. Sites that state these facts clearly are easier to summarise correctly, and being summarised correctly is most of the battle.
How much is enough
Structured data has diminishing returns. A small site gets nearly all the benefit from three things: Organization on the homepage, BreadcrumbList where there is a hierarchy, and the one type that matches each template (Article for guides, Product for products).
Beyond that, add a type only when you can name what it earns you. Marking up every element of a page because the vocabulary allows it produces a lot of JSON and no visible change.
Keep it true as the page changes
Structured data drifts out of date more quietly than anything else on a page, because nobody sees it. Prices change in the template while the JSON keeps the old number; a product goes out of stock while availability still says InStock; an author leaves and their name stays.
Two habits prevent it:
- Generate it from the same data as the page. If the price in the JSON is written by hand, it will eventually disagree with the price on screen. Templates should output both from one source.
- Check it after template changes. Add the Rich Results Test to whatever you do after a deploy, on one page of each type.
When structured data contradicts the visible page, search engines treat the page as less trustworthy, which is worse than having none at all.
Rankwell reports which schema types each crawled page publishes, flags pages with none, and checks the homepage for Organization and sameAs as part of the AI search readiness score.