strand-content-schema
Installation
SKILL.md
strand-content-schema
Every Strand post is an MDX file at content/posts/<slug>.mdx whose YAML frontmatter must satisfy PostFrontmatter (defined in packages/core/schema.ts). A post that does not validate cannot be committed or merged. Write frontmatter to pass on the first try, then self-check with strand validate <slug> or the MCP validate_post tool.
Required vs optional fields
Required: title, slug, description, publishedAt, author.
Defaulted (safe to omit): status (draft), tags ([]), type (BlogPosting), noindex (false), faq ([]), sources ([]).
Optional: updatedAt, canonicalUrl, featureImage, og, summary.
Rules that commonly trip validation
title≤ 70 characters (SEO title length). Write for the SERP, not just the page.description50–160 characters (Bing SEO/GEO hard window is 25–160; authored posts keep the 50-char quality floor). Soft target 120–160 for SERP snippets. Make it a real summary with the primary keyword, not filler.@strand-cms/corealso clamps viametaDescription()at emit time, but authored copy must still validate.slugis kebab-case^[a-z0-9]+(?:-[a-z0-9]+)*$. No spaces, capitals, underscores, or trailing hyphens. It must match the filename.publishedAt/updatedAtare ISO 8601 datetimes.authormust reference an existingcontent/authors/<id>.mdx. Create the author file if the persona is new.featureImage.altis required whenfeatureImageis present (accessibility + image SEO).- The body must not open with an
# H1heading — Strand themes render the frontmattertitleas the page<h1>, so an in-body H1 ships a duplicate. Start the body with the answer-first lede paragraph; use##for sections.