reference
The schema block
One <script type="application/ld+json"> in the head, which
says what type of thing the page is in a vocabulary other systems already know.
You will meet it called structured data, schema markup and
JSON-LD; they are the same thing.
The common mistake is declaring that a collection has members and then listing none of them.
{
"@context": "https://schema.org",
// Article, Product, Organization, Collection…
"@type": "TechArticle",
"headline": "Page — what it is",
"description": "…",
"url": "https://example.org/page",
// optional, and useful once findings start to age
"datePublished": "2026-08-10",
"dateModified": "2026-08-10",
"isPartOf": {
"@type": "Collection",
"name": "Site",
"url": "https://example.org/"
},
// ENUMERATE. A count with no members tells a reader nothing exists.
"hasPart": [
{
"@type": "VisualArtwork",
"name": "Item one",
"url": "https://example.org/items/1",
"identifier": {
"@type": "PropertyValue",
"propertyID": "sku",
"value": "0001"
}
}
]
}
It is not the same as publishing a data file of your own. That is a credence move — raw data a reader can recompute — and it carries a reach cost this block does not: a file at its own URL has to be found before it does anything, while this one rides along inside a page something has already fetched.
One optional field worth knowing: disambiguatingDescription,
defined as distinguishing an item from similar ones. Useful if your name collides
with a common noun or another product — but it is a plain description field with
no conditional behaviour, so every clause must be worth saying in an answer where
nobody was confused.