- lib/guard.ts: pure checks (isNoindex with Nitro route-rule patterns,
findOffenders over the app's ssr flag, every merged route rule,
.client.vue pages and experimental.inlineRouteRules)
- module options seo.noindexRoutes and seo.indexable; declared noindex
routes get X-Robots-Tag: noindex, nofollow through their route rule
- a production build fails with the D-70 message; nuxt dev and
nuxt prepare only warn
- testing/guard-check.mjs builds four fixture apps (guard:check)
- 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