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.
  • description 50–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/core also clamps via metaDescription() at emit time, but authored copy must still validate.
  • slug is kebab-case ^[a-z0-9]+(?:-[a-z0-9]+)*$. No spaces, capitals, underscores, or trailing hyphens. It must match the filename.
  • publishedAt / updatedAt are ISO 8601 datetimes.
  • author must reference an existing content/authors/<id>.mdx. Create the author file if the persona is new.
  • featureImage.alt is required when featureImage is present (accessibility + image SEO).
  • The body must not open with an # H1 heading — Strand themes render the frontmatter title as the page <h1>, so an in-body H1 ships a duplicate. Start the body with the answer-first lede paragraph; use ## for sections.
Installs
3
First Seen
13 days ago
strand-content-schema — bowtiedswan/strand