Research · schema delivery
Structured data only works if the crawler reading your site actually receives it. Google's crawler renders JavaScript. The AI fleet mostly doesn't — GPTBot, OAI-SearchBot, ClaudeBot and PerplexityBot fetch your raw HTML and move on. That one difference decides whether your schema exists, depending on where it's added.
| Delivery | How it works | AI crawlers | |
|---|---|---|---|
| Server HTML (CMS, theme, SSR) | JSON-LD is in the HTML your server sends | ✓ read | ✓ read |
| Edge-injected (CDN worker rewrites the response) | JSON-LD is added in transit — it IS the response HTML | ✓ read | ✓ read |
| Client-side JS (tag manager, SPA, "schema tag" SaaS snippets) | a script adds JSON-LD after the page loads in a browser | usually read (rendering queue) | ✗ invisible |
The third row is the trap. A whole category of tools sells "add schema without touching your site" — a one-line script tag that injects JSON-LD client-side. The rich-results tester passes (it renders JS). Google may see it. The crawlers behind ChatGPT, Claude and Perplexity request your raw HTML, don't execute the tag, and see a page with no schema at all. The nuance worth knowing: Gemini benefits from Google's rendered index, so it's the exception — but you're then structured-data-visible to one AI family out of four.
View source, not inspect element. "Inspect" shows the rendered page (after JS); "view source" shows what crawlers without a browser get. Search the source for application/ld+json. In it → AI can read your schema. Only in "inspect" → it's JS-injected and invisible to the AI fleet.
Terminal version: curl -s https://yoursite.com | grep -c "application/ld+json" — zero means zero, for every crawler that doesn't run JS.
Our free scan reads your site the way AI crawlers do — raw HTML first — which is why it sometimes reports "no schema" on sites whose SEO plugin swears it's there. That disagreement isn't a bug; it's the measurement. (The same raw-first read is how we catch JavaScript-shell sites whose entire content is invisible to AI.)
1) Put it in the server HTML — every mainstream CMS can (theme, plugin rendering server-side, or hard-coded in the template). 2) Inject at the edge — if the CMS is locked down, a CDN worker (e.g. Cloudflare Workers' HTMLRewriter) can add JSON-LD to the response itself: crawler-visible by construction, no CMS access needed. We build this pattern for Sprint clients on locked platforms. 3) If a client-side tag is genuinely your only option, know what it is: schema for Google's renderer, nothing for the AI fleet — and prioritise moving it server-side.
The free scan reads your raw HTML like the AI crawlers do and tells you what they can and can't see.
Run the free scan →