SEO Auditor — checks that the audited page describes itself with Schema.org structured data in at least one of the three formats search engines read: JSON-LD, Microdata or RDFa.
Rich results
Structured data is what turns a plain search listing into a rich result: ratings, prices, FAQs, breadcrumbs, event dates.
Machine readable
Search engines and AI answer engines use the same entities to understand what the page is, who published it and how it relates to other pages.
<script type="application/ld+json">, the format Google recommends), as Microdata (itemscope / itemtype attributes on HTML elements) or as RDFa (vocab / typeof attributes). This auditor fetches the page once and counts the entities it finds in each format.
How it works
- Fetch — sends a
GETrequest to the audited URL as 37AuditsBot with anAcceptheader that prefers HTML. A blocked request ends the audit with590; any other failure (timeout, DNS, TLS, non-2xx answer) ends it with500. - JSON-LD — parses every
<script type="application/ld+json">block. Each object with a@typecounts as one entity when its@contextnames schema.org, its type uses theschema:prefix or is a bare type name; objects nested under@graphare counted too. A block that does not parse as JSON is skipped when counting and recorded for the300rule. - Microdata — every element with
itemscopeand anitemtypeunderschema.orgcounts once per type IRI. - RDFa — every element with
typeofcounts once per type when it or an ancestor declaresvocabunderschema.org, or when the type uses theschema:prefix. - Rules — no entity in any format fails (
400); each malformed JSON-LD block warns (300). - Aggregate — FAIL wins over WARNING; when every rule passes the audit is
SUCCESS(200) and the message lists the counts per format and per type.
What it audits
Every row maps to onecheckRule* method and one CheckCode, in the order the auditor runs them. CheckCode suffixes use status ranges: 200 success, 300–399 warning, 400–499 fail, 500–599 error.
Output documentation
Every check carries the same
data map: totalEntities, byFormat (jsonLd, microdata, rdfa counts), types (count per type name), examples (up to five snippets of the entities found, omitted when there are none) and malformedJsonLdBlocks (block ordinal and parser error for each JSON-LD block that failed to parse).
Risks and considerations
Why structured data matters
- Rich results (star ratings, prices, FAQ drop-downs, breadcrumbs, event dates) only appear for pages that describe themselves with Schema.org entities; they take more space on the results page and earn more clicks than a plain listing.
- AI answer engines and search assistants rely on the same entities to tell an article from a product page, to name the publisher and to cite the page with confidence.
JSON-LD first
- Google recommends JSON-LD: it lives in one
<script>block, does not depend on the HTML layout and survives redesigns. Microdata and RDFa still count, but they break more easily when templates change. - A single typo (a trailing comma, an unescaped quote, a truncated block) makes the whole block unreadable. Validate it after every template change with the Schema.org validator or Google’s Rich Results Test.
What this auditor does not check
- Only the audited URL is fetched; other pages of the site may carry different or no structured data.
- The auditor counts entities and parse failures. It does not validate that the properties of an entity are the ones its type requires, nor that the values are correct, so a page can pass here and still not qualify for rich results.
- Structured data injected by JavaScript after the page loads is not seen: the auditor reads the HTML as served.
- Types from vocabularies other than Schema.org are ignored.