# Markup Mirror > Check and fix a web page's JSON-LD structured data, held to the page it describes. Paste the page's HTML (or its > text with the JSON-LD beside it, or the JSON-LD alone). The page parses every block, checks every typed node for > the properties the source skill lists and for values search engines accept, and checks names, headlines, prices, > ratings, counts, phone numbers and addresses against the page's visible text. A metered run keeps, fixes or adds > one JSON-LD object whose every value is on the page, and the page checks it again before offering it as a script > tag. Nothing is sent to the site. Not affiliated with any search engine. Built on the SkillSafe skill > @coreyhaines31/schema-markup. https://markup-mirror.skillsafe.ai/ ## What is free - Reading: script tags of type application/ld+json (and JSON-LD pasted separately), title, meta description, H1, images and visible text; microdata is noticed but not checked. - Parsing: each block as JSON, with the line and column of a syntax error and a hint for trailing commas, single quotes and comments. - Nodes: every object with a @type, nested ones and @graph members, with a readable path. - Required (fix) and recommended (check) properties per the source skill: Organization name, url; WebSite name, url; Article/BlogPosting/NewsArticle headline, image, datePublished, author; Product name, image, offers (Offer price, availability); SoftwareApplication name, offers; FAQPage mainEntity; HowTo name, step; BreadcrumbList itemListElement (ListItem position, name); LocalBusiness (and Restaurant, CafeOrCoffeeShop and other subtypes) name, address; Event name, startDate, location. A wrongly-cased type is flagged and still checked. - Values: ISO 8601 dates, absolute URLs, plain-number prices, three-letter upper-case currency codes, schema.org enumerations (availability, eventStatus, eventAttendanceMode, itemCondition), ratings within best and worst, whole-number counts, breadcrumb positions 1, 2, 3, and a raw and the old JSON-LD blocks removed, and the run's tree marking each value that is new or changed. ## The metered task One task, `markup`, on gpt-terra, metered per run. Input string fields: `task`, `want` (a type or auto), `page` (URL, title, H1, meta description, images, visible text), `existing` (every block as found, or none) and `facts` (every finding, tagged [fix], [check] or [info]). The reply is one JSON object: `verdict` (`keep`, `fix` or `add`), `jsonld` (one object with @context https://schema.org), `changes` (each `node`, `change`, `why`), `not_on_page` and `note`. The page holds the verdict to its own rule (add when there is no markup, fix when anything is at fix level, keep otherwise), runs the reply's JSON-LD through the same checks, and refuses any value that is not on the page, any image the page does not have and any URL on another host. ## Links - API tutorial: https://markup-mirror.skillsafe.ai/api.html - Source skill: https://skillsafe.ai/skill/@coreyhaines31/schema-markup