/ Agent Readiness / JSON-LD Coverage

How to Fix JSON-LD Coverage Gaps

AI engines extract structured facts from JSON-LD schema faster and more accurately than from HTML alone. Sites with comprehensive schema coverage get cited more often in ChatGPT, Claude, Perplexity, Gemini answers. The Agent Readiness audit lists which page types lack schema, which schemas are incomplete, and where entity graphs are disconnected. This guide covers the additions that move the needle.

1. Per page-type schema

Articles, blog posts, news

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Article title",
  "description": "Brief description",
  "image": "https://example.com/cover.jpg",
  "datePublished": "2024-01-15T08:00:00+00:00",
  "dateModified": "2024-01-20T10:00:00+00:00",
  "author": {
    "@type": "Person",
    "name": "Author Name",
    "url": "https://example.com/authors/author-name"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Example Publisher",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  }
}

Products

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Product Name",
  "image": ["https://example.com/product.jpg"],
  "description": "Product description",
  "sku": "SKU-12345",
  "brand": {
    "@type": "Brand",
    "name": "Brand Name"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/product",
    "priceCurrency": "GBP",
    "price": "29.99",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "reviewCount": "127"
  }
}

Local business

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Business Name",
  "image": "https://example.com/storefront.jpg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 High Street",
    "addressLocality": "London",
    "postalCode": "SW1A 1AA",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 51.5074,
    "longitude": -0.1278
  },
  "telephone": "+44-20-7946-0958",
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "09:00",
    "closes": "18:00"
  }]
}

FAQ pages

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What does X do?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "X does this and that."
      }
    },
    {
      "@type": "Question",
      "name": "How does it work?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Step-by-step answer."
      }
    }
  ]
}

How-to content

{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to do X",
  "description": "Step-by-step guide to X.",
  "totalTime": "PT30M",
  "step": [
    {
      "@type": "HowToStep",
      "name": "First step",
      "text": "Description of step 1"
    },
    {
      "@type": "HowToStep",
      "name": "Second step",
      "text": "Description of step 2"
    }
  ]
}

2. Close the entity graph with @graph

Multiple entities on one page should be linked via @id references. This forms a connected graph that AI engines can traverse.

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Article",
      "@id": "https://example.com/article#article",
      "headline": "Article Title",
      "datePublished": "2024-01-15",
      "author": { "@id": "https://example.com/article#author" },
      "publisher": { "@id": "https://example.com/#org" }
    },
    {
      "@type": "Person",
      "@id": "https://example.com/article#author",
      "name": "Jane Doe",
      "url": "https://example.com/authors/jane-doe",
      "worksFor": { "@id": "https://example.com/#org" },
      "sameAs": [
        "https://twitter.com/janedoe",
        "https://linkedin.com/in/janedoe"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://example.com/#org",
      "name": "Example Publishing",
      "url": "https://example.com",
      "logo": "https://example.com/logo.png",
      "sameAs": [
        "https://en.wikipedia.org/wiki/Example_Publishing",
        "https://www.wikidata.org/wiki/Q12345",
        "https://twitter.com/examplepub",
        "https://linkedin.com/company/example-publishing"
      ]
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {"@type":"ListItem","position":1,"name":"Home","item":"https://example.com/"},
        {"@type":"ListItem","position":2,"name":"Blog","item":"https://example.com/blog"},
        {"@type":"ListItem","position":3,"name":"Article","item":"https://example.com/article"}
      ]
    }
  ]
}

Article references Person (author) by @id. Person references Organization (worksFor) by @id. The graph closes — every entity connects to others. AI engines extract richer context from this than from a flat Article.

3. Organization sameAs for entity disambiguation

sameAs tells AI engines "this Organization on my site is the same as this entity on Wikipedia / Wikidata / social". Helps disambiguate against companies with similar names.

{
  "@type": "Organization",
  "name": "Apple",
  "sameAs": [
    "https://en.wikipedia.org/wiki/Apple_Inc.",
    "https://www.wikidata.org/wiki/Q312",
    "https://twitter.com/Apple",
    "https://www.linkedin.com/company/apple/"
  ]
}
// Disambiguates Apple Inc from Apple Records, Apple Bank, Apple fruit, etc

4. Audit coverage

Step 1
Lists schema coverage per template/section. "No schema on article pages" or "Missing Organization on homepage" surface here.
Step 2
Run Schema Debugger on representative pages
Per-page schema validation. Catches incomplete schema, hallucinated properties, broken @id references.

5. Common gaps

Gap: No author Person, just a string

// BAD
{ "@type": "Article", "author": "Jane Doe" }

// GOOD
{
  "@type": "Article",
  "author": {
    "@type": "Person",
    "name": "Jane Doe",
    "url": "https://example.com/authors/jane-doe",
    "sameAs": ["https://twitter.com/janedoe"]
  }
}

Gap: No publisher Organization

// BAD: Article with no publisher
{ "@type": "Article", "headline": "..." }

// GOOD: Publisher reference
{
  "@type": "Article",
  "publisher": {
    "@type": "Organization",
    "name": "Example",
    "logo": { "@type": "ImageObject", "url": "..." }
  }
}

Gap: No Organization sameAs

Organization without sameAs is an unverified entity. AI can't confirm "this is the actual company". sameAs to Wikipedia/Wikidata is the strongest signal.

Gap: BreadcrumbList missing

Add to every page. Helps both Google rich results and AI understanding of site structure.

6. Coverage targets

Aim for full coverage across major page types:

7. Verify

Step 1
Schema Debugger validation
Each schema type validates against schema.org and Google rich results.
Step 2
Re-run Agent Readiness
Coverage score improves. Per-page-type schema present. Entity graph closed.
💡 The single most impactful addition for AI visibility: Organization with sameAs to Wikipedia/Wikidata, referenced from every page via @graph. That single link gives AI engines a verified entity to attribute claims to. Without it, your brand name is just a string they hope refers to you.

🤖 Re-run Agent Readiness

Verify schema coverage improved.

Run Agent Readiness →
Related Guides: Agent Readiness Fixes  ·  Fix llms.txt  ·  Fix Semantic HTML  ·  Schema Debugger Guide
💬 Got a problem?