React CMS: A Practical Guide for Operators

by Masoud Golchin
Developer working on a React CMS admin interface at a desk with dual screens

Most decisions about React CMS platforms are made in the wrong order. Teams select platforms that have a lot of stars on GitHub or platforms that simplify one developer’s process for creating a demo, not based on the needs of their users. Editors end up taking longer to publish content. Six months in, someone has already written a proposal to move away from the platform.

A React CMS is not a single structure. A React CMS consists of multiple variations with different owners, different failure modes, and varying costs. This guide is for the person who has to live with the choice; the operator, product owner, or engineering lead. The goal is to publish content faster without requiring a ticket to be created for each page update. If you want to read about when this pattern matters, we have written about how headless CMSs fit React teams in more detail in a companion piece.

What a React CMS Actually Means

There are systems that utilize React on the admin side of the CMS, and there are systems that allow disconnected, API-based delivery of content to a React frontend. Most systems today fulfill both of these needs. The Cosmic team states this well in their React CMS overview: When using React, the interface is built to control the content, and the delivery of the content to the platform is then handled by the CMS. A connection is made through an API.

The split is significant because it determines ownership. When dealing with a typical WordPress setting, the CMS takes care of rendering, routing, and SEO. When dealing with a React CMS, frontend teams take ownership of all three. This can be a burden or a relief, depending on the presence of a frontend team.

The Payload project should serve as a marker for where the category is/was going. It was started in 2021 and was designed as a self-hosted TypeScript CMS. By 2026, it had rebranded to Next.js and an instant backend and had reached over 44,000 GitHub stars. There is little to no distinction between the worlds of CMS and frontend frameworks, and Payload is a prime example of this.

The Four Archetypes, and What They Are Really For

Every single React CMS falls into one of four models. Get the model, and the framework that fits inside said model, should be easy to determine.

Headless API CMS

Payload, Keystone, Sanity, Contentful, Hygraph, Strapi. Content lives in a database. The CMS offers it via REST or GraphQL. React reads it, renders it, and owns everything downstream. This is the default for teams that with real editorial volume, multiple channels (web, mobile, in-product), and content models that will expand outside of a blog. The alternative is working with two separate systems, the CMS and the frontend that consumes it.

Git-based CMS

Formerly known as Netlify CMS, Decap has over 19 thousand stars. Similar to TinaCMS, which has 13.8 thousand stars, both solutions store content as Markdown or JSON files in your Git repository, which means that editors create and modify content via a UI, while developers work with the regular source files. This library embodies the concept where documentation, marketing sites, or publishing teams with a build step can thrive, while high frequency editors, content types with complex relations, and non-technical stakeholders can all fail to operate this system.

Visual builders and low-code

Builder.io, Plasmic, Webstudio, React Bricks. Compared to the others, the goal of Webstudio is for editors to create layouts page by page in a fully graphical environment and for the software to output React code to the editors. This approach, unlike the others, is geared towards placing a strong emphasis on editor autonomy. The designer in this tool, however, lacks structure and can easily lead to unstructured data. Useful for marketing teams that need to produce a high volume of campaign pages. Painful to product teams where the same content needs to be displayed across 3 different areas.

Lightweight custom

A JSON file, a build step, and an editing toolbar in a browser. Zero platforms. This approach is viable for brochure sites, portfolios, and MVPs as a one man content team. Skip this approach when you have editors, SEO involves stakes, and preview/approval workflows.

For teams that are making the structural choice beneath this all, our comparison of headless versus traditional CMSs describes where this choice can be rightfully justified and where it is not.

Headless React CMS admin dashboard showing structured content fields
Within this Payload CMS admin UI, the diverse collection of field types immediately clarifies how editors can precisely structure and manage their content. · Source: payloadcms.com

The 2026 Direction: Server-First and Typed

The last two years have seen significant shifts in how React can consume content via CMS. With the introduction of Next.js App Router, server components became the default. Additionally, the release of React 19 included View Transitions, fragment refs, and an API browser() to let the developer skip the client components from the server rendering. Payloads now use contracts-first validation with Zod and Suspense-based streaming has effectively supplanted client-side dashboards with spinning loaders and custom React components.

The most interesting takeaway is not that the existing client-side React CMS will become obsolete, but that it will actually need to move toward server-side rendering. Three factors will significantly change a traditional client-side React CMS. Those factors are:

  • Preview and draft flows have to work in a server-rendered world, not just in a client SPA.
  • Type safety between the CMS schema and the frontend becomes a real deliverable, not a nice-to-have. Zod schemas on the frontend that mirror CMS field definitions catch drift before it reaches production.
  • Performance work moves back onto the frontend team. Web Vitals, cursor pagination, and parallel preloading with Suspense are frontend concerns, not CMS features.

