> ## Documentation Index
> Fetch the complete documentation index at: https://docs.instantschema.app/llms.txt
> Use this file to discover all available pages before exploring further.

# SEO fidelity

> Client-injected vs server-rendered schemas and what Google actually sees

# SEO fidelity

Not all integration methods deliver schemas to Google the same way. Understanding the difference helps you pick the right method for your use case.

## The two delivery modes

**Server-rendered** (Next.js SDK, Astro, Nuxt, Custom API)
Schemas appear in the raw HTML returned by your server. When Googlebot fetches the page, it sees the `<script type="application/ld+json">` tags immediately — no JavaScript execution required.

**Client-injected** (CDN script, Inline script, GTM)
The page HTML loads first, then JavaScript runs and appends schema tags to the document. Google can index these schemas, but only after it renders the page with its JavaScript engine.

## What Google does with each

Google crawls pages twice for most sites: once with the raw HTML fetcher (fast, no JS) and once with its full rendering pipeline (slower, JS enabled). Structured data injected by JavaScript is only visible in the second pass.

The rendering pass typically happens seconds to days after the initial crawl, depending on how frequently Google crawls your site. For low-traffic or new pages, this delay can mean schemas aren't indexed for a week or more after deploy.

Server-rendered schemas are indexed on the very first crawl — no second pass needed.

## When client-side is fine

Client-side injection is acceptable for most marketing sites:

* **Low-update content** — landing pages, about pages, service pages where schemas rarely change
* **Organization / WebSite schemas** — these don't affect ranking for individual pages
* **Sites already indexed frequently** — Googlebot will pick up rendered content quickly on popular pages
* **Speed of setup matters more than latency** — CDN script is live in under a minute

The Rich Results Test and Google Search Console will still show your schemas once they've been rendered and indexed.

## When to upgrade to server-side

Consider switching to a server-side method if:

* **News / time-sensitive content** — `Article` schemas on news posts need to be indexed before the story is stale
* **Product pages with inventory** — `Product` schemas with `offers` (price, availability) should reflect current state as fast as possible
* **Rich result gaps** — if the Rich Results Test at `search.google.com/test/rich-results` shows no structured data on a page you know has schemas, JS rendering may not have happened yet for that URL
* **High page count** — Google's rendering queue is finite; large sites may have many pages waiting for a second pass

## Checking what Googlebot sees

The fastest way to check whether your schemas appear in the raw HTML:

```bash theme={null}
curl -s "https://yoursite.com/" | grep -i "application/ld+json"
```

If the `grep` returns output, your schemas are server-rendered. If it returns nothing but your browser shows them in DevTools, they're client-injected.

You can also use **URL Inspection** in Google Search Console → **Test Live URL** → **View Tested Page** → **HTML** tab to see exactly what Googlebot fetched.

<Note>
  The Rich Results Test executes JavaScript, so it will show client-injected schemas. To test what the raw HTML fetcher sees, use `curl` or the Search Console HTML tab instead.
</Note>

## Summary

|                        | Server-rendered             | Client-injected              |
| ---------------------- | --------------------------- | ---------------------------- |
| In raw HTML source     | ✅ Yes                       | ❌ No                         |
| Works without JS       | ✅ Yes                       | ❌ No                         |
| Indexed on first crawl | ✅ Yes                       | ❌ After rendering pass       |
| Setup complexity       | Medium                      | Low                          |
| Best for               | News, products, large sites | Marketing pages, quick setup |
