# IndieSchema

> Inspect a page's JSON-LD and check common Google search feature requirements.

See the JSON-LD in a page, the common Google features it targets, and the required fields that need work.

The canonical page is https://indieschema.com/.

## Use the tool

Open [IndieSchema](https://indieschema.com/) to complete the job. The questions below describe the supported input, result, and limits. Every answer names its source next to it.

Source: [Google structured data guidelines](https://developers.google.com/search/docs/appearance/structured-data/sd-policies).

## Questions and limits

### What is JSON-LD?

JSON-LD is structured data written as a JSON object inside a `<script type="application/ld+json">` tag, usually with the Schema.org vocabulary. It tells search engines what a page is about in fields a machine can read: a product and its price, an article and its author, a site and its name. Google recommends it over Microdata and RDFa because it sits in one block that does not touch the visible HTML.

### What does needs work mean in the result?

IndieSchema reads every JSON-LD block in the page, lists each entity and its types, and checks six Google feature families against their required fields: site name, software app, product snippet, breadcrumb, article, and organization. Ready means every required field this check can see is present. Needs work names the fields that are missing, with the Google rule linked beside them.

Article and Organization show as recognized rather than ready, because Google publishes recommended fields for them but no required ones, so there is nothing to fail. Any other type, such as `FAQPage` or `Event`, stays in the inventory with its fields listed and gets no Google verdict from this check.

### Does valid schema markup guarantee a rich result?

No. Google decides whether to show a search feature, and it says so in its own [structured data guidelines](https://developers.google.com/search/docs/appearance/structured-data/sd-policies). Valid markup with every required field makes a page eligible, nothing more. Google also checks that the markup matches the visible content and follows its content policies, which no code can verify.

A pass here is the required-field preflight, run on the HTML before you open Google's own tools. Google's Rich Results Test renders the page and shows what Google makes of it, and Search Console reports which enhancements it found on your live pages. Use this check first, and those two to confirm.

### How do I fix missing required fields in structured data?

The result names each missing field under the feature it belongs to. A product snippet needs `name` plus a complete `offers`, `aggregateRating`, or `review` branch. A software app needs `name`, `offers.price`, and a rating or review. A breadcrumb needs at least two `ListItem` entries with a `position` and a `name`. Site name needs a `WebSite` node with `name` and a root `url`, placed on the site root, not on an inner page.

Add the fields, deploy, and run the check again. Recommended fields, such as `image` and `description` on a product or `applicationCategory` on an app, are listed separately and do not block a pass. They are worth adding anyway, because Google uses them to fill out the result when it shows one.

### Why does the checker not see my JSON-LD?

IndieSchema reads the HTML the server sends and does not run JavaScript. A block that a framework, a tag manager, or a plugin injects after page load is invisible to it, and it can be invisible to crawlers that read the raw response too. Move the block into the server-rendered head. Microdata and RDFa are detected but not evaluated.

To test markup before it ships, paste the block or the whole script tag into the draft panel under the URL form. The same rules run in your browser, and the draft never leaves it. Without a page URL the draft cannot prove root placement for the site name, so that condition is reported as not checked, never as passed.

### What if my page has no structured data at all?

The result gives you a block to start from, drawn only from what the page already says: its title, meta description, canonical link, `og:image`, language, and publish date. The site root gets a `WebSite` node, an article gets `Article` with its date and author, and any other page gets `WebPage` with a breadcrumb trail built from the path. Values the page does not carry are marked for you to fill in. No rating, offer, or review is invented.

## Promises

- The core is free: no account, no card, no premium plan, no upgrade nag, no hidden paywall.
- Private lookup activity is never published.
- Analytics is currently off. Private lookup activity is never published or sent to a tracker. No lookup history becomes public inventory.

## More

- [Notes](https://indieschema.com/blog.md): posts by the maker, newest first
- [More tools](https://indieschema.com/tools.md): the other tools by turushan
- [security.txt](https://indieschema.com/.well-known/security.txt): how to report a vulnerability

Made by turushan, https://twitter.com/turushan.
