Structured data (JSON-LD) that search engines actually use

7 min read
seo
json-ld

schema.org defines hundreds of vocabulary types, but only a small subset of them are actually consumed by search engines to produce visible rich results. Marking up a type that Google doesn't parse for rich results isn't harmful, but it also isn't worth the engineering effort if a rich-result feature is the goal.

JSON-LD is the recommended format

Structured data can be expressed as JSON-LD, Microdata, or RDFa; Google explicitly recommends JSON-LD because it's a self-contained `<script>` block that doesn't require interleaving attributes throughout your HTML:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Recipe",
  "name": "Simple Tomato Soup",
  "author": { "@type": "Person", "name": "Jane Doe" },
  "prepTime": "PT15M",
  "recipeIngredient": ["4 tomatoes", "1 onion", "2 tbsp olive oil"]
}
</script>

Types with a real, documented rich-result payoff

  • **`Article` / `NewsArticle`** — enables headline, image and publish-date display in some result formats.
  • **`Product`** — price, availability and review ratings in shopping-related results, when the marked-up data matches what's visibly on the page.
  • **`Recipe`** — cook time, ratings and image carousels in recipe-specific result formats.
  • **`FAQPage`** — expandable question/answer accordions directly in search results, only when the questions and answers are genuinely visible on the page to a visitor.
  • **`HowTo`** — step-by-step display for instructional content.
  • **`BreadcrumbList`** — replaces the raw URL in the result snippet with a breadcrumb trail matching your site's navigation.
  • **`Organization` / `WebSite`** — powers sitelinks search box and knowledge panel details at the site level, not per-page.
  • **`SoftwareApplication`** — used for tool/app pages to show category, rating and pricing information.
  • **`JobPosting`, `Event`, `LocalBusiness`, `VideoObject`** — each has its own dedicated rich-result format for job boards, events, local listings and video search respectively.

Types that mostly don't do anything visible

Generic types like `Thing`, `CreativeWork`, or deeply nested custom vocabularies rarely correspond to any rich-result feature. Marking up data with these doesn't hurt, but treating "we added schema.org markup" as a checkbox without checking whether that specific type has a documented rich-result feature is effort spent for no visible outcome.

The rule that actually gets enforced: markup must match visible content

Search engines' structured data guidelines are explicit that marked-up content must be visible to users on the page. Adding an `FAQPage` schema for questions that aren't rendered anywhere in the HTML, or a `Product` schema with a rating that doesn't appear on the page, is a policy violation that can result in the rich result being suppressed or, in repeated cases, a manual action against the site. The markup should describe what a visitor actually sees, not what you wish they saw.

Nesting and `@id` for connected entities

For pages with related entities — an `Article` written by an `Organization`, appearing on a `WebPage` that's part of a `WebSite` — nested objects are usually clearer than separate top-level blocks, and using `@id` lets you reference the same entity from multiple places without duplicating it:

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How CSP Works",
  "author": { "@id": "https://example.com/#organization" },
  "publisher": { "@id": "https://example.com/#organization" }
}

Testing before you ship

Structured data is easy to get syntactically valid but semantically wrong (mismatched types, missing required properties for a given rich-result feature). Validate the generated JSON-LD against the actual visible page content, not just against JSON syntax, before deploying it. The [schema generator](/tools/seo/schema-generator) builds valid JSON-LD for common types, and the [FAQ schema generator](/tools/seo/faq-schema-generator) and [breadcrumb schema generator](/tools/seo/breadcrumb-schema-generator) handle two of the most commonly implemented rich-result types directly. For validating the shape of arbitrary JSON structures more generally, a [JSON schema generator](/tools/json/json-schema-generator) is a related but separate concept — schema.org vocabulary describes semantic meaning for search engines, while JSON Schema describes structural validation rules for data.

Takeaway

Pick structured data types based on which rich-result feature you actually want, verify it's a type search engines document a visible payoff for, and keep the markup honest with what's on the page — that's the entire difference between structured data that helps and structured data that's ignored or penalized.

Tools from this article

← All articles