Missing structured data (JSON-LD)
Your pages have no JSON-LD, so agents must guess what each page is about.
JSON-LD is a small block of structured metadata embedded in a <script type="application/ld+json"> tag inside <head>. It tells agents (and search engines) exactly what a page is: a Product, an Article, an Organization, a FAQPage. Without it, the agent has to infer the page type from prose, which is error-prone.
Agents prefer structured signals over prose because they're cheaper to parse and harder to misread. With JSON-LD, an agent can answer 'how much does this cost' or 'who wrote this article' from a single field instead of reading the whole page. Without it, the agent either guesses or gives up. JSON-LD is also one of the highest-signal inputs to Google's AI Overviews and ChatGPT shopping.
Pages with JSON-LD get cited at meaningfully higher rates by AI shopping agents and answer engines. For e-commerce, missing Product schema means your prices and availability are not eligible for agent-driven shopping. For publishers, missing Article schema means your byline and publish date may not appear in citations. Adding the right schema is a one-time effort that pays out forever.
View source on a page (Ctrl-U) and search for 'application/ld+json'. If you find no matches, you have no structured data. If you find one, paste its contents into Google's Rich Results Test (search.google.com/test/rich-results); it will surface validation errors and tell you which schema types it recognised.
Add a <script type="application/ld+json"> to every page with the correct schema.org type. Use Product for product pages, Article for blog posts, Organization for the homepage and about page, FAQPage for FAQs, BreadcrumbList for category pages. Keep the JSON minimal but accurate; every field you include must match what is on the page.
The reference snippet above is platform-agnostic. Below are the concrete steps for the four most common stacks plus a generic fallback for any other host.
Next.js
Add a server component that emits the <script> tag using dangerouslySetInnerHTML with JSON.stringify. Place it inside the page's <head> via the App Router layout, or directly at the top of the page component. Generate the JSON from your page data so it stays in sync with the rendered content.
WordPress
The cleanest path is the Yoast SEO or Rank Math plugin; both emit JSON-LD automatically for posts, pages, products, and FAQs once configured. If you cannot use a plugin, hook into wp_head from your theme and echo the script tag with data pulled from get_post() and post meta.
Shopify
Shopify's Dawn theme already includes Product JSON-LD by default. Open templates/product.json or sections/main-product.liquid and look for the {%- render 'product-schema' -%} include. If you removed it or you're on a custom theme, add the snippet back. For non-product pages (Articles, FAQs), add a Liquid snippet that emits JSON-LD and include it from the relevant template.
Webflow
Webflow does not render dynamic JSON-LD from CMS fields out of the box, but it does let you embed custom code in the <head> per-page. For a static site go to Page settings → Custom code → Inside <head> tag and paste the JSON-LD. For CMS pages, use the "Embed" component in your CMS template and reference fields via {{wf {fieldId, type: "PlainText"} }} placeholders.
Static HTML / any stack
Hand-author a JSON-LD block per page and paste it into <head>. For more than a handful of pages, generate the JSON at build time from a data file. Most static-site generators (Astro, Eleventy, Hugo, Jekyll) have first-class support for emitting <script> tags from front-matter.
- Listing fields that are not on the page. JSON-LD must reflect what a human can see; claiming a 4.8 rating with no reviews on the page is a Google policy violation that can demote you.
- Using @type: 'WebPage' as a catch-all. WebPage adds nothing agents do not already infer. Pick the most specific type that fits (Article, Product, FAQPage, etc.).
- Embedding JSON-LD inside <body> instead of <head>. It still works, but some agents only scan <head> for performance reasons. Put it in <head>.
- Forgetting to escape strings. JSON.stringify (or wp_json_encode) handles this; hand-written JSON-LD with raw quotes inside string values breaks the script tag.
- Adding multiple schema blocks with conflicting data (e.g. one Product with $79, another with $89). Agents pick one and you do not control which.
Validate every JSON-LD block at search.google.com/test/rich-results by pasting the URL or the snippet. Then run a fresh AgentSpeed scan; the 'structured-data jsonld present' check flips to pass once a valid block is detected on the homepage. For broader coverage, scan a representative product/article URL too.
Do I need JSON-LD on every page?
You need it on every page that maps to a recognised schema.org type: Product pages, Article pages, FAQ pages, the homepage (Organization). Pure marketing pages without a clear type can skip it.
JSON-LD vs Microdata vs RDFa?
JSON-LD is the format Google, OpenAI, Anthropic, and Perplexity all explicitly recommend. Microdata and RDFa still work, but they're inline with the HTML and harder to maintain. New code should be JSON-LD.
Will adding JSON-LD slow my page down?
No. A typical JSON-LD block is 1–3 KB and ships in <head>; it's parsed by agents but ignored by browsers' render path.
Free scan, no signup. The score page is permanent and citable, so you can link it from your team's remediation ticket alongside this guide for “Missing structured data (JSON-LD)”.