---
title: Structured data
description: What Reed derives per page, and what you supply yourself.
---

Two independent mechanisms put schema.org JSON-LD on your pages.

## `jsonLd` — what you write

```json
{
  "jsonLd": [
    { "@context": "https://schema.org", "@type": "Organization", "name": "Acme" }
  ]
}
```

An array of JSON objects, copied **verbatim onto every page**. Reed does not validate the
shape beyond it being JSON — this is your data, passed through.

Site-level only. There is no per-page frontmatter equivalent.

## `structuredData` — what Reed derives

<ParamField name="structuredData" type="boolean" default="true">
  Site-wide switch for automatic per-page emission.
</ParamField>

When on, each page gets an article object plus a `BreadcrumbList`. The article type is
decided by three rules, in order:

<Steps>
  <Step title="Generated API pages get no article">
    An endpoint page is a reference surface, not an article, so none is emitted.
  </Step>
  <Step title="type: changelog gets Article">
    A page whose frontmatter sets `type: changelog` is emitted as `Article`, with
    `datePublished` derived from its most recent dated section.
  </Step>
  <Step title="Everything else gets TechArticle">
    The default for documentation pages.
  </Step>
</Steps>

`title` and `description` come from the page's frontmatter, which is one more reason to
write a description on every page.

The `BreadcrumbList` is always exactly the page's own single `ListItem` — it is not a
navigation trail reconstructed from your tab and group structure.

## The two do not interact

Turning `structuredData` off does not remove your `jsonLd`; they are separate outputs from
separate inputs. A site can have both, either, or neither.

Turn the derived emission off when you want to control the article markup yourself — for
example when your pages are already described by a richer object you supply through
`jsonLd`. Two competing article objects on one page is worse than either alone.

## Verifying

Structured data is emitted into the built HTML, so grep the output rather than guessing:

```sh
grep -o '"@type":"[^"]*"' dist/index.html | sort -u
```

Whether a search engine acts on it is a separate question from whether it is present, and
only the second one is Reed's to answer.
