squirrelscan
GitHub

Structured data audit rules: JSON-LD and schema.org

Audit rules for structured data: JSON-LD syntax, required schema.org properties for each type, and entity identity across the whole site.

Structured Data rules work at two scales. Per-page rules read the JSON-LD a page carries and name the exact property each schema.org type is missing; markup that will not parse is reported before anything else, since nothing downstream can read it.

The rest read the entity map, the whole site’s JSON-LD collapsed into one graph. That is where the expensive failures live: sixty valid Organization blocks with nothing to say they are one organization pass every per-page check and still leave a search engine with sixty companies. The schema/entity-* rules cover identity, agreement and reachability across the crawl, and fixing structured data identity has the change to make in each generator.

Run only these rules

squirrel audit https://example.com --rule-include schema

Where to start

These carry the highest severity and weight in the category.

Rules

RuleWhat it flagsSeverityScope
A bare #organization is one entity per page, not one entityA relative @id resolves against the page it sits on, so the same fragment on forty pages is forty identifiers. The markup validates and the entity still never accumulates.warningSite-wide
A business with nothing to attach its reputation toThis site has the pages a business has and no Organization entity for a search engine to hang any of it on.infoSite-wide
A publisher that points at nothingA reference to an @id that nothing in the crawl declares. squirrel checks against the whole site, so a publisher the homepage declares still resolves.errorSite-wide
AggregateRating on the wrong page: visible and on-topicA sitewide star rating stamped on privacy, terms and blog pages, or one no reader can see. squirrel flags both as policy risks.warningPer-page
AggregateRating: ratingValue, ratingCount and review checksRating markup missing ratingValue or a review count, and Review nodes with no author or reviewRating. squirrel checks both shapes.warningPer-page
An @id that nothing points atGiving an entity an identifier is the expensive part. One that nothing references and that appears on a single page is doing no more than an inline block.infoSite-wide
An author who is only a name string is not an entityArticles with a byline and no Person entity, or a Person with nothing to identify them by. Most of what E-E-A-T is built on needs an identifier.warningSite-wide
An Organization on one page, a LocalBusiness on anotherThe same @id declared with different @type sets on different pages. A search engine merges them and then has to decide which types are authoritative.warningSite-wide
Article schema: headline, author and datePublished checksArticle JSON-LD missing headline, author or datePublished, or carrying a date that is not ISO 8601. squirrel checks both on every page.warningPer-page
BreadcrumbList schema: positions, names and what breaksBreadcrumb markup with no itemListElement, items missing position or name, or positions out of order. squirrel checks every non-homepage URL.infoPer-page
FAQPage schema: mainEntity, Question and acceptedAnswerFAQ markup with no mainEntity, or Question entries missing name or acceptedAnswer. squirrel checks the structure on every page that carries it.warningPer-page
Invalid JSON-LD syntax: what breaks it and how to fixA structured data block that will not parse, or parses but omits properties schema.org requires. squirrel names the exact type and property.warningPer-page
LocalBusiness schema: required name, address or areaServedLocalBusiness markup with no name, an incomplete PostalAddress, or neither an address nor a service area. squirrel checks all three.warningPer-page
Nothing says these pages are one siteA WebSite entity is what carries your site name in search results and what every page should point back to with isPartOf.infoSite-wide
One organization, or sixty? Entities declared without an @idYour site declares the same organization on every page with nothing to say they are one thing. A search engine reading 60 pages sees 60 organizations.errorSite-wide
Organization schema: name, url, logo and sameAs checksOrganization JSON-LD missing name or url, with no logo, or a sameAs list that omits a social profile the site clearly runs. squirrel finds all three.infoPer-page
Product schema: name, image, offers and review checksProduct markup with no name or image, an Offer missing price or availability, and no rating data. squirrel checks each product page.warningPer-page
Structured data coverage: pages that break your own normForty of forty-five product pages carry Product markup and five do not. squirrel finds the gap against the site’s own pattern, not a generic rule.warningSite-wide
The same entity, two different logosOne organization declared on forty pages with two logos, two phone numbers or two names. A search engine picks one, and which one is not yours to choose.warningSite-wide
The whole LocalBusiness block, on every single pageDeclaring the business in full on every page is the default of most page builders, and it is why so many local sites disagree with themselves about their own phone number.warningSite-wide
Two plugins, two @ids, one organization split in halfYoast declares your organization under one @id and WordLift under another. A search engine reads two companies, and neither gets the full picture.errorSite-wide
VideoObject schema: required props and duration formatA page with an embedded video and no VideoObject markup, or markup missing thumbnailUrl, uploadDate or an ISO 8601 duration. squirrel checks both.warningPer-page
WebSite SearchAction and the retired sitelinks searchboxWebSite schema on a homepage with no SearchAction, or a SearchAction missing target or query-input. squirrel checks the homepage markup.infoPer-page
Your organization is not connected to anything that corroborates itsameAs is how a search engine learns the company on your site is the company on LinkedIn and Wikidata. Without it the entity stands alone.infoSite-wide
Your pages disagree about who publishes this siteTwo hundred articles name one publisher and three name another. The authority that should accumulate against one organization is divided.warningSite-wide

Key terms

  • Article schema: Article, NewsArticle or BlogPosting structured data with headline, dates, author and publisher.
  • Author byline: The visible author name on an article, ideally linked to an author page and matched by an author entity in structured data.
  • Entity: A thing a site describes in structured data, such as an organization, person or product, identified across pages so search engines and agents can tell it is one thing.
  • FAQ schema: FAQPage structured data marking up question-and-answer pairs; Google now shows FAQ rich results only for a narrow set of sites.
  • Generative engine optimization (GEO): Making content more likely to be retrieved, cited and quoted by AI answer engines; the term comes from a 2023 research paper.
  • @id (JSON-LD node identifier): The JSON-LD @id that gives a node a stable IRI, so other nodes and pages can reference the same entity instead of redeclaring it.
  • JSON-LD: JSON for Linking Data, the format Google recommends for structured data, embedded in a <script type="application/ld+json"> block.
  • LocalBusiness schema: LocalBusiness structured data with address, opening hours and geo coordinates for a physical business.
  • NAP consistency: Name, address and phone number stated the same way across a site’s pages, schema and listings.
  • Organization schema: Organization structured data naming the business behind a site, its logo, contact points and sameAs profiles.
  • Product schema: Product structured data with offers, price, availability and reviews, used for product rich results and merchant listings.
  • Rich results: Search result features (stars, breadcrumbs, product prices, video thumbnails) that Google can show when a page has eligible structured data.
  • Structured data: Machine-readable statements about a page’s content, usually schema.org vocabulary in JSON-LD, that search engines and agents can parse.
  • VideoObject schema: VideoObject structured data with name, thumbnail, upload date and duration so a video can appear in video results.
  • WebSite schema: WebSite structured data naming the site, which Google reads for the site name in results, and optionally describing its internal search with a SearchAction.

Crawlability flags rich result markup on a page that is noindexed. E-E-A-T looks for author and address markup among its trust signals, and Local SEO checks that the phone number and address agree across pages.

Learn more

Disable all Structured Data rules

[rules]
disable = ["schema/*"]

Type to search…

↑↓ navigate↵ openesc close