Everyone loves a headless CMS.
Developers love the API-first architecture. Designers love the component modularity. CFOs love the idea of "omnichannel" efficiency.
So you migrated. You dumped WordPress or Drupal. You moved to Sanity, Storyblok, or Contentful. You built a shiny new frontend on Vercel using Next.js.
Your Lighthouse score is 99. Your site loads in 0.4 seconds.
But to ChatGPT, you are a ghost.
We analyzed 150 B2B SaaS sites running on headless architectures. The results are terrifying.
The "JSON Blob" Problem
Traditional CMSs (even the hated WordPress) output HTML. Messy HTML, maybe, but semantic HTML. Paragraphs, headers, lists, tables. Structure.
LLMs like GPT-4 and Claude consume this structure to understand context. They rely on the semantic relationship between a header and the paragraph below it to determine facts about your pricing, features, and value props.
Headless CMSs don't store pages. They store JSON blobs.
They store "content blocks." A testimonial here. A feature grid there. A pricing card over there.
When an AI crawler (like GPTBot or ClaudeBot) hits your site, one of two things happens:
- The Hydration Fail: Your expensive Next.js frontend relies on client-side JavaScript to render those JSON blocks into HTML. The crawler sees a blank page or a loading spinner. You are indexed as empty space.
-
The Semantic Soup: You use Server-Side Rendering (SSR), but your developers mapped the content fields to generic
<div>tags instead of semantic<article>,<section>, or<table>tags because "it was easier to style with Tailwind."
Result: The LLM sees your content as a disconnected soup of text strings. It cannot reliably associate your "Enterprise Plan" price with the "SSO Feature" listed three blocks down.
The "Vercel Tax" on Visibility
We found a direct correlation: The more complex your hydration logic, the lower your AI Visibility Score.
Sites using simple Static Site Generation (SSG) fared okay. But sites using Incremental Static Regeneration (ISR) or heavy personalization—the very reasons you bought a headless CMS—are confusing the bots.
When Perplexity asks, "What is the pricing for [Your Tool]?", it often hallucinates. Why? Because on one crawl, it saw the default state. On the next, it saw a personalized variant. It can't reconcile the truth, so it makes one up.
The Fix is Semantic Rigor
You don't need to go back to WordPress. But you need to stop treating your website like an app and start treating it like a library.
-
Enforce Semantic HTML: Audit your frontend components. Are you using
<table>for pricing?<dl>for feature definitions? If everything is adiv, you are losing. -
Render for Bots, Not Just Users: Ensure your SSR strategy delivers fully formed HTML to user agents like
GPTBot. Don't rely on client-side hydration for any critical content. - Feed the Context Window: Don't fracture your content into a million tiny reusable blocks. LLMs need long-form context. If your "Features" page is just 50 disjointed components, the AI misses the bigger picture.
The Competitor Gap
Here's the kicker: Your scrappy competitor using a $20 Ghost blog theme? They are ranking higher in AI overviews than your $50k custom Sanity build.
Why? Because their ugly HTML is easy to read. Your beautiful JSON blob is a puzzle the AI doesn't have time to solve.
Check your visibility. If you're running headless, you are likely underperforming.
Check your Share of Model here
Originally published on VectorGap Substack
Top comments (0)