Blog

Blog · RSS

What does Schema.org validation on a paid audit check?

· WebVitalist

WebVitalist validates JSON-LD on a paid audit after the page is fetched. This note is dated October 27, 2026 and states that pass as the audit implements it. The free scan does not run it. The free scan’s Structured data check only asks whether any JSON-LD block has an @type.

What is read

The pass reads script elements whose type contains ld+json, compared without case, from the HTML of that fetch. It does not read the other crawled pages. Microdata and RDFa are not checked. A block may be wrapped in an HTML comment; the comment markers are removed before parsing. An empty block, or a block that is not valid JSON, is counted as invalid and is not walked. @id references are not followed.

Each @type becomes one entity, and several types on the same object share its properties. A type written as a URL or a prefixed name is reduced to the last segment, so https://schema.org/Product and schema:Product are both Product. Nested objects and @graph entries are walked. The walk stops at 40 entities. A property is present when it is a number, including 0, a string that is not blank, a non-empty array, or an object with at least one key. An object that only has @id counts as present. The target it points at is checked only when that target appears on its own.

The required-props table

Only types in the table are checked. Any other type is named and left unchecked. A checked entity with nothing missing is silent. A checked entity with something missing becomes one issue: the type, where it was found, and “Missing” plus the missing names separated by semicolons. The places are numbered from block 1. An @graph entry is marked under that block.

  • Article, NewsArticle, and BlogPosting require headline and image.
  • Product requires name, and one of offers, review, or aggregateRating.
  • Organization requires name and url.
  • LocalBusiness requires name and address.
  • WebSite requires name and url.
  • FAQPage requires mainEntity.
  • Question requires name and acceptedAnswer.
  • Answer requires text.
  • BreadcrumbList requires itemListElement.
  • ListItem requires position and name.
  • Event requires name, startDate, and location.
  • Person requires name.
  • Offer requires price and priceCurrency, on the offer itself or on a priceSpecification.

A Product named Tent with no offer, review, or aggregate rating produces “Missing one of offers, review, aggregateRating.” An offer of 329.00 USD does not. A BlogPosting with an image and no headline is missing headline. An Organization with name and url is not an issue. VideoObject is not in the table, so it is reported as unchecked and it does not add a missing-property issue.

What the report says

The report section is headed “Schema.org”. Its first line is: “JSON-LD only. Microdata and RDFa are not checked, and @id references are not resolved. This is not part of the overall score. The structured-data row only says whether any JSON-LD is present.” When the page has no JSON-LD, the next line is “No JSON-LD on the fetched page.” Invalid blocks are “1 JSON-LD block is not valid JSON.” or “N JSON-LD blocks are not valid JSON.” The count line is “Checked N entities across M types. K missing-property problems.”, with the singular used when the count is 1. At most 12 issues are printed. Further issues end with “…and N more.” Types that were seen and are not in the table are listed after “Not in the required-props table:”.

The technical Structured data check is separate and still scored. It passes, with weight 1, when the fetched page has at least one JSON-LD @type, and the detail is “JSON-LD:” plus those types. It warns, with the detail “No JSON-LD found.”, when there is none. A Product that is missing an offer still passes that check, because an @type is present. The missing offer is only in the Schema.org list. If the validation throws, the report omits the Schema.org section. The list does not change the technical score or the overall score, and it is not the AI visibility score.