Website, docs, and blog from one CMS: the content architecture for your SaaS

Website in a page builder, docs in GitBook, blog in WordPress: three logins, three designs, no internal link graph. I show you how one content model in a headless CMS feeds all three outputs, what developer docs really need, when docs-as-code remains the better choice, and how our own site runs entirely on Sanity and Next.js.
8 min readMatthias RadscheitMatthias Radscheit
Happycodingen-US

TL;DR

Website in a page builder, docs in GitBook, blog in WordPress: three logins, three designs, no internal link graph. I show you how one content model in a headless CMS feeds all three outputs, what developer docs really need, when docs-as-code remains the better choice, and how our own site runs entirely on Sanity and Next.js.

  • Three separate systems cost you more than three invoices: website, docs, and blog never link to each other, and that internal link graph is part of what decides your visibility.
  • One content model stores features, prices, and integrations once as structured documents. Website, docs, and blog then become three renderings of the same content.
  • Developer docs make three special demands: versioning, multi-language code blocks, and fast search. All three are solvable in a CMS, but you have to plan for them from the start.
  • Docs-as-code remains the right choice when only developers write. As soon as support and product contribute, the CMS wins with previews and an editorial workflow.
  • We run happycoding.agency itself entirely on Sanity and Next.js: one content lake for pages, blog, FAQ, and structured data — the Sanity free plan carries you up to 10,000 documents.

Three systems, three logins, one fractured presence

I know this starting position from almost every SaaS project: the marketing website lives in Webflow or another page builder, the developer docs in GitBook or ReadMe, the blog in a WordPress somebody set up at some point. Three logins, three designs, three invoices. And nobody feels responsible for the whole.

How it gets there is understandable: each system was the fastest solution at the moment it was introduced. Marketing wanted to build pages without developers, the developers wanted to write Markdown, and the blog ran where blogs traditionally run. According to W3Techs, WordPress still powers 40.2 percent of all websites in September 2026.

The invoices themselves are not the problem. GitBook Premium costs 65 US dollars per site per month plus 12 US dollars per additional editor, ReadMe Pro 250 US dollars per month; both prices apply with annual billing (as of September 2026). Any funded SaaS can carry that. The real price appears on no invoice.

It lies in the fractured presence: the docs at docs.yourproduct.com never link into the blog, the blog never into the docs, and the website knows neither. The internal link graph that shows search engines your topical authority simply does not exist. And a prospect who moves from the polished homepage into docs with an outdated logo feels the break immediately.

This article is part of our series on the anatomy of a B2B SaaS website. Today we go one layer down: the content architecture that decides whether your presence is cut from one cloth or from three.

What belongs together: a content model instead of page copies

To the core of the problem: the three systems don't store content, they store pages. An example makes the difference tangible. You launch a new feature, say a Slack connector. That spawns a section on the integrations page, a docs chapter, an announcement blog post, and a changelog entry: the same information four times, copied by hand into three systems.

When the feature's name or a price changes later, the search begins: which of the four places did we forget? Exactly these forgotten copies produce the outdated prices on landing pages and the dead links in the docs your customers complain about.

A content model turns this around. You store content as structured documents with fields and references, not as finished pages. The Slack connector is then one document: name, description, logo, category, a reference to its docs chapter. Website, docs, and blog become three renderings of the same content.

What that gives you in practice:

  • One link graph: docs chapters, blog posts, and landing pages reference each other in the model; the frontend renders internal links from those references on a single domain.
  • One design system: all three outputs use the same components; a redesign is one frontend project, not a triple project.
  • One source for prices: prices live as structured data and appear on the pricing page, in comparison tables, and in the blog always in the same state.
  • Page types that scale: 30 integration landing pages are 30 documents plus one template, not 30 hand-built pages.

The technical foundation for this is a headless CMS with a content model built on references: a content lake like Sanity's, which stores structured documents instead of finished pages.

What developer docs really need

