Specification/Structured Data & Schema Markup

Structured Data & Schema Markup

19 checks · Weight: 12% of overall score

2 critical4 high9 medium4 low
3.1

JSON-LD present

criticalPass / Fail

AI agents rely on JSON-LD structured data to understand what your site offers, who runs it, and how to interact with it. Without any JSON-LD, agents like ChatGPT and Perplexity treat your site as unstructured text with no machine-readable identity. Add Organization and WebSite schemas to your homepage <head> as a starting point.

Why This Matters

Without any JSON-LD structured data, AI agents like ChatGPT and Perplexity treat your site as unstructured text with no machine-readable identity. Your brand, products, and services become invisible to AI-powered discovery, search, and recommendation systems.

How to Fix

Add at least one JSON-LD script block in your homepage <head>. Start with Organization and WebSite schemas to establish your site identity for AI agents.

Example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your Company",
  "url": "https://yoursite.com",
  "logo": "https://yoursite.com/logo.png"
}
</script>
Effort: Easy (< 1 hour)Documentation →
json-ldschemafoundation
3.2

Schema validation

criticalPass / Fail

AI agents parse @context and @type to identify entity types in your structured data. Blocks missing these properties are silently ignored by every schema consumer, including Google, ChatGPT plugins, and RAG pipelines. Add "@context": "https://schema.org" and a valid @type to each block.

Why This Matters

JSON-LD blocks missing @context or @type are silently ignored by every schema consumer, including Google, ChatGPT plugins, and RAG pipelines. Even if you have structured data on the page, invalid blocks provide zero value to AI agents.

How to Fix

Ensure every JSON-LD block includes "@context": "https://schema.org" and a valid @type property. If using @graph, each item inside must also have @type.

Example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "name": "Page Title",
  "description": "Page description"
}
</script>
Effort: Trivial (minutes)Documentation →
json-ldschemavalidationfoundation
3.3

Organization schema

highPass / Warn / Fail

AI agents use Organization schema to identify your brand, logo, and contact info. Without it, agents cannot confidently attribute content to your organization or display your branding in AI-generated answers. Add this JSON-LD to your homepage <head>.

Why This Matters

Without Organization schema, AI agents cannot confidently attribute content to your brand or display your logo in AI-generated answers. Your organization becomes anonymous in AI recommendations, losing brand visibility and trust signals.

How to Fix

Add Organization JSON-LD to your homepage <head>. Include name, url, and logo at minimum. Optionally add sameAs links to social profiles and contactPoint for customer service.

Example

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your Company",
  "url": "https://yoursite.com",
  "logo": "https://yoursite.com/logo.png",
  "sameAs": [
    "https://twitter.com/yourcompany",
    "https://linkedin.com/company/yourcompany"
  ]
}
Effort: Trivial (minutes)Documentation →
json-ldschemaorganizationbrand
3.4

WebSite schema with SearchAction

highPass / Warn / Fail

SearchAction tells AI agents how to search your site programmatically. When a user asks ChatGPT to "find X on yoursite.com", the agent uses this schema to construct a search URL. Without it, agents have no machine-readable way to query your content.

Why This Matters

Without WebSite schema with SearchAction, AI agents have no machine-readable way to search your site. When a user asks ChatGPT to "find X on yoursite.com", the agent cannot construct a search URL and will either skip your site or guess incorrectly.

How to Fix

Add WebSite JSON-LD to your homepage with a potentialAction of type SearchAction. The target must be a URL template with a {search_term_string} placeholder, and query-input must declare the parameter name.

Example

{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "url": "https://yoursite.com",
  "potentialAction": {
    "@type": "SearchAction",
    "target": "https://yoursite.com/search?q={search_term_string}",
    "query-input": "required name=search_term_string"
  }
}
Effort: Trivial (minutes)Documentation →
json-ldschemasearchwebsitesitelinks
3.5

BreadcrumbList schema

mediumPass / Warn / Fail

AI agents use BreadcrumbList to understand your site hierarchy and navigate between parent/child pages. Without breadcrumbs, agents cannot infer where a page sits in your content tree, making it harder to provide contextual answers that reference related pages.

Why This Matters

Without BreadcrumbList schema, AI agents cannot infer where a page sits in your site hierarchy. This prevents agents from navigating between parent and child pages and from providing contextual answers that reference related pages in your content tree.

