You know WordPress, but the front end outgrew a theme
The usual trigger is not curiosity about architecture. Marketing or operations already publish in WordPress, sometimes for years, or they just moved to it, and nobody wants to retrain on a new CMS. WordPress is the most widely used CMS on the web, so that is a very common position to be in. At the same time, the product direction needs custom tools, client-facing workflows, or several small applications in the browser, not a classic marketing or corporate site wrapped in a theme.
In a headless setup, WordPress stays the content back end on PHP. A separate front end, usually Next.js or React on JavaScript, loads posts, pages, custom types and fields through the REST API at `/wp-json/wp/v2/` and renders the experience you actually need. WordPress no longer owns the public HTML layout; it owns the content and much of the admin workflow your team already trusts.
↑ Back to topWho headless is for, and when a normal WordPress site is better
Headless earns its complexity when WordPress should remain the editorial system but the visitor experience is intentionally custom. If the goal is a straightforward published site with visual editing and no application behavior, a standard WordPress build is simpler and faster to operate. See WordPress web design for that path.
Signals headless may fit
- Editors must keep the WordPress dashboard for content, but the public site is really a web application.
- You need multiple custom interfaces, internal tools, or client portals fed from the same content model.
- Integrations and UI logic belong in JavaScript, not in a theme template and page builder layout.
Signals to stay on a normal WordPress site
- The site is primarily marketing, informational or corporate publishing with modest interactivity.
- Staff rely on page builders or block layouts for most pages and expect WYSIWYG parity on the live site.
- There is no product-like feature set that justifies a separate front-end codebase and host.
| Situation | Normal WordPress | Headless WordPress |
|---|---|---|
| Primary goal | Publish pages and campaigns with familiar editing tools | Ship a custom application experience while keeping WordPress for content |
| Front end | Theme (and often a page builder) renders HTML | Next.js or React app renders HTML; WordPress serves JSON via REST |
| Editor expectations | What you see in the editor matches the live page closely | Live preview of the custom front end must be built explicitly |
| Plugin strategy | Many front-end plugins work as marketed | Back-end plugins often stay; front-end rendering plugins usually do not carry over |
| Hosting shape | One WordPress stack is typical | WordPress back end plus a Node or static host for the front end |
A web application disguised as a website
When I say a web application disguised as a website, I mean the visitor flow behaves like software: authenticated areas, multi-step tasks, dashboards, configurators, or several small apps that share content and business rules. It may still look like a brand site from the outside, but the hard problems live in interaction design and integration, not in picking a theme demo.
Keep WordPress for content
Your team keeps posts, pages, custom post types and fields in the dashboard they already know. Training cost stays low compared with moving editorial work to a new headless CMS.
Skip a custom admin for everything
WordPress already provides roles, workflows, revisions and media. Pairing it with the REST API often avoids building a separate content admin just to launch the application side.
Trade theme limits for front-end freedom
You are not customizing a theme until it breaks. You build a purpose-made interface focused on the jobs your users need to do, while WordPress supplies structured content.
That combination can reach launch day faster than standing up a new CMS plus a bespoke admin, and it is sometimes cheaper, because the editorial layer reuses WordPress instead of being rebuilt. Sometimes cheaper is the honest limit: integration depth, previews and migration work can still dominate the budget.
↑ Back to topThe stack I use
Most of the time I choose Next.js for the public front end, or React when the project already standardizes on it. The browser experience is JavaScript; WordPress remains PHP on the server as the content system of record. Data flows through the WordPress REST API by default. GraphQL is available through plugins such as WPGraphQL if a team already standardized on it; I still default to REST unless there is a concrete reason to add that layer.
| Piece | Technology | Who typically owns it |
|---|---|---|
| Content and media | WordPress (PHP) | Your editorial team in wp-admin |
| Structured fields and types | WordPress (CPTs, meta, ACF or similar) | Agreed during discovery, maintained in the dashboard |
| Public HTTP API | REST at `/wp-json/wp/v2/` (and plugin routes) | WordPress host and integration developer |
| Public site and app UI | Next.js or React | Front-end developer; deployed on a JS-friendly host |
| Authentication for drafts or private API | Application passwords (since WordPress 5.6) or agreed auth | Ops plus developer; never shared owner passwords |
Define the content model up front: custom post types, taxonomies, required fields and which objects the front end must list, filter and detail. Changing the model mid-build ripples through templates, caching and SEO. For deeper product work outside WordPress, compare custom web app development and API integration services.
↑ Back to topPlugins: decide before the build
A major advantage of keeping WordPress as the back end is that many plugins still add value on the server: SEO metadata, forms processing, security hardening, caching at the origin, custom post types and workflow. The catch is compatibility: decide the plugin list during scoping so you connect only what the front end truly needs, instead of paying to reverse-engineer every dashboard feature.
Plugin categories to decide early
- SEO plugins such as Yoast SEO.Often expose title, description and schema-related output through REST fields or dedicated routes. Plan how the front end reads them; do not assume the plugin silently fixes URLs on the public domain.
- Forms.Front-end markup from many form plugins does not carry over headless. Build a form in the JavaScript app that posts to the plugin REST endpoint, a custom REST route or another agreed API.
- Page builders, sliders and theme-bound blocks.These render HTML inside WordPress. They do not automatically become React components. Either migrate content into structured fields or accept a redesign of those sections.
- Caching and security on WordPress.Origin caching, firewall rules and login hardening still help protect wp-admin and the API. Public page caching is handled in Next.js (ISR, static generation or server components), not by treating the old theme cache as the plan.
| Category | On WordPress back end | On the front end |
|---|---|---|
| Yoast SEO | Continues managing metadata in the dashboard | Read API fields and print head tags in app layout |
| Custom fields (ACF, etc.) | Define structure editors use | Map fields to components; register REST exposure explicitly |
| Membership or ecommerce extensions | May work server-side | Checkout and account UI must be rebuilt or bridged deliberately |
| Page builder layouts | Stored as shortcodes or HTML in content | Usually replaced by structured content or new UI |
SEO in a headless build
Search engines still need clean HTML, stable URLs and accurate metadata on the domain visitors use. Headless does not remove SEO work; it moves part of it into the front-end codebase. I do not promise rankings. I do make sure metadata and content are present in the rendered page source.
When Yoast SEO is part of the stack, I integrate what Yoast already calculates into the Next.js or React layout. For posts and pages, Yoast adds `yoast_head` (prefabricated head HTML) and `yoast_head_json` (structured data) to REST responses. For arbitrary URLs, Yoast exposes `/wp-json/yoast/v1/get_head?url=`. Title, meta description, canonical, Open Graph and schema can flow from those outputs into server-rendered or statically generated pages so crawlers see them without executing a client-only shell.
Plan beyond meta tags
- Canonical URLs and internal links.Point to the public front-end domain, not the WordPress back-end URL hidden behind the scenes.
- Sitemaps.Decide whether the sitemap lives on the front-end host, is generated at build time, or is proxied from WordPress, and keep it aligned with the canonical domain.
- Redirects.Migration from a theme site often needs redirect rules on the edge or front-end host. Redirects created in WordPress (with Yoast SEO Premium or a redirect plugin) do not reach the front-end host on their own; plan how they apply to visitor-facing URLs.
- Rendered HTML.Prefer server rendering or static generation in Next.js so primary content and headings appear in view source, not only after client hydration.
Previews and editing
Be direct about limits: headless does not give editors a live block-editor preview of the custom front end out of the box. The Preview button in WordPress assumes the theme renders the site. Once the theme is decoupled, preview becomes explicit integration work, not a free extra.
- Step 1
Accept that drafts require authenticated API access
Unpublished content is not available from anonymous REST calls. Use application passwords or another agreed mechanism so the front end can request draft payloads securely.
- Step 2
Wire Next.js Draft Mode (or equivalent)
A secret-protected route on the front-end site enables draft mode when opened from WordPress preview links. While enabled, data fetching uses authenticated requests against the REST API.
- Step 3
Document what editors should expect
Clarify which post types preview, how long draft mode lasts, and whether layout matches production exactly. Partial preview is still common for app-like templates.
How I quote a headless build
Pricing depends on the complexity of the front end and the application you want visitors or staff to use, because that is the variable. We are not pricing a custom theme; we are pricing custom JavaScript focused on your workflows, plus how deeply the app must read and write WordPress through the REST API. Every project gets a fixed written quote before work.
- Step 1
Send what the application must do
Describe user roles, screens, integrations and success checks in plain language. Attach wireframes or an existing site if they exist.
- Step 2
List plugins and content types you rely on
Include SEO, forms, membership, multilingual tools and field plugins. Note which features must survive the move from a theme.
- Step 3
I scope front-end effort and integration depth
I map templates, data flows, auth, previews, migrations and hosting setup. Unknowns become assumptions in writing, not silent extras.
- Step 4
You receive a fixed written quote
The quote states deliverables, exclusions and what requires a change order. Work starts after scope and quote are agreed.
| Factor | Why it matters |
|---|---|
| Front-end screens and features | Custom UI dominates effort compared with a theme-based site |
| REST integration depth | Read-only listings usually take less work than two-way sync, custom endpoints or realtime features |
| Plugins to connect | Each plugin may need REST exposure, webhooks or replacement UI |
| Previews and draft workflow | Draft Mode routes, secrets and editor expectations are build work |
| Hosting setup | Two environments: WordPress back end and front-end host, plus staging |
| Content migration | Moving builder HTML into structured fields can exceed greenfield setup |
Agencies can deliver under their brand through white-label web development. For advisory work before committing to a build, see WordPress consultant or WordPress outsourcing when you need a delivery partner.
↑ Back to topWhat to send me
The fastest path to a useful quote is a concise brief plus honest constraints. Public URLs are fine for a first pass; credentials come after scope is agreed.
Organization and public site: {{name and URL}}
Why headless now: {{what broke or what the app must do}}
Users and roles: {{visitor, client, staff tasks}}
Must-keep WordPress pieces: {{post types, plugins, editorial workflow}}
Front-end expectations: {{Next.js or React, auth, languages, design reference}}
Integrations: {{CRM, payments, search, internal APIs}}
SEO and URLs: {{Yoast or other, domain plan, redirects needed}}
Previews: {{who previews drafts and how often}}
Hosting today: {{WordPress host; any front-end host preference}}
Timeline and constraints: {{launch window, compliance, approval chain}}Why clients hire us
One person accountable
Fernando does or reviews every job. No account managers between you and the work.
Fixed written quote
Scope and price in writing before any work starts. Rework on our mistakes is on us.
Bilingual EN/ES
Fer LLC (Wyoming), working in English and Spanish. Replies the same business day, 9 AM to 9 PM ET, at +1 310 734 8943.
Work you can check
Building websites since 2001, with published projects in the portfolio.
Frequently asked questions
What is headless WordPress?
WordPress remains the content back end while a separate JavaScript front end (often Next.js or React) loads content through the REST API and renders the public experience. Editors can keep using wp-admin; visitors see the custom app, not a traditional theme.
Is headless WordPress worth it?
It is worth considering when your team must keep WordPress for content but the product is app-like and a theme or page builder cannot carry the interface. For straightforward marketing or corporate publishing, a normal WordPress site is usually simpler to build and operate.
Can you use React or Next.js with headless WordPress?
Yes. That is the pattern I use most often: Next.js or React on the front end, WordPress on PHP for content, connected through `/wp-json/wp/v2/` and plugin REST routes. GraphQL via WPGraphQL exists as an alternative if your team already depends on it.
Does Yoast SEO work with headless WordPress?
Yoast still manages metadata in WordPress. Integrate REST fields such as `yoast_head` and `yoast_head_json`, or call `/wp-json/yoast/v1/get_head?url=` for a given URL, then print the result in your front-end layout. Sitemaps, redirects and canonical URLs still need a plan for the public domain.
How are previews handled in headless WordPress?
They do not work automatically. Set up an explicit preview flow, often Next.js Draft Mode with a secret-protected route and authenticated REST requests for drafts, commonly using application passwords. Treat previews as scoped work.
Is headless WordPress more expensive than a regular WordPress site?
It depends on front-end complexity and integration depth, not the word headless alone. Custom application UI and API wiring usually exceed a theme project, but reusing WordPress can avoid a new CMS and admin. Fer Marketing prices per project with a fixed written quote before work; request one for your requirements.
Can my team keep using the WordPress dashboard?
Yes for content, media and most editorial workflows you configure. They will not get a native live preview of the decoupled front end unless that integration is part of the project.
How does hosting work for headless WordPress?
Plan for two environments: a WordPress back-end host (PHP, database, wp-admin) and a host for the Node or static front-end build. Staging for both sides is part of realistic scope; I do not recommend a specific vendor in this guide.
Send what the application must do and the WordPress plugins you rely on through contact or fer@fer.marketing: we reply the same business day, 9 AM to 9 PM ET. Headless builds are priced per project, with a fixed written quote before work, including white-label delivery for agencies.