Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Plan a content strategy that drives traffic and authority—topic clusters, content pillars, and editorial calendars
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/headless-cms.md
1# Headless CMS Guide23Reference for choosing, modeling, and implementing a headless CMS for marketing content.45## When to Use This Reference67Use this when selecting a CMS for a new project, designing content models for marketing sites, setting up editorial workflows, or connecting CMS content to programmatic pages.89---1011## Headless vs Traditional CMS1213A headless CMS separates content management from presentation. Content is stored in a structured backend and delivered via API to any frontend.1415### When Headless Makes Sense1617- Multiple frontends consume the same content (web, mobile, email)18- Developers want full control over the frontend stack19- Content needs to be reused across channels20- You're building with a modern framework (Next.js, Remix, Astro)21- Marketing needs structured, reusable content blocks2223### When Traditional Works Better2425- Small team with no dedicated developers26- Simple blog or brochure site27- WYSIWYG editing is a hard requirement28- Budget is tight and WordPress/Webflow does the job2930### Decision Checklist3132| Factor | Headless | Traditional |33|--------|----------|-------------|34| Multi-channel delivery | Yes | Limited |35| Developer control | Full | Constrained |36| Non-technical editing | Requires setup | Built-in |37| Time to launch | Longer | Faster |38| Content reuse | Native | Manual |39| Hosting flexibility | Any frontend | Platform-dependent |4041---4243## Content Modeling for Marketing4445### Core Principles46471. **Think in types, not pages.** A "Landing Page" is a content type with fields — not an HTML file. This lets you reuse components across pages.482. **Separate content from presentation.** Store the headline text, not the styled headline. Presentation belongs in the frontend.493. **Design for reuse.** If testimonials appear on 5 pages, create a Testimonial type and reference it — don't duplicate.504. **Keep models flat.** Deeply nested structures are hard to query and maintain. Prefer references over nesting.5152### Common Marketing Content Types5354| Type | Key Fields | Notes |55|------|-----------|-------|56| **Landing Page** | title, slug, hero, sections[], seo | Modular sections for flexibility |57| **Blog Post** | title, slug, body, author, category, tags, publishedAt, seo | Rich text or Portable Text body |58| **Case Study** | title, customer, challenge, solution, results, metrics[], logo | Link to related products/features |59| **Testimonial** | quote, author, role, company, avatar, rating | Reference from landing pages |60| **FAQ** | question, answer, category | Group by category for programmatic pages |61| **Author** | name, bio, avatar, social links | Reference from blog posts |62| **CTA Block** | heading, body, buttonText, buttonUrl, variant | Reusable across pages |6364### SEO Fields Checklist6566Every page-level content type needs:6768- `metaTitle` — 50-60 characters69- `metaDescription` — 150-160 characters70- `ogImage` — 1200x630px social preview71- `slug` — URL path segment72- `canonicalUrl` — optional override73- `noIndex` — boolean for excluding from search74- `structuredData` — optional JSON-LD override7576---7778## Editorial Workflows7980### Draft → Review → Publish Cycle81821. **Draft** — Author creates or edits content832. **Review** — Editor reviews for accuracy, brand voice, SEO843. **Approve** — Stakeholder signs off854. **Schedule** — Set publish date/time865. **Publish** — Content goes live via API8788### Preview APIs8990All major headless CMS platforms support draft previews:9192- **Sanity**: Real-time preview with `useLiveQuery` or Presentation tool93- **Contentful**: Preview API (`preview.contentful.com`) with separate access token94- **Strapi**: Draft & Publish system with `status=draft` query parameter (v5; replaces v4's `publicationState`)9596Set up a preview route in your frontend (e.g., `/api/preview`) that authenticates and renders draft content.9798### Roles and Permissions99100| Role | Can Create | Can Edit | Can Publish | Can Delete |101|------|:----------:|:--------:|:-----------:|:----------:|102| Author | Yes | Own | No | Own drafts |103| Editor | Yes | All | Yes | Drafts |104| Admin | Yes | All | Yes | All |105106Exact permission models vary by platform. Sanity uses role-based access. Contentful has space-level roles. Strapi has granular RBAC.107108---109110## Platform Comparison111112| Feature | Sanity | Contentful | Strapi |113|---------|--------|------------|--------|114| Hosting | Cloud (managed) | Cloud (managed) | Self-hosted or Cloud |115| Query Language | GROQ | REST / GraphQL | REST / GraphQL |116| Free Tier | Generous | Limited | Open source (free) |117| Real-time Collab | Yes (built-in) | Limited | No |118| Best For | Developer flexibility | Enterprise multi-locale | Budget / self-hosted |119| Content Modeling | Schema-as-code | Web UI | Web UI or code |120| Media Handling | Built-in DAM | Built-in | Plugin-based |121122### Sanity123124**Strengths**: GROQ query language is powerful and flexible. Schema defined in code (version-controlled). Real-time collaborative editing. Portable Text for rich content. Generous free tier.125126**Considerations**: Steeper learning curve for non-developers. Studio customization requires React knowledge. Vendor lock-in on GROQ queries.127128**Marketing fit**: Best when developers and marketers collaborate closely. Strong for content-heavy sites with complex models.129130### Contentful131132**Strengths**: Mature enterprise platform. Excellent multi-locale support. Strong ecosystem of integrations. Composable content with Studio. Well-documented APIs.133134**Considerations**: Pricing scales with content types and locales. Two separate APIs (Delivery and Management). Rate limits can be tight on lower plans.135136**Marketing fit**: Best for enterprises with multi-market content needs. Good when you need established vendor reliability.137138### Strapi139140**Strengths**: Open source, self-hosted option. Full control over data. No per-seat pricing. Customizable admin panel. Plugin ecosystem. REST by default, GraphQL via plugin.141142**Considerations**: Self-hosting means you handle infrastructure. Smaller ecosystem than Sanity/Contentful. V5 migration can be significant from V4.143144**Marketing fit**: Best for teams with DevOps capability who want full control and no vendor lock-in. Good for budget-conscious projects.145146### Others Worth Knowing147148- **Hygraph** — GraphQL-native, strong for federation and multi-source content149- **Keystatic** — Git-based, good for developer-content hybrid workflows150- **Payload** — TypeScript-first, self-hosted, code-configured like Sanity151- **Builder.io** — Visual editor with headless backend, good for non-technical marketers152- **Prismic** — Slice-based content modeling, strong Next.js integration153154---155156## Integration with Marketing Skills157158### Programmatic SEO159160Use CMS as the data source for programmatic pages. Store structured data (FAQs, comparisons, city pages) as content types and generate pages from queries. See **programmatic-seo** skill.161162### Copywriting163164CMS content models enforce consistent structure. Define fields that match your copy frameworks (headline, subheadline, social proof, CTA). See **copywriting** skill.165166### Site Architecture167168URL structure, navigation hierarchy, and internal linking all depend on how content is organized in the CMS. Plan your content model and site architecture together. See **site-architecture** skill.169170### Email Sequences171172Pull CMS content into email templates for consistent messaging across web and email. Case studies, testimonials, and blog posts can feed email nurture sequences. See **email-sequence** skill.173174---175176## Implementation Checklist177178- [ ] Define content types based on page types and reusable blocks179- [ ] Add SEO fields to every page-level content type180- [ ] Set up preview/draft mode in your frontend181- [ ] Configure roles and permissions for your team182- [ ] Create sample content for each type before building frontend183- [ ] Set up webhook notifications for content changes (rebuild triggers)184- [ ] Document content guidelines for editors (field descriptions, character limits)185- [ ] Test content delivery performance (CDN, caching, ISR)186- [ ] Plan migration strategy if moving from existing CMS187188---189190## Relevant Integration Guides191192- [Sanity](../../../tools/integrations/sanity.md) — GROQ queries, mutations, CLI193- [Contentful](../../../tools/integrations/contentful.md) — Delivery/Management APIs, publishing194- [Strapi](../../../tools/integrations/strapi.md) — REST CRUD, filters, document API195