The jsonld escape hatch was per page only, so a site whose pages are all one type — a docs site is TechArticle, not WebPage — had to repeat the same front-matter block in every file, and a file that got missed silently shipped the wrong type. A jsonld object in your site data now sets the default for every page, with page front matter still winning.
site.jsonld sets a JSON-LD default for the whole site. The jsonld
filter picks BlogPosting for a dated page and WebPage for everything else,
and a jsonld object in front matter overrode any of it. That escape hatch was
per page, which is the wrong shape when the whole site is one type: a docs site
is TechArticle, a knowledge base is FAQPage, a product catalogue is
Product. The only way to say so was the same four lines of front matter in
every file — and the failure mode is quiet, since a page that misses them still
emits valid JSON-LD, just the generic type.
The same object now works in your site data:
{
"markup": {
"site": {
"jsonld": { "@type": "TechArticle" }
}
}
}
Every page renders as TechArticle — no front matter, nothing to forget. It
isn't limited to @type; any key you would have set per page works site-wide,
which is where the fields that genuinely don't vary belong:
"jsonld": {
"@type": "TechArticle",
"license": "https://opensource.org/licenses/MIT",
"isAccessibleForFree": true
}
Precedence is defaults → site.jsonld → page.jsonld, so a single page still
opts out of the site-wide type while keeping the rest of it — a FAQPage
inside a TechArticle site keeps the license and only replaces @type:
---
title: Frequently asked questions
jsonld:
"@type": FAQPage
---
Two things it deliberately doesn't do. A site-wide @type beats the
auto-detected BlogPosting as well — it's a default you set, not one poops
guessed — so on a site that mixes docs with a blog, set the type per page
rather than site-wide, or the posts stop being articles. And it merges into
the page's own block only: the WebSite block on the homepage and the
auto-appended BreadcrumbList on nested pages are structural, and a site-wide
@type has no business rewriting them.
Same shallow merge as the front-matter object, for the same reason — nested schema is rare, and the escape hatch is meant for whole-key replacement.