A warning up front: the docs are the most demanding of the three content types. Putting website and blog into a CMS is routine. Developer docs make three demands that naive CMS setups regularly fail at. If you know them, you can plan for them.

Add to that their weight in sales: developers check the docs before they book a demo. Public, indexable docs pages also rank for long-tail queries your marketing pages will never cover. Every documented error message, every endpoint is a potential entry page.

Versioning: documenting v2 while v3 is live

As soon as your API runs on version 3 but paying customers still develop against version 2, you need both docs states in parallel. In the content model, you solve this with a version field per chapter and a version switcher in the frontend. What matters is the boundary: version only the API-adjacent chapters, not half the docs. Every versioned page is a page you maintain twice.

Code blocks: more than gray boxes

Developers judge your docs by the code examples. In concrete terms: syntax highlighting, a copy button, and the same example in several languages as tabs, say cURL, TypeScript, and Python. In Sanity's Portable Text, code blocks are structured blocks of their own with a language attribute; how they look is decided by your frontend.

One exception belongs in the definition from day one: the API reference itself has no place in the CMS. It gets generated from your OpenAPI specification, otherwise it will lie at some point. Hand-maintained endpoint lists go stale with the first release someone ships under deadline pressure.

Search: without it, the docs die

Nobody reads docs front to back; whoever searches for error code 429 wants to land on the right chapter in seconds. The standard for this is Algolia DocSearch: free for technical documentation, in use by over 9,000 projects from React to Laravel. If your docs live structured in the CMS, you have an alternative: your own search via the query API, weighting headings and code separately.

Docs-as-code or CMS: the honest trade-off

Before you pull everything into the CMS, one counterproposal deserves a serious look: docs-as-code. The idea, shaped by the Write the Docs community: you treat documentation like source code. It lives as Markdown next to the code in the Git repository, changes go through pull requests, and CI builds a static site from it, with Docusaurus for example.

I'll say it openly: for pure developer teams, this is often the better choice. The docs change in the same pull request as the code, reviews are built in, the tools cost nothing. If you live this workflow, don't give it up for an architectural ideal.

The limits show as soon as non-developers are supposed to contribute. Support staff who first have to learn Git and pull requests stop writing docs. There is no preview for editors, no references to prices or features, and the blog in the marketing system stays cut off. The overview:

CriterionDocs-as-codeHeadless CMS
Authorsdevelopers with Gitsupport, product, and marketing too
Reviewpull requestworkflow with preview in the studio
VersioningGit branches, built inversion field in the content model
Reusecopy-paste between filesreferences to features and prices
License costs0 eurosSanity: free up to 10,000 documents
Link graph to the websiteseparate systemsone domain, one graph

My advice is therefore often a hybrid: the API reference is generated from the OpenAPI specification, guides, tutorials, and concept articles live in the CMS, and the same Next.js frontend renders both under one domain. The line doesn't run between the tools, it runs between the authors: whoever writes determines the system.

How we do it ourselves: one content lake for everything

As proof that I'm not just selling theory here: happycoding.agency runs entirely on Sanity and Next.js, hosted on Vercel. No page builder, no WordPress, no separate docs tool. Every landing page, every blog post, every FAQ lives as a structured document in the same content lake.

In concrete terms: a blog post here is not a lump of HTML but a document with separate fields for body text, key takeaways, FAQ, and sources. The frontend renders the page from it, plus structured data as JSON-LD, such as FAQPage and Article for search engines. Categories are references, from which topic pages emerge automatically.

In everyday work, this changes the division of labor: I write content in the studio without needing a developer; layout changes are code and go through Git. Both sides work in their own tool, neither blocks the other. This separation of content and presentation is exactly where page builders and WordPress themes fail.

I recommend the same mechanism for SaaS content that has to stay current. The subprocessor list in the trust center is the prime example: maintained once as structured content, it appears on the trust page and in the DPA annex always in the same state, instead of going stale in three PDFs.

