Understand
The JSON-LD this site publishes
A Person, an Organization, and a WebSite on every page. Lab pages and notes add an Article and the breadcrumb trail.
A script, not a meta tag
JSON-LD is a JSON object inside <script type="application/ld+json">. The page still reads as HTML. A crawler that understands schema.org can read the object as a list of typed things: a person, a site, an article.
@context says the words come from schema.org. @type names the thing. @id is a stable URL for that thing, so another node can point at it with { "@id": "…" } instead of repeating the whole record.
This site prints the scripts in the document body. A < inside the JSON is written as \u003c so the HTML parser does not treat it as a tag.
Person
Neil Black
The author node. Its URL is the about page. sameAs is an empty list until the public profiles are confirmed.
Organization
Black Box Personalization
The site as a publisher. founder points at the person. sameAs is empty here too.
WebSite
Every page
The site node names the origin and the description. Its publisher is the organization. Lab pages and notes add a second script.
The graph for a path
Pick a public path. The JSON is the same object the layout prints. Lab pages and notes add an Article and a breadcrumb list. Other paths keep the site graph. The SEO lab reads these scripts back out of the HTML.
Parse
pass2 scripts parse as JSON.
@context
passEach script names https://schema.org.
Site graph
passPerson, Organization, and WebSite are present.
Article
passThis path adds an Article and a BreadcrumbList.
Dates
passdatePublished and dateModified are YYYY-MM-DD.
sameAs
passsameAs is a list on 2 nodes.
FAQPage
passNo FAQPage node. Questions on the page stay in the HTML.
Site
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Person",
"@id": "https://www.blackboxpersonalization.com/#neil-black",
"name": "Neil Black",
"url": "https://www.blackboxpersonalization.com/about",
"sameAs": []
},
{
"@type": "Organization",
"@id": "https://www.blackboxpersonalization.com/#organization",
"name": "Black Box Personalization",
"url": "https://www.blackboxpersonalization.com",
"sameAs": [],
"founder": {
"@id": "https://www.blackboxpersonalization.com/#neil-black"
}
},
{
"@type": "WebSite",
"@id": "https://www.blackboxpersonalization.com/#website",
"name": "Black Box Personalization",
"url": "https://www.blackboxpersonalization.com",
"description": "How metrics are collected in the browser, on the network, and at the server, and how those same signals personalize a page.",
"inLanguage": "en",
"publisher": {
"@id": "https://www.blackboxpersonalization.com/#organization"
}
}
]
}This page
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Article",
"headline": "JSON-LD structured data explained",
"description": "How this site writes JSON-LD: a Person, an Organization, and a WebSite on every page, and an Article with breadcrumbs on lab pages and notes.",
"inLanguage": "en",
"mainEntityOfPage": "https://www.blackboxpersonalization.com/lab/json-ld",
"datePublished": "2026-10-08",
"dateModified": "2026-10-08",
"image": "https://www.blackboxpersonalization.com/opengraph-image",
"author": {
"@id": "https://www.blackboxpersonalization.com/#neil-black"
},
"publisher": {
"@id": "https://www.blackboxpersonalization.com/#organization"
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://www.blackboxpersonalization.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Lab",
"item": "https://www.blackboxpersonalization.com/lab"
},
{
"@type": "ListItem",
"position": 3,
"name": "JSON-LD structured data explained",
"item": "https://www.blackboxpersonalization.com/lab/json-ld"
}
]
}
]
}Recommended next
Why these picksReading path transitions…