- POST /api/__site__/cache/purge, its library and the site config plugin
moved from vue-journal-layer with the same contract (token rules, 404 for
proxied requests unless allowProxied, deprecated siteCache names); the
route also clears the resolve cache
- server/plugins/seo-cache-purge.ts clears the SEO caches after any 200
purge, so an app whose journal, menu or FAQ layer copy of the route wins
keeps fresh SEO answers until those copies are removed
- cachePurge and siteCache runtime keys; /api/__site__/** never cached
- testing/purge-check.mjs (CMS answer change, plus a redirect added for a
route-cached page applying at once) and purge-token-check.mjs
- Nitro middleware resolves page requests once and hands the answer to the
render (event.context.seo); the route middleware reuses it
- useCmsSeo: html lang, hreflang links, og:locale and exactly one JSON-LD
script with one @graph (CMS nodes plus useSchemaNode nodes, merged by @id)
- local module (configKey seo): cms (alias of public.seo.enabled),
breadcrumbs, links.newTabHint, rootFiles, resolveFiles
- GET /api/__seo__/resolve for client navigation through the Nuxt server
- smoke harness: count=, exact header=, noheader=, reqheader=, repeated
options, resolves/apicalls/noreport lines, --no-site; v0.1.1 suite runs
unchanged against a backend without /site