---
title: "AR-READ-08: JSON-LD on key pages | Agent Ready Checklist"
description: "AR-READ-08 (SHOULD, Read layer): JSON-LD on key pages. What it asks, the evidence, the command that verifies it and the fix on 19 platforms."
canonical: https://agentreadychecklist.com/checklist/ar-read-08
site: "Agent Ready Checklist"
last_updated: 2026-11-05
section: "Checklist"
---

# AR-READ-08: JSON-LD on key pages | Agent Ready Checklist

> AR-READ-08 (SHOULD, Read layer): JSON-LD on key pages. What it asks, the evidence, the command that verifies it and the fix on 19 platforms.

Source: https://agentreadychecklist.com/checklist/ar-read-08
Site: Agent Ready Checklist
Last reviewed: 2026-11-05
Agent endpoints: https://agentreadychecklist.com/llms.txt (index), https://agentreadychecklist.com/openapi.json (API), https://agentreadychecklist.com/mcp (MCP server), https://agentreadychecklist.com/ask (search)
Access: https://agentreadychecklist.com/auth.md (no key). Pricing: https://agentreadychecklist.com/pricing.md (free).

# AR-READ-08: JSON-LD on key pages

AR-READ-08 is a SHOULD on the read layer: Put JSON-LD on key pages, the homepage above all, and repeat critical facts in visible text. It applies to every site. 19 of 19 platforms have a recipe below, 4 of them workarounds. The kit check json-ld tests it with one command. 3 cited facts back it.

## The requirement

Identifier

AR-READ-08

Level

SHOULD

Layer

Read

Applies to

every site

Checked by

Ora, matched on this site, is-agentic.com, Verify Kit json-ld

Ora check

