SEO Audit
by coreyhaines31 / marketingskills
Audit, review, or diagnose SEO issues on your site.
Fixes structured data issues.
Listed ·Updated
Install data from skills.sh
Structured Data is an SEO Audit skill for AI agents, published in the seoskills.sh catalog. Reach for it when your work involves full technical and on-page audits with prioritized action plans. Install it with one command and it runs inside your own agent, so the work happens in your workflow, not a separate SEO tool.
Fixes the AI Search Signals category of IsAgentReady.com. These checkpoints test if the site gives machine-readable context that AI search products can use and cite.
2026-10-22. Methodology: https://isagentready.com/en/methodologyThe scanner reads the first HTML response. It does not run JavaScript. JSON-LD that only JavaScript adds does not count.
ai-content-discovery.content-semantics.security-trust.2.2) and a stable id (ia.organization-schema).example.com with the domain of the site.isagentready results <domain> --checkpoint <stable-id> or at isagentready.com.If $ARGUMENTS is provided, use it as the URL to fix or as the checkpoint to fix.
Strength is the agentready.org spec level (MUST, SHOULD, MAY). Strength does not change the score.
| Legacy | Stable ID | Name | AR IDs | Strength |
|---|---|---|---|---|
| 2.1 | ia.json-ld | JSON-LD present | AR-READ-08 | SHOULD |
| 2.2 | ia.organization-schema | Organization / WebSite schema | AR-READ-08 | SHOULD |
| 2.3 | ia.high-value-schema | High-value schema types | AR-READ-08 | SHOULD |
| 2.4 | ia.entity-linking | Entity linking via @id | AR-READ-08 | SHOULD |
| 2.6 | ia.schema-validation | Schema validation | AR-READ-08 | SHOULD |
| 2.7 | ia.faq-schema | FAQPage schema | AR-READ-08 | SHOULD |
| 2.8 | ia.author-attribution | Author attribution | AR-READ-08 | SHOULD |
| 2.9 | ia.trust-pages | Trust anchor pages | none | SHOULD |
For a site without structured data, add one @graph block with Organization, WebSite and the main content type. Give each entity an @id and an author. This block fixes 2.1, 2.2, 2.3, 2.4 and 2.8 together. The full template is in references/json-ld-patterns.md.
Passes when the HTML has one or more <script type="application/ld+json"> blocks with valid JSON and a @context of https://schema.org.
<head> in the server HTML:
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "Organization",
"name": "Example Inc", "url": "https://example.com" }
</script>
Verify: curl -sf https://example.com/ | grep -q 'application/ld+json'
Passes when JSON-LD has Organization or WebSite with name and url. logo, sameAs and contactPoint give more context.
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Example Inc",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"sameAs": ["https://www.linkedin.com/company/example", "https://github.com/example"],
"contactPoint": { "@type": "ContactPoint", "email": "info@example.com", "contactType": "customer service" }
}
WebSite entity with a SearchAction when the site has search. See references/json-ld-patterns.md.Verify: curl -sf https://example.com/ | grep -qE '"@type": *"(Organization|WebSite)"'
Passes when the page has one high-value type with its required properties. The types are Article, NewsArticle, BlogPosting, Product, SoftwareApplication, WebApplication, MobileApplication, LocalBusiness, Service, FAQPage, QAPage, HowTo, Course, JobPosting, VideoObject, Event and Recipe.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Planner Pro",
"description": "Project planning software for small teams",
"offers": { "@type": "Offer", "price": "12.00", "priceCurrency": "USD" }
}
Verify: curl -sf https://example.com/ | grep -oE '"@type": *"[A-Za-z]+"' | sort -u
Passes when entities have an @id and refer to each other by @id. An @id without a reference gives partial credit.
@id with the pattern <url>#<type>. Refer to it from other entities:
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "Organization", "@id": "https://example.com/#organization", "name": "Example Inc", "url": "https://example.com" },
{ "@type": "WebSite", "@id": "https://example.com/#website", "url": "https://example.com",
"publisher": { "@id": "https://example.com/#organization" } }
]
}
Verify: curl -sf https://example.com/ | grep -c '"@id"' (expect 2 or more)
Passes when the JSON-LD has no duplicate @type in one block, no missing required properties and no empty required values.
@graph, or merge the two entities."name": "" with real values.Organization, not organization.Verify: no read-only shell check exists. Use the validator and the rescan command.
Applies when the page shows FAQ content or has FAQPage JSON-LD. Passes when each Question has an acceptedAnswer and the questions are also visible on the page.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "Can I cancel at any time?",
"acceptedAnswer": { "@type": "Answer", "text": "Yes. You can cancel in the billing settings." }
}]
}
Verify: curl -sf https://example.com/ | grep -q '"FAQPage"' (on a page with a visible FAQ)
Passes when JSON-LD has an author with @type Person or Organization and a name. <meta name="author"> or rel="author" gives partial credit.
{ "@context": "https://schema.org", "@type": "Article", "headline": "Plan a sprint",
"author": { "@type": "Person", "name": "Jane Smith", "url": "https://example.com/authors/jane" } }
"@type": "Organization". Do not use a plain string as the author.Verify: curl -sf https://example.com/ | grep -qE '"author"|name="author"|rel="author"'
Passes when the about, contact and privacy pages return 2xx with 500 or more characters of visible text. The scanner follows same-origin homepage links, also with local paths such as /over-ons. It then tries /about, /contact and /privacy.
<footer>
<nav aria-label="Company">
<a href="/about">About Example Inc</a>
<a href="/contact">Contact</a>
<a href="/privacy">Privacy policy</a>
</nav>
</footer>
Verify: curl -sI https://example.com/about https://example.com/contact https://example.com/privacy | grep -i '^HTTP/'
"@context": "https://schema.org" does not count.@graph cause a validation issue."author": "Jane Smith" (a string) fails. Use an object with @type and name.See references/gotchas.md for correct and incorrect examples.
@graph, entity linking, SearchAction and combined typesNot using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.