Our Next.js website guide reviews the differences in the various rendering approaches and which are better suited to the App Router, Pages Router, or a more static site.

The Real Pain Is Not the Platform Choice

Stack Overflow is actually the better resource to describe all the bugs that come up with most common React CMS setups, rather than a vendor Website. The most up-voted posts on the subject almost never address the question of platform choice. They show the problems builders run into after launch.

Inserting CMS HTML in React. A post about parsing HTML from a CMS to React components has 52 upvotes and 7 answers, which is a lot for a niche idea. The pattern is pretty typical: dangerouslySetInnerHTML bypasses the virtual DOM, so internal links become full page loads, and any embedded widgets become non-interactive. The solution is to use an HTML to React parser that replaces anchor tags with your router’s link component. It isn’t especially hard once you know it, but it’s pretty expensive to figure out for the first time.

Image field errors in GraphQL. Users of Gatsby with Netlify CMS hit “Field ‘image’ of type ‘File’ must have a selection of subfields.” This is a GraphQL schema issue that isn’t really a platform bug, but it does stop the build and waste time.

Dynamic routes from CMS menus. Menus and pages in a CMS are generated at edit time, while React apps define routes during the build process. This 26-upvote question is asked repeatedly, and it is always about programmatically generating routes for this gap. It can be done in any framework, but a 5 minute answer for the App Router, Pages Router, and Gatsby combined will take 2 days of your time.

Sharing a CMS client outside of React components. People who use Contentful with Next.js localization run into this problem: the CMS client is in a React context and must be used in a middleware, or in a getStaticProps helper where context does not exist. Usually the answer is a module-level singleton, but a better answer would be to put it first in the docs.

Securing SSG routes for preview content. Static site generation works well for published content, but poses problems for drafts. You need a preview mode, a signed cookie, and a rendering path that bypasses the static site generation cache. Different CMSs have different approaches for dealing with these issues.

None of these are valid reasons not to choose a React CMS. They are reasons people end up overspending. The company will find you if the vendor’s pitch doesn’t touch on these topics.

How to Choose Without Regret

Feature grids don’t do justice to a CMS. When evaluating CMSs, prioritize workflow and engineering tradeoffs, and the total cost of ownership over individual features. Feature grids often obscure the most important factors.

Can your editors publish without engineering?

Ask a real editor to create a landing page in a sandbox environment. If they need DevOps to assist, you’re purchasing a workflow debt. It doesn’t matter how sophisticated the schema is. An elegant admin interface that no one can operate is a slower version of Google Docs. The team at Electe captured this notion well in their analysis of CMS training as hidden cost . The twenty to thirty percent of software features that teams end up using is always training, not a software feature.

Who owns the frontend at year two?

Using React CMS will require your frontend team to handle performance optimization, SEO, and preview flow. If you do not have a React CMS or if your CMS won’t exist in a few months, you will incur a higher cost with a more managed platform (Contentful, Sanity) versus a self-hosted stack that you won’t be able to support. If you have a strong frontend team, self-hosting Payload or Strapi will keep platform costs flat for your content growth. For more information about this operating model decision, you can look at our Sanity versus Contentful comparison, or our Strapi vs Sanity Post for more information about the self-hosted CMS option.

What breaks at 10x your current content volume?

Git-based CMSs are great for a hundred pages, but painful for a hundred thousand. Visual builders are great for page one, but then things get messy for page fifty when every landing page has a different layout. Headless API platforms have flat performance curves and steeper day-one costs. So, think about the shape of your business in eighteen months, not the shape thing have today.

What This Looks Like in Practice

Two examples from our own work show how differently this plays out depending on the business.

When rebuilding Teton Gravity Research, platform choice was just the beginning. TGR already had 10,000 articles locked in a legacy CMS that was barely online. Two migration attempts had already failed. The real challenge was deciding how to preserve editorial workflows, deciding whether to keep or delete user-generated content(which had become a legal and operational burden), and selecting a headless stack. Building the CMS was the means to that end.

The St. Louis Magazine migration had different issues. 30,000 articles, a slow website, an editorial team fighting against the tool on a daily basis, and a strong brand that had to look as good online as it did in print. While the platform selection was important, the real work was done with the content models and the migration plan. Both of these would have been equally important with any available React CMS.

In both cases, the actual platform selection was important, but the real challenge was something else, something upstream.

The Honest Shortlist by Team Shape

