From isagentready
Fixes structured data issues — adds and validates JSON-LD markup with Schema.org types including Organization, WebSite, Product, Article, FAQPage, BreadcrumbList, entity linking, and author attribution so AI search engines can understand and cite website content. Use when asked to "add JSON-LD", "fix structured data", "add schema markup", "improve structured data score", "add Organization schema", "add BreadcrumbList", "fix Schema.org", "add product markup", "add FAQ schema", "add author markup", or any JSON-LD or Schema.org task.
How this skill is triggered — by the user, by Claude, or both
Slash command
/isagentready:structured-dataThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Fixes Category 2 (AI Search Signals, 20% weight) issues from [IsAgentReady.com](https://isagentready.com). This category measures how well a website communicates its content to AI search engines through machine-readable structured data.
Fixes Category 2 (AI Search Signals, 20% weight) issues from IsAgentReady.com. This category measures how well a website communicates its content to AI search engines through machine-readable structured data.
ai-content-discovery skill)content-semantics skill)security-trust skill)| ID | Checkpoint | Points | Pass Criteria |
|---|---|---|---|
| 2.1 | JSON-LD present | 20 | <script type="application/ld+json"> with schema.org @context |
| 2.2 | Organization / WebSite schema | 15 | @type Organization or WebSite with name + url |
| 2.3 | High-value schema types | 20 | Content-appropriate type with required properties |
| 2.4 | Entity linking (@id) | 10 | Entities with @id + cross-references between them |
| 2.5 | BreadcrumbList markup | 10 | Valid BreadcrumbList with position, name, item per element |
| 2.6 | Schema validation | 10 | No duplicate @type, no missing/empty required fields |
| 2.7 | FAQPage schema | 10 | FAQPage JSON-LD with valid Question + acceptedAnswer items |
| 2.8 | Author attribution | 10 | JSON-LD author with Person/Organization, meta author, or rel |
Total: 105 points. Partial credit available for 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8.
Looks for <script type="application/ld+json"> blocks where the parsed JSON contains @context with schema.org.
JSON-LD is the preferred format for structured data by Google and AI search engines. It tells AI systems exactly what your page is about using a standardized vocabulary. Without it, AI systems must guess your content's meaning from unstructured HTML.
Identify your page type. Determine what your page represents: a company homepage (Organization), a product page (Product), a blog post (Article), etc.
Add a JSON-LD block in the <head> (preferred) or before </body>:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Company",
"url": "https://example.com",
"logo": "https://example.com/logo.png"
}
</script>
Validate the JSON is well-formed. Common mistakes: trailing commas, unescaped quotes, missing closing braces.
Verify with Google Rich Results Test or Schema.org Validator.
JSON-LD with @type of Organization or WebSite. Required properties: name, url. Bonus properties: logo, sameAs, contactPoint.
name + urlname or urlOrganization and WebSite schemas establish your brand identity in the knowledge graph. AI systems use these to attribute content, display rich results, and build entity relationships.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Company",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"sameAs": [
"https://twitter.com/yourcompany",
"https://linkedin.com/company/yourcompany",
"https://github.com/yourcompany"
],
"contactPoint": {
"@type": "ContactPoint",
"email": "[email protected]",
"contactType": "customer service"
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Your Site Name",
"url": "https://example.com",
"potentialAction": {
"@type": "SearchAction",
"target": "https://example.com/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
</script>
name and url are present — these are required for full credit. Empty strings don't count.Looks for any of 17 content-specific schema types with their required properties.
Certain schema types trigger rich results in Google and are used by AI search engines like Perplexity and ChatGPT to generate citations and structured answers. The right type depends on your content.
| Content Type | Schema Type | Required Properties |
|---|---|---|
| Blog/news | Article | headline |
| Products | Product | name |
| SaaS/tools | SoftwareApplication | name |
| FAQ pages | FAQPage | mainEntity |
| Local businesses | LocalBusiness | name, address |
| Services | Service | name |
| Events | Event | name, startDate |
| How-to guides | HowTo | name, step |
| Courses | Course | name, description |
| Job listings | JobPosting | title, description, datePosted, hiringOrganization |
| Videos | VideoObject | name |
| Recipes | Recipe | name |
| Q&A pages | QAPage | mainEntity |
Add the JSON-LD for your content type. See references/schema-types.md for complete templates.
Include all required properties — partial credit (10 pts) is given if the type is present but missing required fields.
JSON-LD entities with @id properties, and cross-references between entities using those @id values.
@id + at least one cross-reference@id but no cross-references@idEntity linking via @id creates a connected graph of your content. AI systems can follow these references to build deeper understanding of relationships between your pages, organization, and content.
@id to each entity using the URL#fragment pattern:{
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Your Company",
"url": "https://example.com"
}
@id:<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Your Company",
"url": "https://example.com"
},
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"name": "Your Site",
"url": "https://example.com",
"publisher": { "@id": "https://example.com/#organization" }
},
{
"@type": "Article",
"@id": "https://example.com/blog/post/#article",
"headline": "My Article",
"author": { "@id": "https://example.com/#organization" },
"isPartOf": { "@id": "https://example.com/#website" }
}
]
}
</script>
@graph to bundle multiple entities in a single JSON-LD block. See references/json-ld-patterns.md for detailed patterns.@type: BreadcrumbList with itemListElement array. Each element must have position, name, and item (URL).
BreadcrumbList helps AI agents understand your site hierarchy and navigation structure. It enables rich breadcrumb display in search results and improves content categorization.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Products",
"item": "https://example.com/products"
},
{
"@type": "ListItem",
"position": 3,
"name": "Widget Pro",
"item": "https://example.com/products/widget-pro"
}
]
}
</script>
Ensure each item has all three properties:
position: Integer starting at 1name: Human-readable labelitem: Full URL of that breadcrumb levelMatch your visible breadcrumbs — the JSON-LD should reflect the actual breadcrumb navigation shown on the page.
Validates structural correctness: no duplicate @type in same block, required properties present for each type, no empty required fields.
Invalid structured data is ignored by search engines and AI systems. Validation errors mean your markup effort provides zero benefit — properly structured data is essential.
// WRONG — two Organization entities in same @graph
{
"@graph": [
{ "@type": "Organization", "name": "Company A" },
{ "@type": "Organization", "name": "Company B" }
]
}
Ensure required properties exist for each type. See the required properties table in checkpoint 2.3.
Remove empty required fields:
// WRONG — empty name
{ "@type": "Organization", "name": "", "url": "https://example.com" }
// CORRECT
{ "@type": "Organization", "name": "Your Company", "url": "https://example.com" }
See references/gotchas.md for common validation pitfalls.
JSON-LD with @type: FAQPage and mainEntity array containing Question items with valid acceptedAnswer.
acceptedAnswer of type AnswerSites with FAQPage schema are 8x more likely to be cited by ChatGPT. FAQ structure maps directly to question-answer patterns AI models use.
name and acceptedAnswer with @type: Answer:{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is AI agent readiness?",
"acceptedAnswer": {
"@type": "Answer",
"text": "AI agent readiness measures how well your website can be discovered and understood by AI systems."
}
}
]
}
Common mistakes (cause partial 5 pts): Question without acceptedAnswer, acceptedAnswer missing @type: Answer, empty mainEntity array.
Validate with Google Rich Results Test. Full template: references/schema-types.md.
Author signals in JSON-LD, meta tags, or link elements.
author with @type Person/Organization and name<meta name="author" content="..."><link rel="author"> or <a rel="author">96% of Google AI Overview sources show E-E-A-T signals. Claude and ChatGPT prefer content with clear author attribution.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Your Article Title",
"author": {
"@type": "Person",
"name": "Jane Smith",
"url": "https://example.com/authors/jane-smith"
}
}
For company content, use "@type": "Organization" instead of "Person".
Meta author tag as fallback (7 pts):
<meta name="author" content="Jane Smith">
Rel author link as minimum (5 pts):
<link rel="author" href="https://example.com/authors/jane-smith">
Verify:
curl -s https://example.com/ | grep -iE '"author"|name="author"|rel="author"'
For a site with no structured data, add these in order for the fastest score improvement:
Combined @graph example covering 2.1-2.4 + 2.6 + 2.8 — see references/json-ld-patterns.md for the full template with Organization, WebSite, content type, @id cross-references, and author.
"@context": "https://schema.org" is not recognized"name": "" counts as missing"organization" or "ORGANIZATION" won't match; use PascalCase "Organization""mainEntity": [] fails; include at least one Question with acceptedAnswer"author": "Jane Smith" (string) fails; use "author": { "@type": "Person", "name": "Jane Smith" }See references/gotchas.md for detailed correct vs incorrect examples of each.
If $ARGUMENTS is provided, interpret it as the URL to fix or the specific checkpoint to address.
Provides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.
npx claudepluginhub bartwaardenburg/isagentready-skills --plugin isagentready