How to Make Your Website Readable to AI Crawlers

By Midnight AI · AI Automation · May 2026 · 7 min read

Why ChatGPT, Claude and Perplexity cannot read a typical React site - and the build-time prerender that makes yours AI-readable at no runtime cost.

Open ChatGPT, Claude or Perplexity, paste a URL from a typical modern React or Vue site, and ask it to summarise the page. About half the time you get back something like: 'I'm sorry, this site appears to be JavaScript-rendered and I can't access its content directly.' That answer is becoming a quiet revenue problem.

The cause is structural. Single-page applications ship a near-empty HTML shell - usually just a `<div id="root"></div>` and a JavaScript bundle. A real browser executes that bundle and the page comes alive. Most AI crawlers (ClaudeBot, GPTBot, PerplexityBot, CCBot, Google-Extended) do not execute JavaScript at scale. They fetch the HTML, see an empty shell, and move on. Your content effectively does not exist for them.

In 2026 that matters more than it ever did for classical SEO. ChatGPT Search, Perplexity, Google AI Overviews, Claude's web tool and Bing Copilot are now where a meaningful slice of buyers begin their research - especially for B2B decisions like ERP, CRM, HR or automation vendors. If your site is invisible to those crawlers, you are invisible during the exact moment a buyer is forming a shortlist.

The wrong fixes are tempting and expensive. Rewriting a working React app in Next.js or Nuxt just for SSR is a multi-month project. Server-side rendering every request adds latency, infrastructure cost, and a new class of cache bugs. Giving up on a SPA architecture throws away the snappy feel users actually like. None of that is necessary.

The right fix is build-time prerendering. The idea is simple: after Vite (or Webpack) finishes the normal build, you spin up a headless Chromium, point it at every public route, wait for React to mount and render, then snapshot the fully-rendered DOM and write it as `dist/<route>/index.html`. The static host then serves that prerendered HTML on the first request. Crawlers see a complete document - headings, paragraphs, links, schema markup, all of it. The user's experience does not change at all.

The performance maths is what makes this approach a no-brainer. Prerendering happens once, at build time, on a CI machine - not on the user's request. Real visitors download the same hashed JavaScript bundle from the same CDN they always did. The static HTML snapshot lives next to that bundle on the same edge. There is no SSR runtime, no extra round-trip, no cold-start, no edge function. Time-to-first-byte is identical. Largest Contentful Paint is identical or marginally better, because the HTML now contains real content instead of a loading skeleton.

On 4ys.org we layer a few extra signals on top of that base. Every page also gets a Markdown twin (e.g. `/about.md`) that is linked from `<head>` via `<link rel="alternate" type="text/markdown">`. A `/llms.txt` file (per the emerging llmstxt.org convention) gives crawlers a structured index of the whole site, and `/llms-full.txt` ships the entire corpus in one file - so well-behaved AI agents can ingest the company in a single fetch. Each page emits Organization, WebSite, Service and FAQPage JSON-LD; sitemap.xml lists every URL with hreflang for English and Arabic; robots.txt explicitly allows GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, Anthropic-AI and friends.

Verifying the setup takes one command. Run `curl -A "ClaudeBot/1.0" https://yoursite.com/some-page` and look at the response. If you see real headings, paragraphs and links, you are AI-readable. If you see `<div id="root"></div>` and nothing else, you are not - and no amount of clever prompt engineering on the AI's side will fix that. The fix is on your infrastructure.

For Omani and Gulf businesses this is now table stakes for any new website project. Prerender at build time. Publish a Markdown twin and an `llms.txt`. Allow the AI crawlers explicitly. Keep your SPA, keep your speed, and stop being invisible to the assistants your customers are already using to choose vendors.

All articles

Want this looked at on your own pipeline?

Tell us how many enquiries you get and where they arrive. We will tell you what we would automate first, and what we would leave alone.