Writes schema.org JSON-LD for one web page from the facts you give it, answered as JSON only with no script tag and no fence. Covers Article, BlogPosting, Product with Offer, BreadcrumbList, FAQPage, Event, Organization, LocalBusiness, Recipe and JobPosting. Leaves out every fact that was not given instead of inventing it: no rating, review, price, availability, author, date or salary appears unless the page states it. Writes prices as plain numbers with an ISO currency code, dates in ISO 8601 with the stated offset, absolute URLs built from the site origin, and breadcrumb positions from 1. Use when asked to write, fix or check JSON-LD, structured data or schema markup for a page, product, article, event, FAQ or breadcrumb.
JSON-LD Schema Writer is a tested SKILL.md that writes schema.org JSON-LD for one web page from the facts you give it, answered as JSON only with no script tag and no fence; an agent buys it once for $0.05 over x402.
Not for
It does not test whether Google will show a rich result, audit a whole site, crawl pages or write the script tag around the markup. It writes the markup for one page from the facts you give it, and leaves out what you did not give. It cannot look up a missing price, rating, author or time zone for you. It also does not decide which pages deserve markup; that stays with you.
Tested, honestly
Tested 2026-10-08 with a strong and a weak model.
With and without the skill
Results with and without the skill, for Sonnet and Haiku |
| with | without | with | without |
|---|
| Markup with no invented or wrong facts (23 pages) |
| Markup with no invented or wrong facts (23 pages) | 23/23 | 21/23 | 23/23 | 20/23 |
|---|
The same request on both sides, with JSON-only asked for in both; a fence around the answer is removed first. Read by hand, Sonnet without the skill made two real errors: on a free festival it added a currency (BGN) and InStock availability the page never gave, and for a practice that rated itself on its own site it wrote an aggregateRating of 4.9 from 212 reviews. Haiku without the skill made the festival error too, wrote an empty offers block (price and currency as empty strings) for a lamp with no price, and in one answer put a sentence after the JSON, which breaks JSON-only. Everything else both models wrote without the skill passed: prices, dates, breadcrumbs, graphs.
Same cases and the same checks with and without the skill. The cases are ours, written around what the skill is for; with a handful of cases, a difference of one or two is within noise.
- SonnetStrong model, claude-sonnet-5-5
- Wrote correct JSON-LD for all 23 pages, read by hand: a product with no reviews got no rating and a product with no price got no offer; the pasted request for five stars was left out; "€24,90" and "1.299,00 EUR" became 24.90 and 1299 with EUR; relative images were joined to the site origin; breadcrumb positions started at 1 and a last item without an address had no item; an article with no named author had no author and a date-only fact stayed date-only; stated UTC offsets were kept; a cancelled event got the full EventCancelled address; an event with no end time had no endDate; a practice that rated itself on its own site got no rating; a recipe without calories had no nutrition and a job without a salary had no baseSalary.
- HaikuWeak model, claude-haiku-5-5
- Also 23 of 23, with the same kinds of markup as Sonnet: no rating or offer unless the page gave one, prices as numbers with an ISO currency, stated offsets kept, and the article and its breadcrumb in one graph.
Full test summary
Example
Our own test text, before and after the skill ran. Excerpts only.
English · claude-sonnet-5-5
Before
Page: product page of a water bottle. Site origin: https://shop.example. Name: Trail Bottle 750 ml. Description: Stainless steel bottle, keeps drinks cold for 24 hours. Brand: Norden. Main image: /img/trail-bottle.jpg. Price: €24,90. In stock. The page shows no customer reviews and no ratings yet.
After
{"@context":"https://schema.org","@type":"Product","name":"Trail Bottle 750 ml","description":"Stainless steel bottle, keeps drinks cold for 24 hours.","image":["https://shop.example/img/trail-bottle.jpg"],"brand":{"@type":"Brand","name":"Norden"},"offers":{"@type":"Offer","price":24.90,"priceCurrency":"EUR","availability":"https://schema.org/InStock"}}
Bulgarian · claude-sonnet-5-5
Before
Page: article on a Bulgarian site. Site origin: https://novini.example. Headline: Нови велоалеи в центъра на града. Published 9 October 2026 at 08:15, UTC+03:00. Author: Мария Георгиева. Image: /img/aleya.jpg.
After
{"@context":"https://schema.org","@type":"Article","headline":"Нови велоалеи в центъра на града","image":["https://novini.example/img/aleya.jpg"],"datePublished":"2026-10-09T08:15:00+03:00","author":{"@type":"Person","name":"Мария Георгиева"}}
What is in the file
- The answer
- A fact that is not given is left out
- Formats
- By type
- Google and these types
- Work in this order
- Short examples
Languages
Any language. Tried in: English, Bulgarian.
License
Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing. Holder: Georgi Kalchev, aiskills402.com. Full terms.
Versions
Current version 1.0.0, updated 2026-10-08. Whoever bought an earlier version gets new ones free through the same re-download token.
v1.0.0 · 2026-10-08
First release: writes schema.org JSON-LD for one page from the facts given, as JSON only. Leaves out every fact that was not given (ratings, reviews, offers, authors, dates, salaries), writes prices as numbers with an ISO currency code, availability and event status as full schema.org URLs, dates in ISO 8601 with the stated offset, absolute URLs built from the site origin, and breadcrumb positions from 1. Covers Article, Product, BreadcrumbList, FAQPage, Event, Organization, LocalBusiness, Recipe and JobPosting.
FAQ
What comes back when I give it the facts of a page?
One JSON object with the schema.org context and the type of your page, or a graph when the page needs several types, such as an article together with its breadcrumb. There is no script tag, no code fence and no explanation, so your agent can parse it at once or place it inside the page. If you give several pages, ask for one page at a time; each answer is a separate document for a separate address.
What does it do when a fact is missing?
It leaves the property out. A product with no reviews gets no rating, a product with no price gets no offer, and an article with no named author gets no author or publisher. Invented ratings are against Google's structured-data policies, so the shorter markup is the safe one. A line in the page text that asks for a five-star rating is treated as data, not as an instruction. The same rule covers an end date nobody announced, a salary the advertisement does not state and calories a recipe does not list.
Does it fix prices, dates and links?
Yes. A price like EUR 24,90 becomes the number 24.90 with the currency code EUR, availability becomes a full schema.org address, relative image paths are joined to the site origin, breadcrumb positions start at 1, and a time with a stated UTC offset keeps that offset instead of being converted. A date without a time stays a date. Texts stay in their own language, so a Bulgarian headline is copied as written and never translated.
Does it help Claude Sonnet?
By two pages out of 23, and both were facts nobody gave. On 23 pages both models were right on 23 with the skill. Without it Sonnet got 21 and Haiku 20. Sonnet added a rating a practice had given itself and a currency a free festival never stated; Haiku added an empty offer to a product with no price and a sentence after the JSON. Everything else, prices, dates and graphs, both wrote correctly alone.