How to Fix

Add BreadcrumbList JSON-LD to every page with URL depth greater than 1. Each ListItem should include position, name, and item (the URL).

Example

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://yoursite.com/" },
    { "@type": "ListItem", "position": 2, "name": "Category", "item": "https://yoursite.com/category/" },
    { "@type": "ListItem", "position": 3, "name": "Current Page", "item": "https://yoursite.com/category/page/" }
  ]
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemanavigationsite-structure
3.6

Article schema

highPass / Warn / Fail

AI agents extract Article schema to identify content freshness (datePublished/dateModified), authorship, and topic (headline). Without it, your blog content is treated as generic text with no provenance, reducing its chances of being cited in AI-generated answers.

Why This Matters

Without Article schema, AI answer engines treat your blog content as generic text with no provenance. You lose content freshness signals (datePublished/dateModified), authorship attribution, and headline extraction -- all of which reduce your chances of being cited in AI-generated answers.

How to Fix

Add Article or BlogPosting JSON-LD to every blog page. Include headline, datePublished, dateModified, and author with a nested Person type.

Example

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Your Article Title",
  "datePublished": "2025-01-15",
  "dateModified": "2025-02-01",
  "author": {
    "@type": "Person",
    "name": "Author Name"
  }
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemacontentarticleblog
3.7

FAQPage schema

mediumPass / Warn / Fail

AI answer engines like Perplexity and Google SGE extract FAQ-structured content with higher confidence for direct answers. FAQPage schema makes your Q&A content machine-readable, giving it priority in AI-generated responses over unstructured text.

Why This Matters

AI answer engines like Perplexity and Google SGE give priority to FAQ-structured content for direct answers. Without FAQPage schema, your Q&A content is treated as unstructured text and is less likely to be surfaced as a featured answer in AI-generated responses.

How to Fix

Add FAQPage JSON-LD to every page that contains question-answer content. Each question should be a Question type with an acceptedAnswer of type Answer.

Example

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is your return policy?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "We offer a 30-day money-back guarantee on all purchases."
      }
    }
  ]
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemafaqcontent
3.8

Service/Product schema

mediumPass / Warn / Fail

AI agents use Service/Product schema to understand what you offer, who provides it, and how to describe it to users. Without it, agents must infer your offerings from unstructured text, which leads to inaccurate or incomplete descriptions in AI-generated recommendations.

Why This Matters

Without Service or Product schema, AI agents must infer your offerings from unstructured text. This leads to inaccurate or incomplete descriptions in AI-generated recommendations, and your services may be entirely overlooked when agents compare options for users.

How to Fix

Add Service or Product JSON-LD to pages describing your offerings. Include name, description, and provider (nested Organization) at minimum.

Example

