SiteVerdict — Schema Markup Validator & JSON-LD Generator
Pricing
Pay per event
SiteVerdict — Schema Markup Validator & JSON-LD Generator
Extract and validate JSON-LD, Microdata and RDFa against schema.org and Google rich-result rules (Product, Article, FAQ, Recipe, Event, JobPosting, LocalBusiness...). Get exact errors, ready-to-paste JSON-LD for each page and optional AI generation with your own key.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Aman Thakran
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
SiteVerdict — Schema Markup Validator & JSON-LD Generator
Find the structured-data problems that can stop your pages getting rich results, and get corrected JSON-LD to paste. The tool extracts JSON-LD, Microdata and RDFa, checks them against schema.org and Google's rich-result requirements, and reports each problem with its exact path. Example: Product.offers[0].price: "£89.99" must be a plain number. Every page also gets recommended JSON-LD built from what is actually on the page. An optional AI step on your own Anthropic/OpenAI key writes complete markup, which we then re-validate.
Who it is for: SEO agencies, e-commerce and publisher teams, developers shipping templates, and AI agents (MCP-ready).
How to use it
- Add one or more page URLs under URLs (or paste HTML / JSON-LD instead).
- Set Max cost per run in the run options (each validated page costs $0.002).
- Click Start. Open the Output tab, or download
ISSUES-CSVfrom the key-value store.
The example input (the same input the console pre-fills) costs $0.002 and took about 2 seconds on 15 Oct 2026:
{ "urls": [{ "url": "https://www.bbcgoodfood.com/recipes/easy-pancakes" }] }
Three ways people use it
- Template QA. Validate one product, article and category URL after every release. Monitoring alerts you when a page loses markup or rich-result eligibility.
- Site-wide audit. Turn on
crawl, validate up to 2,000 pages, and downloadISSUES-CSVfor the dev team. - Generate markup. For pages with no or broken markup, copy the recommended JSON-LD snippet. Fill in the few
FILL_INvalues we could not read from the page, or let your own AI key complete them.
Example (sample mode, abridged)
{ "url": "https://demo-schema.siteverdict.test/products/trail-boot","invalidFeatures": ["Product snippet", "Merchant listing"],"items": [{ "type": "Product", "source": "json-ld", "errors": [{ "path": "Product.offers[0].price", "message": "Price \"£89.99\" must be a plain number (no currency symbol or thousands separator), e.g. 1299.99" },{ "path": "Product.offers[0].priceCurrency", "message": "Offer needs \"priceCurrency\"" },{ "path": "Product.offers[0].availability", "message": "\"In stock\" is not a valid value (use https://schema.org/InStock, ...)" },{ "path": "Product.aggregateRating.ratingValue", "message": "ratingValue 6 is outside 1-5 (set bestRating if your scale is not 1-5)" },{ "path": "Product.Description", "message": "Unknown property \"Description\" - did you mean \"description\"? (property names are case-sensitive)" } ] }],"recommendation": { "pageType": "product", "fillIn": ["sku", "brand.name"], "snippet": "<script type=\"application/ld+json\">..." } }
Rich-result rules encoded (Google Search Central, checked 11 Oct 2026)
Article / NewsArticle / BlogPosting · Breadcrumb · Product snippet · Merchant listing (offers, GTIN, shipping/returns) · Review snippet (with a note on self-serving reviews) · Recipe · Event (location, ISO dates with timezone, status/attendance enums) · Job posting (expired validThrough, employment type, remote jobs) · Local business (address, geo, opening hours hh:mm) · Organization (logo, sameAs) · FAQ (flagged: limited to authoritative gov/health sites since 2023) · Q&A · Video · Software app · Dataset · Discussion forum · Profile page · Image metadata (licence) · Carousel (ItemList) · How-to and Sitelinks search box (flagged as retired).
Generic checks on every item: JSON parse errors with line/column, missing @context/@type, unknown or wrongly-cased types and properties, empty values, relative URLs, non-ISO dates/durations, ISO 4217 currencies, rating ranges and <script> injected into values. Unknown types and properties are flagged only when a close match exists, so rare valid terms are not called errors.
Output
- Dataset Pages: score (0–100), rich-result eligibility per feature (
eligible/partial= recommended fields missing /invalid), errors, warnings, notes, formats found and the recommended JSON-LD. - AI-generated JSON-LD rows (if enabled), each with our validation result.
- Summary, plus key-value store
REPORT(HTML),ISSUES-CSVandSUMMARY.
Pricing (pay per event)
| Event | Price | When |
|---|---|---|
page-validated | $0.002 | Each page (or pasted HTML/JSON-LD) validated, including the recommended JSON-LD |
ai-schema | $0.01 | Each AI-generated JSON-LD block delivered (your AI key pays the provider) |
Examples: 100 pages ≈ $0.20. 1,000 pages ≈ $2.00. 10 AI generations add $0.10. Errors, robots-blocked pages, non-HTML URLs, failed AI calls and sample mode are free. You pay only these event prices; Apify platform usage for the run is included. The run stops cleanly at your Max cost per run.
FAQ
Is this the same as Google's Rich Results Test? No. It encodes Google's published required and recommended properties and value formats so you can check thousands of pages at once. Google alone decides whether to show a rich result, so confirm key templates with Google's test.
What about JSON-LD injected by JavaScript? Only markup present in the server HTML is read. If a tag manager adds yours, paste the rendered HTML into html.
Will the generator invent data? The built-in generator uses only facts found on the page and marks unknown required values FILL_IN: .... The optional AI step is told not to invent prices, ratings, reviews, addresses or dates, and its output is re-validated, but AI models can still make mistakes. AI rows are kept apart as type: "ai-schema": check every value against the page before you publish it.
Limits
- 2,000 URLs per run, 5 MB per page, 2 MB of pasted content, 50 AI generations per run.
- The vocabulary is a curated subset of schema.org, so very rare types are never flagged as unknown.
Sources & compliance
- Pages are fetched politely with the honest user agent
Mozilla/5.0 (compatible; SiteVerdictBot/1.0; SiteVerdict/schema-markup-tool; +https://apify.com/siteverdict/siteverdict-schema-markup-tool). robots.txt is obeyed for theSiteVerdictBottoken; blocked pages are reported and not charged. - Rules: Google Search Central structured-data docs (developers.google.com/search/docs/appearance/structured-data, read 11 Oct 2026). The schema.org type and property names were written by hand; no vocabulary files are bundled.
- Fetching is SSRF-safe. The tool never bypasses bot protection.
- The Actor does not look for personal data. Structured data can contain names the site publishes (for example authors or reviewers), and only that is repeated in the output. Under UK GDPR / EU GDPR you are the controller of your audit; check only pages you own or may audit. This is not legal advice.
- The AI key and webhook URL are secret inputs, redacted from logs and output. The AI step is off by default and uses only your key. When it is on, the facts extracted from the page, the recommended JSON-LD and the problems found are sent to the AI provider you chose, under your own account with that provider.
- Independent tool: not affiliated with or endorsed by Google or schema.org. Google alone decides whether a rich result is shown.
Your data, storage and retention
- Results go only to your own Apify account: the run's dataset and key-value store (
REPORT,ISSUES-CSV,SUMMARY). They are kept for your Apify plan's data-retention period, unless you delete them sooner. - With
monitoringon (the default), the Actor keeps one snapshot per project in the named key-value storesiteverdict-schema-historyin your account: for each URL, the schema types found, the rich-result features that were eligible and the error count. It stays until you delete it. Turnmonitoringoff to keep nothing between runs. - An alert to your webhook (only when monitoring finds a change) contains the affected URLs, the types or features lost, new errors and fixed items.
- The Actor contacts only the pages you submit, your AI provider if enabled, and your webhook if set. It sends nothing to the developer, and the developer receives no copy of your input or results.