[json-ld](#ora)

The statement

Put JSON-LD on key pages, the homepage above all, and repeat critical facts in visible text.

## Why

-   The spec says agents can parse facts from the block but markdown converters may omit script blocks, so critical facts belong in visible text too.primary source: [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md), read 2026-11-04
-   The Vercel guide says the study did not measure an improvement in accuracy or completion from JSON-LD.primary source, 2026-08-28: [vercel.com/kb/guide/make-your-site-readable-by-ai-agents](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents), read 2026-11-04
-   Cloudflare Markdown for Agents keeps JSON-LD as a fenced json block at the end of the converted document.primary source, 2026-10-09: [developers.cloudflare.com/fundamentals/reference/markdown-for-agents/](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/), read 2026-11-04

## How to verify

### [JSON-LD present and parseable](https://agentreadychecklist.com/kit/json-ld/)

```bash
curl -fsSL https://agentreadychecklist.com/kit/verify.sh | bash -s -- https://example.com --only=json-ld
```

Extracts every <script type="application/ld+json"> block, parses each with jq and prints the @type values.

**It cannot prove:** Does not validate against schema.org types or check the facts match visible text.

### The one-line version

curl -s <url> | sed -n "/application\\/ld+json/,/<\\/script>/p" | sed "1d;\\$d" | jq -e "." must parse.

## Verify with Ora

One check in Ora's catalogue (contract 1.38.0, read 2026-11-05) read this row. Each entry says what the check looks at and why this page lists it.

-   `json-ld` JSON-LD structured data Grades the completeness of the homepage JSON-LD. Access, 4 points, required; catalogue applicability domain-only. Listed because: same name, `json ld`.

### Run just these checks

```bash
curl -s -X POST https://ora.ai/api/scan/checks -H 'content-type: application/json' -d '{"url":"https://example.com","checkIds":["json-ld"]}'
```

This calls the endpoint Ora documents for re-verifying a fix. It sends no cache, returns a result for each id and no total score, and spends one scan from the daily budget. Replace the URL with yours. [How to re-verify one fix](https://agentreadychecklist.com/guides/re-verify-one-fix-with-ora/).

### Or audit the whole site

```bash
npx ax@0.10 audit https://example.com --min-score 70
```

### Related checks

This check reads something near the row but asks for more than the row does. A site that meets the row can score nothing or lose points on it, so it is not counted as a test of the row and is left out of the command above.

-   `json-ld-entity-linking` JSON-LD entity linking (sameAs) Looks for sameAs links from the structured data to official profiles such as GitHub, LinkedIn and app stores. The row asks for JSON-LD on key pages and the facts repeated in text, not for those links, so a site that meets the row can lose points here. Access, 2 points, recommended; catalogue applicability domain-only.

Exit code 1 means the score is below the number you passed, so the same line gates a deploy: [the CI recipe](https://agentreadychecklist.com/guides/gate-deploys-on-agent-readiness-in-ci/). [Why this site recommends Ora, and where it falls short](https://agentreadychecklist.com/verify-with-ora/).

## In the crawl

This row has one crawl rate. Each panel splits the 2026-11-04 crawl into ten bands of 1,000 ranks, on a 0 to 100 percent scale.

Home page carries JSON-LD that parses

47.4% overall

Reachable sites in the Tranco top 10,000 on which the check ran, 2026-11-04. Left is ranks 1 to 1,000.

Numbers behind the chart

| Rate | 1 to 1,000 | 1,001 to 2,000 | 2,001 to 3,000 | 3,001 to 4,000 | 4,001 to 5,000 | 5,001 to 6,000 | 6,001 to 7,000 | 7,001 to 8,000 | 8,001 to 9,000 | 9,001 to 10,000 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Home page carries JSON-LD that parses | 49% | 46% | 51% | 50% | 42% | 46% | 49% | 52% | 45% | 44% |

## Fix it on your platform

### Next.js (App Router)recipe

In the page component render <script type="application/ld+json" dangerouslySetInnerHTML={{ \_\_html: JSON.stringify(jsonLd).replace(/</g, "\\\\u003c") }} />. Repeat key facts in visible text.

Next.js 16.x (npm latest 16.4.5, read 2026-11-04); docs at nextjs.org/docs/app. Read 2026-11-04. [nextjs.org/docs/app/guides/json-ld](https://nextjs.org/docs/app/guides/json-ld). [All Next.js (App Router) recipes](https://agentreadychecklist.com/platforms/nextjs-app-router/#ar-read-08)

### Astrorecipe

In the page head add <script type="application/ld+json" set:html={JSON.stringify(jsonLd)} />. set:html injects the string without escaping it into entities.

Astro 7.x (npm latest astro 7.4.5, @astrojs/sitemap 3.7.4, read 2026-11-04). Read 2026-11-04. [docs.astro.build/en/reference/directives-reference/](https://docs.astro.build/en/reference/directives-reference/). [All Astro recipes](https://agentreadychecklist.com/platforms/astro/#ar-read-08)

### Nuxtrecipe

useHead({ script: \[{ type: "application/ld+json", innerHTML: JSON.stringify(jsonLd) }\] }) in the page; it is rendered into the SSR HTML.

Nuxt 4.x (npm latest nuxt 4.6.4, @nuxtjs/robots 7.0.2, @nuxtjs/sitemap 9.1.0, read 2026-11-04). Read 2026-11-04. [nuxt.com/docs/api/composables/use-head](https://nuxt.com/docs/api/composables/use-head). [All Nuxt recipes](https://agentreadychecklist.com/platforms/nuxt/#ar-read-08)

### SvelteKitrecipe

In <svelte:head> render {@html `<script type="application/ld+json">${JSON.stringify(jsonLd)}</script>`} with data from load.

SvelteKit (npm latest @sveltejs/kit 3.1.1, read 2026-11-04); docs at svelte.dev/docs/kit. Read 2026-11-04. [svelte.dev/docs/kit/seo](https://svelte.dev/docs/kit/seo). [All SvelteKit recipes](https://agentreadychecklist.com/platforms/sveltekit/#ar-read-08)

### Remix and React Router (framework mode)recipe

Render <script type="application/ld+json" dangerouslySetInnerHTML={{ \_\_html: JSON.stringify(jsonLd) }} /> in the route component; framework mode renders it in the server HTML. The route-module docs read on 2026-11-04 show no dedicated JSON-LD helper.

React Router framework mode (npm latest react-router 8.5.1; Remix v2 @remix-run/node 2.17.5, read 2026-11-04); docs at reactrouter.com. Read 2026-11-04. [reactrouter.com/start/framework/route-module](https://reactrouter.com/start/framework/route-module). [All Remix and React Router (framework mode) recipes](https://agentreadychecklist.com/platforms/remix-react-router/#ar-read-08)

### Plain static hosting (Netlify, Vercel static, Cloudflare Pages, GitHub Pages, S3 and CloudFront)recipe

Put the JSON-LD script in the HTML at build time; the host serves it as uploaded.

Host documentation as published on 2026-11-04 (no version numbers; config files \_headers, \_redirects, vercel.json, 404.html). Read 2026-11-04. [docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages). [All Plain static hosting (Netlify, Vercel static, Cloudflare Pages, GitHub Pages, S3 and CloudFront) recipes](https://agentreadychecklist.com/platforms/static-hosting/#ar-read-08)

### WordPress and Elementorrecipe

Print JSON-LD in wp\_head: `add_action('wp_head', function(){ echo '<script type="application/ld+json">'.wp_json_encode($data).'</script>'; });` or rely on the Yoast or Rank Math schema graph. Repeat key facts in visible text.

WordPress 7.1.4 (core release from the version-check API), Elementor 4.3.6 (plugin directory, updated 2026-11-02), Yoast SEO 28.8 noted for llms.txt; docs read 2026-11-04. Read 2026-11-04. [developer.wordpress.org/reference/hooks/wp\_head/](https://developer.wordpress.org/reference/hooks/wp_head/). [All WordPress and Elementor recipes](https://agentreadychecklist.com/platforms/wordpress-elementor/#ar-read-08)

### Shopify (Online Store 2.0 themes)recipe

In the product section: `<script type="application/ld+json">{{ product | structured_data }}</script>`; for articles use `{{ article | structured_data }}`. Many current themes already include it, so check for duplicates.

Hosted SaaS, Online Store 2.0 Liquid themes, docs read 2026-11-04; storefront behaviour probed live on one Shopify store the same day. Read 2026-11-04. [shopify.dev/docs/api/liquid/filters/structured\_data](https://shopify.dev/docs/api/liquid/filters/structured_data). [All Shopify (Online Store 2.0 themes) recipes](https://agentreadychecklist.com/platforms/shopify/#ar-read-08)

### Webflowrecipe

Pages panel > page Settings > Schema markup: paste JSON-LD or click Generate schema markup, then validate before publishing.

Hosted SaaS, help center articles read 2026-11-04 (updated dates 2024-10-14 to 2026-10-29). Read 2026-11-04. [help.webflow.com/hc/en-us/articles/45766917223955-Add-schema-markup-in-Webflow-to-improve-SEO-and-AEO](https://help.webflow.com/hc/en-us/articles/45766917223955-Add-schema-markup-in-Webflow-to-improve-SEO-and-AEO). [All Webflow recipes](https://agentreadychecklist.com/platforms/webflow/#ar-read-08)

### Framerrecipe

Project Settings > Custom Code > Add Script in the head; for CMS pages use variables such as `"headline": {{Title | json}}`. Validate after publishing.

Hosted SaaS, help articles read 2026-11-04 (marked updated 2026-09-15). Read 2026-11-04. [framer.com/help/articles/structured-data-through-json-ld/](https://www.framer.com/help/articles/structured-data-through-json-ld/). [All Framer recipes](https://agentreadychecklist.com/platforms/framer/#ar-read-08)

### Wix (Wix Editor and Wix Studio)recipe

Page SEO settings > Advanced SEO > Structured data markup: add JSON-LD for the page type; for blog posts turn on AI-generated structured data in SEO & GEO.

Hosted SaaS, help center read 2026-11-04. Read 2026-11-04. [support.wix.com/en/article/adding-structured-data-markup-to-your-sites-pages-2546962](https://support.wix.com/en/article/adding-structured-data-markup-to-your-sites-pages-2546962). [All Wix (Wix Editor and Wix Studio) recipes](https://agentreadychecklist.com/platforms/wix/#ar-read-08)

### Squarespace (version 7.1)recipe

Code Injection > Header (or Page Header Code Injection per page): paste `<script type="application/ld+json">{…}</script>`; Core, Plus or Advanced plan needed.

Hosted SaaS, version 7.1 sites, help center read 2026-11-04 (articles updated 2026-07-17 to 2026-11-03). Read 2026-11-04. [support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection](https://support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection). [All Squarespace (version 7.1) recipes](https://agentreadychecklist.com/platforms/squarespace/#ar-read-08)

### HubSpot CMS (Content Hub)recipe

Page settings > Advanced > Head HTML (or the template's head): `<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization",…}</script>`.

Hosted SaaS, Content Hub, knowledge base and developer docs read 2026-11-04. Read 2026-11-04. [developers.hubspot.com/blog/how-to-use-structured-data-schema-markup-in-hubspot-to-improve-seo](https://developers.hubspot.com/blog/how-to-use-structured-data-schema-markup-in-hubspot-to-improve-seo). [All HubSpot CMS (Content Hub) recipes](https://agentreadychecklist.com/platforms/hubspot-cms/#ar-read-08)

### Docusaurusrecipe

Add JSON-LD with headTags in docusaurus.config.js: { tagName: 'script', attributes: { type: 'application/ld+json' }, innerHTML: JSON.stringify({ '@context': 'https://schema.org/', '@type': 'Organization', name: 'Example', url: 'https://example.com/' }) }. Per page, use <head><script type="application/ld+json"> in MDX.

3.10.2 (npm @docusaurus/core latest, read 2026-11-04). Read 2026-11-04. [docusaurus.io/docs/seo](https://docusaurus.io/docs/seo). [All Docusaurus recipes](https://agentreadychecklist.com/platforms/docusaurus/#ar-read-08)

### Mintlifyrecipe

Automatic JSON-LD on every indexable page. Set seo.organization in docs.json for publisher @id, legal name, logo and sameAs.

Hosted SaaS, docs read 2026-11-04. Read 2026-11-04. [mintlify.com/docs/optimize/seo](https://mintlify.com/docs/optimize/seo). [All Mintlify recipes](https://agentreadychecklist.com/platforms/mintlify/#ar-read-08)

### GitBookworkaround

No JSON-LD output and no head injection documented. Put a Cloudflare Worker with HTMLRewriter in front of a subdirectory deployment and append a <script type="application/ld+json">.

Hosted SaaS, docs read 2026-11-04. Read 2026-11-04. [gitbook.com/docs/publish/custom-domain/setting-a-custom-subdirectory/configuring-a-subdirectory-with-cloudflare](https://gitbook.com/docs/publish/custom-domain/setting-a-custom-subdirectory/configuring-a-subdirectory-with-cloudflare). [All GitBook recipes](https://agentreadychecklist.com/platforms/gitbook/#ar-read-08)

### ReadMeworkaround

No JSON-LD setting documented. Add a script in custom HTML (Custom Code) or inject it at a reverse proxy.

Hosted SaaS, docs read 2026-11-04. Read 2026-11-04. [docs.readme.com/main/docs/using-a-reverse-proxy](https://docs.readme.com/main/docs/using-a-reverse-proxy). [All ReadMe recipes](https://agentreadychecklist.com/platforms/readme/#ar-read-08)

### Salesforce B2C Commerce (SFRA and PWA Kit / Composable Storefront)workaround

No documented setting reached. Render Product and Organization JSON-LD in the PDP and home components (react-helmet in PWA Kit) or ISML templates in SFRA.

Hosted SaaS (B2C Commerce help release 264.0.0); PWA Kit retail-react-app 10.3.0 and pwa-kit-runtime 3.21.0 on npm, read 2026-11-04. Read 2026-11-04. [developer.salesforce.com/docs/commerce/b2c-commerce/guide/pwa-kit-overview.html](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/pwa-kit-overview.html). [All Salesforce B2C Commerce (SFRA and PWA Kit / Composable Storefront) recipes](https://agentreadychecklist.com/platforms/salesforce-commerce-cloud/#ar-read-08)

### Adobe Commerce and Magento Open Sourceworkaround

Add a template block to the head via layout XML in your theme that prints Product, Offer and Organization JSON-LD; keep the same facts in visible text.

2.4.9 (GitHub tag published 2026-05-12; 2.4.10-alpha1 tagged 2026-10-13); release notes read 2026-11-04. Read 2026-11-04. [developer.adobe.com/commerce/frontend-core/guide/layouts/](https://developer.adobe.com/commerce/frontend-core/guide/layouts/). [All Adobe Commerce and Magento Open Source recipes](https://agentreadychecklist.com/platforms/adobe-commerce/#ar-read-08)

## What it does not do

-   JSON-LD is not a ranking or retrieval switch; it changed nothing in the 19-configuration experiment.
-   Does not replace the same facts in the body text.

## Common mistakes

-   Invalid JSON from a template (trailing comma, unescaped quote).
-   Schema that disagrees with the visible price.
-   Review or AggregateRating markup the page does not support.

## Related

-   Term: [MUST](https://agentreadychecklist.com/glossary/must/)
-   Term: [JSON-LD](https://agentreadychecklist.com/glossary/json-ld/)

## Sources

-   [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)read 2026-11-04
-   [vercel.com/kb/guide/make-your-site-readable-by-ai-agents](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents)read 2026-11-04
-   [developers.cloudflare.com/fundamentals/reference/markdown-for-agents/](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/)read 2026-11-04
-   [nextjs.org/docs/app/guides/json-ld](https://nextjs.org/docs/app/guides/json-ld)read 2026-11-04
-   [docs.astro.build/en/reference/directives-reference/](https://docs.astro.build/en/reference/directives-reference/)read 2026-11-04
-   [nuxt.com/docs/api/composables/use-head](https://nuxt.com/docs/api/composables/use-head)read 2026-11-04
-   [svelte.dev/docs/kit/seo](https://svelte.dev/docs/kit/seo)read 2026-11-04
-   [reactrouter.com/start/framework/route-module](https://reactrouter.com/start/framework/route-module)read 2026-11-04
-   [docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages)read 2026-11-04
-   [developer.wordpress.org/reference/hooks/wp\_head/](https://developer.wordpress.org/reference/hooks/wp_head/)read 2026-11-04
-   [shopify.dev/docs/api/liquid/filters/structured\_data](https://shopify.dev/docs/api/liquid/filters/structured_data)read 2026-11-04
-   [help.webflow.com/hc/en-us/articles/45766917223955-Add-schema-markup-in-Webflow-to-improve-SEO-and-AEO](https://help.webflow.com/hc/en-us/articles/45766917223955-Add-schema-markup-in-Webflow-to-improve-SEO-and-AEO)read 2026-11-04
-   [framer.com/help/articles/structured-data-through-json-ld/](https://www.framer.com/help/articles/structured-data-through-json-ld/)read 2026-11-04
-   [support.wix.com/en/article/adding-structured-data-markup-to-your-sites-pages-2546962](https://support.wix.com/en/article/adding-structured-data-markup-to-your-sites-pages-2546962)read 2026-11-04
-   [support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection](https://support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection)read 2026-11-04
-   [developers.hubspot.com/blog/how-to-use-structured-data-schema-markup-in-hubspot-to-improve-seo](https://developers.hubspot.com/blog/how-to-use-structured-data-schema-markup-in-hubspot-to-improve-seo)read 2026-11-04
-   [docusaurus.io/docs/seo](https://docusaurus.io/docs/seo)read 2026-11-04
-   [mintlify.com/docs/optimize/seo](https://mintlify.com/docs/optimize/seo)read 2026-11-04
-   [gitbook.com/docs/publish/custom-domain/setting-a-custom-subdirectory/configuring-a-subdirectory-with-cloudflare](https://gitbook.com/docs/publish/custom-domain/setting-a-custom-subdirectory/configuring-a-subdirectory-with-cloudflare)read 2026-11-04
-   [docs.readme.com/main/docs/using-a-reverse-proxy](https://docs.readme.com/main/docs/using-a-reverse-proxy)read 2026-11-04
-   [developer.salesforce.com/docs/commerce/b2c-commerce/guide/pwa-kit-overview.html](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/pwa-kit-overview.html)read 2026-11-04
-   [developer.adobe.com/commerce/frontend-core/guide/layouts/](https://developer.adobe.com/commerce/frontend-core/guide/layouts/)read 2026-11-04
-   [w3.org/TR/json-ld11/](https://www.w3.org/TR/json-ld11/)read 2026-11-04
-   [ora.ai/api/checks, contract 1.38.0](https://ora.ai/api/checks?utm_source=agentreadychecklist.com&utm_medium=referral&utm_campaign=requirement)read 2026-11-05
-   [ora.ai/llms-full.txt](https://ora.ai/llms-full.txt?utm_source=agentreadychecklist.com&utm_medium=referral&utm_campaign=requirement)read 2026-11-05
-   [registry.npmjs.org/ax, the ax README](https://registry.npmjs.org/ax)read 2026-11-05

Verify with Ora

The scanner this site recommends for the whole checklist. 132 checks, a score out of 100, no account.

`npx ax@0.10 audit <url> --min-score <n>`

[Why Ora, and its limits](https://agentreadychecklist.com/verify-with-ora/)

Fix it on

-   [Next.js (App Router)recipe](#p-nextjs-app-router)
-   [Astrorecipe](#p-astro)
-   [Nuxtrecipe](#p-nuxt)
-   [SvelteKitrecipe](#p-sveltekit)
-   [Remix and React Router (framework mode)recipe](#p-remix-react-router)
-   [Plain static hosting (Netlify, Vercel static, Cloudflare Pages, GitHub Pages, S3 and CloudFront)recipe](#p-static-hosting)
-   [WordPress and Elementorrecipe](#p-wordpress-elementor)
-   [Shopify (Online Store 2.0 themes)recipe](#p-shopify)
-   [Webflowrecipe](#p-webflow)
-   [Framerrecipe](#p-framer)
-   [Wix (Wix Editor and Wix Studio)recipe](#p-wix)
-   [Squarespace (version 7.1)recipe](#p-squarespace)
-   [HubSpot CMS (Content Hub)recipe](#p-hubspot-cms)
-   [Docusaurusrecipe](#p-docusaurus)
-   [Mintlifyrecipe](#p-mintlify)
-   [GitBookworkaround](#p-gitbook)
-   [ReadMeworkaround](#p-readme)
-   [Salesforce B2C Commerce (SFRA and PWA Kit / Composable Storefront)workaround](#p-salesforce-commerce-cloud)
-   [Adobe Commerce and Magento Open Sourceworkaround](#p-adobe-commerce)

Last reviewed 2026-11-05. AgentReady v2.0, read 2026-11-04.
