Schema.org Implementation for AI Discovery

Complete guide to adding structured data that enables AI agents to understand your website's content, entities, and relationships.

Why Schema.org Matters for AI

When an AI agent lands on your website, it faces a challenge: How does it understand what this page is about?

Without Schema.org:

With Schema.org:

Digital Karma Impact

Schema.org coverage accounts for 20% of your Digital Karma Score — the single largest signal. Sites with comprehensive Schema.org markup rank significantly higher in AI trust assessments.

Schema.org Basics

What is Schema.org?

Schema.org is a collaborative, community-driven vocabulary for structured data on the Internet. Created by Google, Microsoft, Yahoo, and Yandex, it provides a shared language for describing entities and their relationships.

JSON-LD Format

The recommended format for Schema.org is JSON-LD (JavaScript Object Notation for Linked Data).

Why JSON-LD?

Basic Structure

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "EntityType",
  "propertyName": "propertyValue",
  "anotherProperty": {
    "@type": "NestedEntityType",
    "nestedProperty": "value"
  }
}
</script>

Key components:

Essential Entity Types

1. Organization

Use for: Your business, project, or entity identity.

Where: Homepage, About page

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://www.aiwebsitesystems.com/#organization",
  "name": "AI Website Systems",
  "url": "https://www.aiwebsitesystems.com",
  "logo": {
    "@type": "ImageObject",
    "url": "https://www.aiwebsitesystems.com/img/logo.png",
    "width": 200,
    "height": 60
  },
  "description": "Comprehensive directory of AI-native website platforms",
  "foundingDate": "2024",
  "email": "hello@aiwebsitesystems.com",
  "sameAs": [
    "https://twitter.com/aiwebsitesystems",
    "https://github.com/aiwebsitesystems"
  ],
  "memberOf": {
    "@type": "Organization",
    "@id": "https://www.aiwebsitesystems.com/federation-registry.html#federation",
    "name": "Digital Karma Web Federation",
    "url": "https://www.aiwebsitesystems.com/federation-registry.html"
  }
}
</script>

Important properties:

2. WebSite

Use for: Site-level metadata and search functionality.

Where: Homepage

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "@id": "https://www.aiwebsitesystems.com/#website",
  "name": "AI Website Systems",
  "url": "https://www.aiwebsitesystems.com",
  "description": "The knowledge base for AI-native web infrastructure",
  "publisher": {
    "@id": "https://www.aiwebsitesystems.com/#organization"
  },
  "potentialAction": {
    "@type": "SearchAction",
    "target": "https://www.aiwebsitesystems.com/directory-page.html?q={search_term_string}",
    "query-input": "required name=search_term_string"
  }
}
</script>

Key features:

3. WebPage

Use for: Individual page context.

Where: Every page on your site

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "@id": "https://www.aiwebsitesystems.com/about.html#webpage",
  "url": "https://www.aiwebsitesystems.com/about.html",
  "name": "About AI Website Systems",
  "description": "Learn about our mission to build AI-native web infrastructure",
  "isPartOf": {
    "@id": "https://www.aiwebsitesystems.com/#website"
  },
  "about": {
    "@id": "https://www.aiwebsitesystems.com/#organization"
  },
  "datePublished": "2024-01-01T00:00:00Z",
  "dateModified": "2026-03-05T10:00:00Z",
  "inLanguage": "en-US"
}
</script>

4. Article

Use for: Blog posts, articles, knowledge base entries.

Where: All editorial content

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "@id": "https://www.aiwebsitesystems.com/knowledge-base/what-is-ai-website-system.html#article",
  "headline": "What is an AI Website System?",
  "description": "Complete guide to AI-native website architecture",
  "url": "https://www.aiwebsitesystems.com/knowledge-base/what-is-ai-website-system.html",
  "author": {
    "@type": "Organization",
    "@id": "https://www.aiwebsitesystems.com/#organization"
  },
  "publisher": {
    "@type": "Organization",
    "@id": "https://www.aiwebsitesystems.com/#organization"
  },
  "datePublished": "2026-02-10T10:00:00Z",
  "dateModified": "2026-03-05T09:00:00Z",
  "articleSection": "Getting Started",
  "keywords": ["AI website", "machine-readable", "federation"],
  "wordCount": 2500,
  "inLanguage": "en-US"
}
</script>

5. SoftwareApplication

Use for: Tools, platforms, applications in your directory.

Where: Product/system pages

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "@id": "https://www.aiwebsitesystems.com/directory-page.html#digital-karma-static",
  "name": "Digital Karma Static Sites",
  "applicationCategory": "WebApplication",
  "description": "Federation v6.1 compliant static site generator",
  "url": "https://example.com",
  "operatingSystem": "Cross-platform",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "USD"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "0.92",
    "ratingCount": "1",
    "bestRating": "1.0",
    "worstRating": "0.0"
  },
  "featureList": [
    "Federation v6.1 endpoints",
    "Schema.org markup",
    "Static file generation"
  ]
}
</script>

6. ItemList / CollectionPage

Use for: Directories, catalogs, listings.