{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "Your Service Name",
  "description": "A clear description of what this service provides.",
  "provider": {
    "@type": "Organization",
    "name": "Your Company"
  }
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemaserviceproductecommerce
3.9

Speakable schema

lowPass / Fail

Voice-based AI agents (Google Assistant, Alexa, Siri) use the speakable property to identify which parts of your page to read aloud. Without it, voice agents must guess which content to vocalize, often choosing poorly. Add cssSelector references to your most important content sections.

Why This Matters

Voice-based AI agents (Google Assistant, Alexa, Siri) use the speakable property to identify which parts of your page to read aloud. Without it, voice agents guess which content to vocalize, often choosing navigation text or boilerplate instead of your key content.

How to Fix

Add a speakable property with a SpeakableSpecification type to your Article, WebPage, or other content schema. Use cssSelector to point to your most important content elements.

Example

{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "name": "Page Title",
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [".article-title", ".article-summary"]
  }
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemavoiceaccessibilityspeakable
3.10

potentialAction on service pages

mediumPass / Fail

AI agents use potentialAction to understand what actions users can take on your site (order, book, contact). This enables agentic workflows where ChatGPT or Claude can guide users directly to the right action URL instead of just describing your service.

Why This Matters

Without potentialAction schema, AI agents cannot determine what actions users can take on your site (order, book, contact). This prevents agentic workflows where ChatGPT or Claude could guide users directly to the right action URL, reducing conversion from AI-driven traffic.

How to Fix

Add a potentialAction property to your Organization or Service schema with a ContactAction, OrderAction, or BookAction type and a target URL.

Example

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your Company",
  "potentialAction": {
    "@type": "OrderAction",
    "target": "https://yoursite.com/order"
  }
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemaactionsagentic-commerce
3.11

HowTo schema

lowPass / Warn / Fail

AI agents use HowTo schema to present step-by-step instructions as structured answers. Without it, agents must parse your numbered headings heuristically, which often breaks step ordering or misses steps entirely.

Why This Matters

Without HowTo schema, AI agents must heuristically parse your numbered headings to extract step-by-step instructions. This often results in broken step ordering, missed steps, or incomplete instructions in AI-generated answers, reducing your content utility.

How to Fix

Add HowTo JSON-LD to pages with step-by-step instructions. Include a step array with HowToStep items, each containing name and text properties.

Example

{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to set up your account",
  "step": [
    { "@type": "HowToStep", "name": "Create an account", "text": "Visit the signup page and fill in your details." },
    { "@type": "HowToStep", "name": "Verify your email", "text": "Click the link in the confirmation email." }
  ]
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemacontenthow-toinstructions
3.12

LocalBusiness/ProfessionalService schema

mediumPass / Warn / Fail

AI agents use LocalBusiness schema to answer location-based queries like "find a [service] near me." Without it, your business is invisible to location-aware AI systems. Add address, telephone, and openingHours to help agents provide accurate local recommendations.

Why This Matters

Without LocalBusiness schema, your business is invisible to location-aware AI systems. AI agents cannot answer "find a [service] near me" queries with your business, and your address, phone number, and hours will not appear in AI-generated local recommendations.

How to Fix

Add LocalBusiness or ProfessionalService JSON-LD to your homepage. Include name, address (PostalAddress), telephone, and openingHours.

Example

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Your Business",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main St",
    "addressLocality": "City",
    "addressRegion": "ST",
    "postalCode": "12345"
  },
  "telephone": "+1-555-555-5555",
  "openingHours": "Mo-Fr 09:00-17:00"
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemalocal-businesslocation
3.13

Review/AggregateRating schema

mediumPass / Warn / Fail

AI agents use Review/AggregateRating schema as social proof when comparing options. When a user asks "what is the best X?", agents surface structured ratings from schema rather than parsing unstructured testimonial text. Add this schema to make your reviews machine-readable.

Why This Matters

When users ask AI agents "what is the best X?", agents surface structured ratings from Review/AggregateRating schema rather than parsing unstructured testimonial text. Without this schema, your customer reviews and social proof are invisible to AI-driven comparisons and recommendations.

How to Fix

Add AggregateRating or Review JSON-LD to pages with testimonials or reviews. For aggregate ratings, include ratingValue and reviewCount. For individual reviews, include author, reviewRating, and reviewBody.

Example

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Your Product",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "150"
  },
  "review": {
    "@type": "Review",
    "author": { "@type": "Person", "name": "Customer Name" },
    "reviewRating": { "@type": "Rating", "ratingValue": "5" },
    "reviewBody": "Excellent product, highly recommend."
  }
}
Effort: Moderate (hours)Documentation →
json-ldschemareviewsratingssocial-proof
3.14

Offer schema on pricing pages

mediumPass / Warn / Fail

AI agents use Offer schema to answer pricing queries with exact numbers. Without price and priceCurrency in structured data, agents must scrape and guess pricing from page text, which often produces inaccurate or outdated results in AI-generated comparisons.

Why This Matters

Without Offer schema on pricing pages, AI agents cannot answer "how much does X cost?" with exact numbers. Agents must scrape and guess pricing from page text, which frequently produces inaccurate or outdated results in AI-generated price comparisons.

How to Fix

Add Offer or AggregateOffer JSON-LD to your pricing pages. Include price, priceCurrency, and optionally availability and priceValidUntil.

Example

