{"slug":"json-ld-schema","name":"JSON-LD Schema Writer","version":"1.0.0","updated_at":"2026-10-08T10:44:56.720Z","use_when":"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.","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.","languages":["any"],"tags":["json-ld","schema-org","structured-data","seo","rich-results","markup"],"category":"seo","category_url":"https://aiskills402.com/categories/seo","keywords":["structured data","schema markup","rich result"],"faq":[{"q":"What comes back when I give it the facts of a page?","a":"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."},{"q":"What does it do when a fact is missing?","a":"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."},{"q":"Does it fix prices, dates and links?","a":"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."},{"q":"Does it help Claude Sonnet?","a":"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."}],"examples":[{"lang":"en","model":"claude-sonnet-5-5","input_excerpt":"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.","output_excerpt":"{\"@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\"}}"},{"lang":"bg","model":"claude-sonnet-5-5","input_excerpt":"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.","output_excerpt":"{\"@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\":\"Мария Георгиева\"}}"}],"page_url":"https://aiskills402.com/skills/json-ld-schema","markdown_url":"https://aiskills402.com/skills/json-ld-schema.md","image_url":"https://cdn.aiskills402.com/og/skills/json-ld-schema/f5f8442b.png","related_url":"https://api.aiskills402.com/v1/skills/json-ld-schema/related","purchases_count":null,"tested":{"date":"2026-10-08","strong":{"model":"claude-sonnet-5-5 (Claude Code alias \"sonnet\")","verdict":"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."},"weak":{"model":"claude-haiku-5-5 (Claude Code alias \"haiku\")","verdict":"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."},"note":"Twenty-three pages written by us, one in Bulgarian: products, articles, breadcrumbs, an FAQ, events, a local business, a recipe, a job posting and an organisation. Each answer is scored by a JSON Schema (Ajv) plus exact values: required keys, absolute https addresses, prices, dates with the stated offset, breadcrumb positions, and a list of properties that must be absent (rating, review, offers, author, endDate, salary, nutrition). The checks were relaxed AFTER this run to accept every form that schema.org and Google accept: image as a string, an array or an ImageObject, any Event subtype, the main entity wrapped in an @graph, the same moment written in UTC, logo as an address or an ImageObject, sameAs in any order, a country as \"BG\" or \"Bulgaria\". The traps about invented facts stayed strict. One run per model and page; the numbers below are from rescoring the recorded answers with the relaxed checks.","baseline":{"date":"2026-10-08","rows":[{"label":"Markup with no invented or wrong facts (23 pages)","better":"higher","strong":{"with":{"n":23,"of":23},"without":{"n":21,"of":23}},"weak":{"with":{"n":23,"of":23},"without":{"n":20,"of":23}}}],"note":"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."},"report_url":null},"price_usd":"0.05","price_micro":50000,"size_bytes":8499,"sha256":"a119bd8c4f68d61831ea0ddd84882ec12fad836e572c93306efbb3a45c999dcc","outline":["The answer","A fact that is not given is left out","Formats","By type","Google and these types","Work in this order","Short examples"],"license":{"summary":"Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing","holder":"Georgi Kalchev, aiskills402.com","url":"https://aiskills402.com/docs#license"},"buy_url":"https://api.aiskills402.com/v1/skills/json-ld-schema/file","redownload_url_template":"https://api.aiskills402.com/v1/purchases/{token}","mcp_tool":null,"payment":{"protocol":"x402","scheme":"exact","asset":"USDC","selling":true,"network":"base","network_caip2":"eip155:8453","pay_to":"0x8e37022edcf0f21cf3c9f93fee9d4d32519f36f4","facilitator":"cdp"},"seo_title":"JSON-LD Schema Writer for AI Agents","seo_description":"Get schema.org markup for a page that never invents a rating, price or author, with correct prices, dates and URLs. Checked on two models. $0.05 once.","versions":[{"version":"1.0.0","date":"2026-10-08","changelog":"# Changelog\n\n## 1.0.0 — 2026-10-08\n\nFirst 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.\n"}]}