Where: Directory pages, category pages

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "CollectionPage",
  "name": "AI Website Systems Directory",
  "description": "Comprehensive catalog of 47 AI-native platforms",
  "url": "https://www.aiwebsitesystems.com/directory-page.html",
  "mainEntity": {
    "@type": "ItemList",
    "numberOfItems": 47,
    "itemListElement": [
      {
        "@type": "SoftwareApplication",
        "position": 1,
        "name": "Digital Karma Static Sites",
        "url": "https://example.com"
      },
      {
        "@type": "SoftwareApplication",
        "position": 2,
        "name": "Joomla Federation Edition",
        "url": "https://example2.com"
      }
    ]
  }
}
</script>

Advanced Patterns

1. Graph Structure (@id References)

Use @id to reference entities across pages, creating a knowledge graph.

Homepage (defines Organization):

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://yoursite.com/#organization",
  "name": "Your Company"
}

About page (references Organization):

{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "about": {
    "@id": "https://yoursite.com/#organization"
  }
}

AI agents can now understand that the About page describes the same Organization entity defined on the homepage.

2. Multiple Entity Types (@graph)

Define multiple entities in one JSON-LD block:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://yoursite.com/#organization",
      "name": "Your Company"
    },
    {
      "@type": "WebSite",
      "@id": "https://yoursite.com/#website",
      "name": "Your Site",
      "publisher": {
        "@id": "https://yoursite.com/#organization"
      }
    },
    {
      "@type": "WebPage",
      "isPartOf": {
        "@id": "https://yoursite.com/#website"
      },
      "about": {
        "@id": "https://yoursite.com/#organization"
      }
    }
  ]
}
</script>

3. Breadcrumbs

Help AI agents understand site hierarchy:

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://yoursite.com"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Knowledge Base",
      "item": "https://yoursite.com/knowledge-base"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Schema.org Guide"
    }
  ]
}

Implementation Workflow

Step 1: Entity Audit

Map out the entities on your site:

Step 2: Choose Templates

Select appropriate Schema.org types for each page:

Step 3: Generate JSON-LD

Manual method: Copy templates, fill in your data

Programmatic method: Generate from your content management system

Python example:

def generate_article_jsonld(article):
    return {
        "@context": "https://schema.org",
        "@type": "Article",
        "@id": f"{article['url']}#article",
        "headline": article['title'],
        "description": article['description'],
        "author": {
            "@type": "Organization",
            "@id": "https://yoursite.com/#organization"
        },
        "datePublished": article['created_at'],
        "dateModified": article['updated_at']
    }

Step 4: Embed in HTML

<!DOCTYPE html>
<html>
<head>
    <title>Page Title</title>
    
    <!-- Schema.org JSON-LD -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Article",
      "headline": "Your Article Title"
    }
    </script>
</head>
<body>
    ...
</body>
</html>

Step 5: Validate

Use validation tools:

Step 6: Monitor Coverage

Track how many pages have Schema.org markup:

# Check schema coverage
grep -r "application/ld+json" . --include="*.html" | wc -l

# Or use Python
import os
from pathlib import Path

html_files = list(Path('.').rglob('*.html'))
with_schema = sum(1 for f in html_files if 'application/ld+json' in f.read_text())
coverage = with_schema / len(html_files) * 100

print(f"Schema.org coverage: {coverage:.1f}%")

Best Practices

✅ Do's

❌ Don'ts

Common Mistakes

1. Missing @context

Wrong:

{ "@type": "Organization", "name": "Company" }

Correct:

{ "@context": "https://schema.org", "@type": "Organization", "name": "Company" }

2. Inconsistent @id References

Wrong:

// Page 1
{ "@id": "https://site.com/#org" }

// Page 2 (different ID)
{ "@id": "https://site.com/#organization" }

Correct: Use the same @id across all pages

3. Relative URLs

Wrong:

{ "url": "/about.html" }

Correct:

{ "url": "https://yoursite.com/about.html" }

4. Invalid Date Formats

Wrong:

{ "datePublished": "March 5, 2026" }

Correct:

{ "datePublished": "2026-03-05T10:00:00Z" }

Template Library

Ready-to-use templates for common scenarios:

Homepage Template

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://YOURSITE.com/#organization",
      "name": "YOUR ORGANIZATION NAME",
      "url": "https://YOURSITE.com",
      "logo": "https://YOURSITE.com/logo.png",
      "description": "YOUR DESCRIPTION",
      "sameAs": [
        "https://twitter.com/YOURHANDLE",
        "https://github.com/YOURHANDLE"
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://YOURSITE.com/#website",
      "name": "YOUR SITE NAME",
      "url": "https://YOURSITE.com",
      "publisher": {
        "@id": "https://YOURSITE.com/#organization"
      }
    }
  ]
}
</script>

Article Template

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "ARTICLE TITLE",
  "description": "ARTICLE DESCRIPTION",
  "url": "https://YOURSITE.com/article.html",
  "author": {
    "@type": "Organization",
    "@id": "https://YOURSITE.com/#organization"
  },
  "publisher": {
    "@type": "Organization",
    "@id": "https://YOURSITE.com/#organization"
  },
  "datePublished": "2026-03-05T10:00:00Z",
  "dateModified": "2026-03-05T10:00:00Z"
}
</script>

Download full template library: schema-templates.zip

Next Steps

  1. Audit your website entities and content types
  2. Choose appropriate Schema.org types for each page
  3. Generate JSON-LD using templates above
  4. Embed in HTML <head> sections
  5. Validate with Google Rich Results Test
  6. Calculate your Digital Karma Score (Schema Coverage signal)
  7. Submit to federation: Join Now

Related Resources