Install
openclaw skills install @asale-ai/seo-schemaDetect, validate, and generate Schema.org structured data. JSON-LD format preferred. Use when user says "schema", "structured data", "rich results", "JSON-LD", or "markup".
openclaw skills install @asale-ai/seo-schema<script type="application/ld+json">itemscope, itemprop)typeof, property)Read ../seo/references/schema-types.md for the full list. Key rules:
Organization, LocalBusiness, SoftwareApplication, WebApplication, Product (with Certification markup as of April 2025), ProductGroup, Offer, Service, Article, BlogPosting, NewsArticle, Review, AggregateRating, BreadcrumbList, WebSite, WebPage, Person, ProfilePage, ContactPage, VideoObject, ImageObject, Event, JobPosting, Course, DiscussionForumPosting
BroadcastEvent, Clip, SeekToAction, SoftwareSourceCode
See schema/templates.json for ready-to-use JSON-LD templates for these types.
JSON-LD and JavaScript rendering: Per Google's December 2025 JS SEO guidance, structured data injected via JavaScript may face delayed processing. For time-sensitive markup (especially Product, Offer), include JSON-LD in the initial server-rendered HTML.
eduQuestionType=Flashcard). For e-commerce, hasAdultConsideration (added 2026-05-22; value https://schema.org/SexualContentConsideration) is required for adult products.When generating schema for a page:
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "[Company Name]",
"url": "[Website URL]",
"logo": "[Logo URL]",
"contactPoint": {
"@type": "ContactPoint",
"telephone": "[Phone]",
"contactType": "customer service"
},
"sameAs": [
"[Facebook URL]",
"[LinkedIn URL]",
"[Twitter URL]"
]
}
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "[Business Name]",
"address": {
"@type": "PostalAddress",
"streetAddress": "[Street]",
"addressLocality": "[City]",
"addressRegion": "[State]",
"postalCode": "[ZIP]",
"addressCountry": "US"
},
"telephone": "[Phone]",
"openingHours": "Mo-Fr 09:00-17:00",
"geo": {
"@type": "GeoCoordinates",
"latitude": "[Lat]",
"longitude": "[Long]"
}
}
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "[Title]",
"author": {
"@type": "Person",
"name": "[Author Name]"
},
"datePublished": "[YYYY-MM-DD]",
"dateModified": "[YYYY-MM-DD]",
"image": "[Image URL]",
"publisher": {
"@type": "Organization",
"name": "[Publisher]",
"logo": {
"@type": "ImageObject",
"url": "[Logo URL]"
}
}
}
SCHEMA-REPORT.md: detection and validation resultsgenerated-schema.json: ready-to-use JSON-LD snippets| Schema | Type | Status | Issues |
|---|---|---|---|
| ... | ... | ✅/⚠️/❌ | ... |
| Scenario | Action |
|---|---|
| URL unreachable | Report connection error with status code. Suggest verifying URL and checking if the page requires authentication. |
| No schema markup found | Report that no JSON-LD, Microdata, or RDFa was detected. Recommend appropriate schema types based on page content analysis. |
| Invalid JSON-LD syntax | Parse and report specific syntax errors (missing brackets, trailing commas, unquoted keys). Provide corrected JSON-LD output. |
| Deprecated schema type detected | Flag the deprecated type with its retirement date. Recommend the current replacement type or advise removal if no replacement exists. |
# Detect and validate every JSON-LD block on a page
seogeo schema-validate https://example.com --json
seogeo schema-validate --file page.html --json
# Generate JSON-LD for the high-leverage types
seogeo schema-generate organization --name "Example Corp" \
--url https://example.com --logo https://example.com/logo.png \
--same-as https://linkedin.com/company/example https://github.com/example
seogeo schema-generate local-business --name "Example Cafe" \
--url https://example.com --business-type CafeOrCoffeeShop \
--street "1 Main St" --city Austin --region TX --postal-code 78701 \
--country US --telephone "+1-512-555-0100" \
--hours "Mo-Fr 07:00-18:00" --hours "Sa-Su 08:00-16:00"
seogeo schema-generate profile --name "Jane Rivera" \
--url https://example.com/about --job-title "Head of Research" \
--same-as https://orcid.org/0000-0000-0000-0000 \
--knows-about "Core Web Vitals" "Structured data"
seogeo schema-generate discussion --headline "How do you score INP?" \
--author "Sara Park" --url https://forum.example.com/t/123 \
--date 2026-05-12T14:00:00Z --likes 42
seogeo schema-generate reservation --provider "Marea NYC" \
--start 2026-06-04T19:30:00-04:00 --party-size 4
seogeo schema-generate order --merchant "Acme Pizza" \
--order-url https://acme.example/order
# Paste-ready output
seogeo schema-generate organization --name X --url https://x.test --script-tag
schema-validate separates errors (the rich result will not show) from
warnings (it will show, but thinner). It also reports
retired_for_google_rich_results — FAQPage, HowTo, and Dataset no longer
produce Google Search rich results. Do not tell a user to remove them:
they still carry meaning for other consumers. Tell them not to expect a
rich result.
--same-as and --knows-about on profile and organization are the
cheapest entity-graph work available. Link to Wikipedia, Wikidata, ORCID,
GitHub, and LinkedIn so the entity resolves to one identity across
knowledge graphs.