Not a ranking. A rough sorting hat for where to start.

  • Small technical team, content lives in the repo. Start with TinaCMS or Decap. If you outgrow them, you will know.
  • Product team building a Next.js app, wants CMS inside the stack. Payload. It is the shape the ecosystem is moving toward, and the type safety pays back quickly.
  • Editorial team that needs custom content models and live collaboration. Sanity. Strong studio UX, real-time collaboration, and a content lake that treats content as data.
  • Enterprise or larger editorial operation, prefers a managed service. Contentful. Mature governance, multi-language handling, and predictable operations at scale.
  • Team wants API-first self-hosting on Node. Strapi or Keystone. Trade managed convenience for control and flat licensing costs.
  • Marketing-led team that ships a lot of landing pages. Builder.io or Plasmic, with clear guardrails on your design system so the visual editor does not become a graveyard of one-off components.

What to Do Next

Before you sign anything, three things need to be done. A real editor should make a page in the demo, an engineer should make a preview flow, and the migration should be sketched, ideally in half a day. The demo or preview flow showing ugly edges should be the deciding factor. If any of the three things show something the vendor didn’t mention, that is a sign to walk away.

The teams that do this right think about their CMS as a deal that lasts two years instead of a purchase. During that time, the models, previews, and integrations start to stack on top of one another and the cost to switch continues to increase. If you are just starting and need a partner that has set up this type of publishing, e-commerce, or product platform, our headless CMS work and our publishing platform practice are good jumping off points to contact us. Making this decision should be done as early as possible to avoid making the wrong choice mid-process.

Written by
Masoud Golchin
Masoud Golchin

Masoud Golchin is a backend developer at Refact, working on server-side systems, internal tooling, and infrastructure. He builds and maintains the services that support both client projects and the team’s day-to-day development workflow. His work includes backend logic, developer tools, system reliability, and the technical foundations that allow products to scale and operate consistently. At Refact, Masoud focuses on creating practical engineering solutions that help the team move faster while keeping systems organized, maintainable, and dependable.

More from Masoud Golchin
Share

FAQS

Commonly asked questions

Get in touch

What is a React CMS in plain terms?

A React CMS is either a content management system whose admin interface is built in React, or a headless CMS designed to feed content into a React or Next.js frontend through an API. Most modern platforms, including Payload, Sanity, and Contentful, are both. The practical point is that content lives in the CMS and rendering, routing, and SEO live in your React app.

How do I render HTML from a CMS in React without breaking navigation?

Do not use dangerouslySetInnerHTML for CMS content that contains internal links or interactive widgets. It bypasses React's router and virtual DOM, so links trigger full page reloads and components lose interactivity. Use an HTML-to-React parser that replaces anchor tags with your framework's link component and preserves interactive elements as React components.

Should I self-host or use a managed React CMS?

Self-hosted options like Payload, Strapi, and Keystone keep licensing costs flat and give you full control, but you own upgrades, infrastructure, and uptime. Managed services like Contentful and Sanity trade higher recurring cost for less operational overhead. Choose based on whether you have engineering capacity to run the platform at year two, not just at launch.

Do I really need a headless CMS, or can I get away with something simpler?

For a portfolio, a small marketing site, or an early MVP, you can often skip a full CMS platform and use a Git-based tool like TinaCMS, or even a JSON-backed custom editor. A full headless CMS starts paying off when you have multiple editors, real SEO stakes, preview and approval flows, or content that needs to render on more than one surface.

How does SEO work with a React CMS?

You need server-rendered or statically generated pages. Client-only React apps do not index reliably. In 2026 that usually means Next.js App Router with server components, static generation for stable pages, and server-side rendering for personalized or draft content. Web Vitals then become a frontend responsibility, not something the CMS handles for you.

Related Insights

More on Digital Product

See all Digital Product articles

Node.js Development Services: A Buyer’s Guide

Most Node.js proposals begin with the wrong question. A vendor asks for the run time preference with a blank space for the product description, the intended customer, and the supply/demand of resources in production. You are ultimately asked to choose between Node.js, Python, Go, Bun, and Deno and it ultimately feels like picking from a […]

Customer Support Portal: A Practical Guide

When a customer reset password question reaches your inbox for the fourth time on a Tuesday, the actual issue isn’t the question. The issue is that your support knowledge bases live in five places, and none are the place customers look at first. According to Gartner’s 2024 study of more than 5,700 customers, only 14% […]

Next.js Website: An Operator’s Guide

When agencies are just coming up with a proposal, they often include a Next.js website. Often, they’ll do this before the goal of the website has even been determined. Someone will suggest Next.js, and the rest of the room will agree. They assume Next.js framework, and a project goes astray. Sure, Next.js can handle certain […]