Diagnostics
Every finding has a stable code, severity, message, optional route path, and source document. Use the code in docs, filters, and CI scripts.
Codes
| Code | Severity | Group | Meaning |
|---|---|---|---|
CMS-ROUTE-404 | error | routes | Expected route returned 404. |
CMS-ROUTE-500 | error | routes | Expected route returned a 5xx response. |
CMS-ROUTE-DUPLICATE | error | routes | Two or more published documents resolve to the same route path. Only one wins at runtime; drafts are ignored. |
CMS-ROUTE-ERROR | error | routes | Route probe failed or returned another 4xx response. |
CMS-ROUTE-INVALID | error | routes | Config route resolved to an empty, non-slash, or protocol-relative path. |
CMS-ROUTE-RESOLVE | error | routes | The configured getPath function threw. |
CMS-UID-MISSING | error | routes | A route pattern needs :uid, but the document has no UID. |
CMS-ROUTE-UNMAPPED | info | routes | Document type has no configured route mapping. |
CMS-FIELD-MISSING | configured | fields | A project-specific required field is missing or blank. Severity follows that field rule. |
CMS-RELATIONSHIP-MISSING | configured | relationships | A configured relationship rule found fewer matching related records than expected. Severity follows that relationship rule. |
CMS-RELATIONSHIP-UNPUBLISHED | warning | relationships | A published document's relationship is satisfied only by draft records, so it links to nothing live at runtime. |
CMS-LOCALE-MISSING | warning | localization | A content group has no published document in one or more configured locales. Opt-in via checks.localization. |
SEO-META-MISSING | warning | seo | SEO title or description is blank across the provider-specific field shapes cms-lab understands. |
SEO-CANONICAL-MISSING | warning | seo | A 2xx route has no <link rel="canonical">. Opt-in via checks.routes.canonical. |
SEO-CANONICAL-OFF-ORIGIN | error | seo | Canonical points to a different origin, often a leftover staging hostname. |
SEO-CANONICAL-MISMATCH | warning | seo | Canonical path disagrees with the probed path beyond trailing slash and case. |
SEO-JSONLD-INVALID | warning | seo | A route has a malformed application/ld+json block. Opt-in via checks.routes.structuredData. |
SEO-JSONLD-MISSING | info | seo | A route renders no JSON-LD structured data. Informational; enabled via checks.routes.structuredData. |
SEO-OG-IMAGE-MISSING | warning | seo | Open Graph image is missing. Opt-in via checks.seo.og. |
SEO-OG-MISSING | warning | seo | Open Graph title or description is missing. Enabled via the checks.seo.og object form. |
SEO-TWITTER-MISSING | info | seo | X (Twitter) card image is missing. Enabled via the checks.seo.og object form; X falls back to the Open Graph image. |
A11Y-IMG-ALT | warning | a11y | A CMS image field is missing useful alt text in the provider native alt field. |
CMS-IMG-DIMENSIONS | warning | images | A CMS image field exposes no width/height, a common cause of layout shift (CLS). Opt-in via checks.images.dimensions. |
CUSTOM-RULE | configured | custom | A project-specific rule declared in checks.custom did not hold. Default code for declarative rules; functional rules may emit their own codes. Severity follows that rule. |
Explain a code
Use the CLI when you want the short fix guidance in your terminal.
npx @cms-lab/cli explain CMS-ROUTE-404