On costs: the Sanity free plan carries 20 users, 10,000 documents, and 250,000 API requests per month; the Growth plan costs 15 US dollars per user per month (as of September 2026). Our site, with well over 100 blog posts, runs far below those limits. My assessment from our own projects: the budget goes into building the frontend, not into licenses.

When separate systems are still the right call

Honest consulting includes the counter-list: there are constellations in which I'd advise you against the one-CMS architecture.

  • Your API reference is your product: if the developer docs are your most important sales channel and ReadMe's interactive API explorer is exactly your tool, then buy the specialized tool.
  • A well-worn docs-as-code process: a team that has maintained docs via pull requests with CI checks for years loses a working process through a migration and gains only architectural aesthetics.
  • Open source projects: community contributions arrive as pull requests; Docusaurus plus DocSearch is the established, free standard here.
  • No frontend owner: without someone who builds and permanently maintains a Next.js frontend, page builder plus GitBook is the more honest choice than a half-finished custom build.

The rule to remember: a content model nobody maintains is worse than three systems that run. The architecture has to fit your team, not the other way around.

Next steps

If the three-systems problem is bugging you right now, start with an inventory: for one week, note every place where the same information is maintained twice. That list is your business case, more precise than any debate over CMS vendors.

The second step is a question about authors: who is supposed to maintain docs, blog, and website in twelve months? If only developers write, little speaks against docs-as-code. If support, product, and marketing are supposed to contribute, there is hardly a way around a content model.

As a B2B website agency we build exactly these architectures: a content model in Sanity, one Next.js frontend for website, docs, and blog, migration including redirects. If you want to know whether this pays off for your SaaS, book a free intro call: 30 minutes, a concrete assessment, no slides.

Frequently asked questions

What do GitBook and ReadMe cost compared to a headless CMS?
GitBook Premium costs 65 US dollars per site per month plus 12 US dollars per additional editor, ReadMe Pro 250 US dollars per month; both prices apply with annual billing (as of September 2026). Sanity starts free with 10,000 documents and 20 users; in return, you pay for building the frontend. The license costs are rarely the deciding factor, the double maintenance of your content is.
Can I really maintain developer docs in a CMS like Sanity?
Yes: code blocks with syntax highlighting, version fields, and references to features can all be modeled in the content model. The limit is the API reference: you are better off generating it from your OpenAPI specification instead of maintaining it by hand. Guides, tutorials, and concept articles, on the other hand, belong in the CMS, where support and product can contribute too.
What does docs-as-code mean?
Docs-as-code means treating documentation like source code. It lives as Markdown in the Git repository, changes go through pull requests, and CI builds a static site from it, with Docusaurus for example. The approach comes from the Write the Docs community and works excellently as long as all authors work with Git.
Does hosting docs on the subdomain docs.myproduct.com hurt my SEO?
The honest answer: opinions differ. What is certain: internal links on one domain support your topical authority, and in practice docs and blog subdomains often do not link to each other at all. My assessment: the missing link graph does more damage than the subdomain itself. If you are building fresh, put docs and blog under /docs and /blog on the main domain.
How do I migrate existing content out of GitBook or WordPress?
Both systems let you export: GitBook to Markdown, WordPress via XML export or the REST API. The real effort is not the export but the rework: transferring content into your content model, moving internal links, and setting up redirects for old URLs. Plan the migration page by page instead of as a big bang, and start with the pages that have traffic.
Do I need Algolia for docs search?
Not necessarily. Algolia DocSearch is free for technical documentation and quickly integrated, which is why it is the standard. If your docs already live structured in the CMS, you can also build the search on its query API, with GROQ in Sanity's case. More important than the tool: the search should weight headings and code and forgive typos.

Sources

Related articles

Open for select projects

Let's talk about your project

Book a no-obligation call, send us an email, or use the form – we'd love to hear from you.

150+
Completed projects
15
Years of experience
8
Senior‑level team members