{
  "@context": "https://schema.org",
  "@type": "Offer",
  "name": "Pro Plan",
  "price": "99.00",
  "priceCurrency": "USD",
  "availability": "https://schema.org/InStock",
  "priceValidUntil": "2026-12-31"
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemapricingecommerce
3.15

Author schema with credentials

mediumPass / Warn / Fail

AI systems assign higher confidence to content from named experts with verifiable credentials. Person schema with jobTitle, sameAs, and affiliation lets AI agents cross-reference author identity across platforms, boosting your content in RAG trust scoring.

Why This Matters

AI systems assign higher trust to content from named experts with verifiable credentials. Without Person schema containing jobTitle, sameAs, and affiliation, AI agents cannot cross-reference your author identity across platforms, lowering your content ranking in RAG trust scoring and reducing citation likelihood.

How to Fix

Add or enhance Person schema on author pages and within Article author properties. Include name, jobTitle, sameAs (linking to LinkedIn, Twitter, etc.), and affiliation with a nested Organization.

Example

{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Jane Smith",
  "jobTitle": "Senior Product Engineer",
  "sameAs": [
    "https://linkedin.com/in/janesmith",
    "https://twitter.com/janesmith"
  ],
  "affiliation": {
    "@type": "Organization",
    "name": "Your Company"
  }
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemaauthortrustE-E-A-T
3.16

ConfirmAction/ReserveAction schema

lowPass / Warn / Fail

AI agents use ConfirmAction/ReserveAction schema to complete transactions on behalf of users in agentic workflows. Without this schema on your confirmation pages, agents cannot programmatically verify that a booking or purchase was successful.

Why This Matters

Without ConfirmAction or ReserveAction schema on confirmation pages, AI agents cannot programmatically verify that a booking or purchase completed successfully. This breaks end-to-end agentic commerce workflows, forcing users back into manual checkout confirmation.

How to Fix

Add a ConfirmAction or ReserveAction as a potentialAction on your thank-you/confirmation page JSON-LD. Include the target URL pointing to the confirmation endpoint.

Example

{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "potentialAction": {
    "@type": "ConfirmAction",
    "target": "https://yoursite.com/confirm"
  }
}
Effort: Moderate (hours)Documentation →
json-ldschemaagentic-commerceactions
3.21

Product identifiers (GTIN/UPC/MPN)

highPass / Warn / Fail

AI agents use unique identifiers like GTIN, UPC, or MPN to de-duplicate products across different sources and confirm they are looking at the exact item the user wants. Without them, agents may confuse similar products or fail to find specific pricing.

Why This Matters

Without unique identifiers (GTIN, UPC, MPN, or SKU), AI agents cannot de-duplicate your products across different sources or confirm they are looking at the exact item the user wants. This leads to product confusion, missed price-comparison opportunities, and lower visibility in AI shopping assistants.

How to Fix

Add at least one unique product identifier to your Product JSON-LD. Use sku for internal IDs, gtin13 for barcodes, or mpn for manufacturer part numbers.

Example

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Product Name",
  "sku": "SKU-123456",
  "gtin13": "1234567890123",
  "mpn": "MPN-7890"
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemaproductecommerceidentifiers
3.22

Advanced product details

mediumPass / Warn / Fail

AI agents use brand, category, and availability status to filter search results and answer availability queries. Missing these details makes your products less likely to surface in filtered AI recommendations.

Why This Matters

Missing brand, category, or availability in your Product schema means AI agents cannot filter or surface your products in response to specific shopping queries. Your products are less likely to appear in AI-generated comparisons and "best of" recommendations.

How to Fix

Add brand (as a nested Organization or Brand), category, and availability to your existing Product JSON-LD. If availability lives on your Offer, ensure it uses a schema.org ItemAvailability value.

Example

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Product Name",
  "brand": {
    "@type": "Brand",
    "name": "Your Brand"
  },
  "category": "Electronics > Smartphones",
  "offers": {
    "@type": "Offer",
    "availability": "https://schema.org/InStock"
  }
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemaproductecommerce
3.23

Product reviews and ratings

lowPass / Warn / Fail

AI agents often rank products based on user ratings and review volume. Providing AggregateRating schema allows agents to confidently recommend highly-rated items to users.

Why This Matters

AI agents rank products based on user ratings and review volume. Without AggregateRating schema, agents cannot include your social proof in their recommendations, making your products less competitive in AI-generated "best of" lists and comparison answers.

How to Fix

Add an aggregateRating property to your Product JSON-LD. Include ratingValue, reviewCount, and bestRating to give AI agents full rating context.

Example

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Product Name",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "125",
    "bestRating": "5"
  }
}
Effort: Easy (< 1 hour)Documentation →
json-ldschemaproductecommercereviewsratings