Free tool
Schema markup validator
The schema markup validator fetches a page and checks every JSON-LD block on it against the required and recommended properties for its type, such as Organization, Product, Article or FAQPage. Each finding quotes the property and says whether it breaks the markup or only weakens it. Free, no sign-up, and nothing is stored.
Inputattensira.com/about
- JSON-LD blocks
- 5, all valid JSON
- ✓ Passes
- Errors
- 0
- ✓ Passes
- Warnings
- 11 missing recommended properties
- ◐ Weak
- Organization
- No sameAs or contactPoint in one block
- ◐ Weak
- Person
- No url or image
- ◐ Weak
- Not checked
- ContactPoint, ListItem, ProfilePage: syntax and @type only
7 days free · card required
Check a page
Seconds, on our server · Free, no sign-upFree, no sign-up, and the whole result is shown. Nothing is stored.
Or try one of ours:
Your result appears here
- JSON-LD blocks
- how many, each parsed
- Errors and warnings
- required, then recommended
- Each type found
- property by property
- Not checked
- types it has no rules for, named
Inputattensira.com/about
- JSON-LD blocks
- 5, all valid JSON
- ✓ Passes
- Errors
- 0
- ✓ Passes
- Warnings
- 11 missing recommended properties
- ◐ Weak
- Organization
- No sameAs or contactPoint in one block
- ◐ Weak
- Person
- No url or image
- ◐ Weak
- Not checked
- ContactPoint, ListItem, ProfilePage: syntax and @type only
What does it report?
Errors
A block that is not valid JSON, has no @context or @type, or lacks a property the table below requires for its type.
Warnings
A recommended property is missing. The markup works; it says less.
Passes
Every property in the table is present. Each finding names the type and property, with no score.
Does our own About page pass?
We ran the validator on attensira.com/about.
Nothing is broken, and eleven things are thinner than they could be. The interesting one: the homepage Organization lists three sameAs profiles, and the About page's Organization lists none. Two descriptions of the same company that disagree are worse than one.
The validator also says which types it does not know the rules for. A tool that checked ProfilePage against nothing and called it valid would be lying to you.
The run is the result panel at the top of this page. Read on 4 Oct 2026.
Which properties does it require for each type?
Each type links the documentation its row is based on: Google's structured data pages where Google documents the type, schema.org where it does not, all read on 4 October 2026. The split into required and recommended is our reading of those pages, not Google's own eligibility check. This is the whole rule set; nothing is applied that is not listed here.
| Type | Required | Recommended |
|---|---|---|
| ArticleArticle rich results in Google Search. | Requiredheadline | Recommendedauthor, datePublished, dateModified, image |
| BlogPostingArticle rich results for blog posts. | Requiredheadline | Recommendedauthor, datePublished, dateModified, image |
| NewsArticleArticle rich results for news. | Requiredheadline | Recommendedauthor, datePublished, dateModified, image |
| ProductProduct rich results, price and availability. | Requiredname | Recommendedimage, description, offers, brand, aggregateRating |
| OfferPrice and availability inside a Product. | Requiredprice, priceCurrency | Recommendedavailability, url, priceValidUntil |
| OrganizationWho publishes this site. | Requiredname | Recommendedurl, logo, sameAs, contactPoint |
| LocalBusinessLocal business rich results and map listings. | Requiredname, address | Recommendedtelephone, openingHoursSpecification, url, geo |
| WebSiteThe site name Google shows in results. | Requiredname, url | RecommendedpotentialAction, publisher |
| WebPagePage-level identity and freshness. | Requiredname | Recommendeddescription, url, dateModified, breadcrumb |
| BreadcrumbListBreadcrumb trail in the result snippet. | RequireditemListElement | Recommended— |
| FAQPageQuestion and answer pairs on the page. | RequiredmainEntity | Recommended— |
| HowToStep-by-step instructions. | Requiredname, step | RecommendedtotalTime, supply, tool, image |
| EventEvent rich results. | Requiredname, startDate, location | RecommendedendDate, description, offers, performer, image |
| RecipeRecipe rich results. | Requiredname, image, recipeIngredient, recipeInstructions | Recommendedauthor, cookTime, prepTime, nutrition, aggregateRating |
| VideoObjectVideo rich results and key moments. | Requiredname, thumbnailUrl, uploadDate | Recommendeddescription, duration, contentUrl, embedUrl |
| JobPostingJob listing rich results. | Requiredtitle, description, datePosted, hiringOrganization | RecommendedjobLocation, baseSalary, employmentType, validThrough |
| SoftwareApplicationSoftware listing, including free web tools. | Requiredname | RecommendedapplicationCategory, operatingSystem, offers, url |
| PersonWho wrote or runs something. | Requiredname | Recommendedurl, sameAs, jobTitle, image |
| ItemListOrdered or unordered list of entities. | RequireditemListElement | RecommendednumberOfItems, itemListOrder |
| QAPageA single user-submitted question with answers. | RequiredmainEntity | Recommended— |
What would the crew fix on our About page?
Inside Attensira, a JSON-LD-only fix counts as a safe change that can ship on its own in Act mode; in the default Draft mode it waits for you. What counts as a safe change.
JSON-LD only: one Organization on /about and the homepage
attensirawaits for your review
about page · JSON-LD
- unchanged: "@type": "Organization",
- added: "sameAs": [
- added: "https://x.com/attensira",
- added: "https://www.linkedin.com/company/attensira",
- added: "https://github.com/attensira",
- added: ],
- unchanged: "name": "Attensira",
Web engineer · would hand you a pull request like thisExample · the kind of change this finding calls for, not one that shippedDoes structured data matter for AI answers?
Less than most guides claim, and we say so about our own product: every structured-data change Attensira proposes carries the note "hygiene, not a lever: we do not expect this alone to move an answer." No engine publishes that it ranks or cites pages by their JSON-LD, and nobody outside the engines can measure it.
What markup does reliably is remove guesswork. It states, in a form a parser cannot misread, which string is the publisher, which is the author, which date is the last change and which text is an answer. Search engines use it for rich results, and any system that reads your page gets the facts without inferring them. The three that carry the most:
- Organization: who publishes the site, with
sameAslinks that tie the name to profiles an engine can check. - Article or BlogPosting with
authoranddateModified: who wrote it and when it last changed, stated rather than inferred. - FAQPage: question and answer pairs marked as such, which is the same shape as the passages assistants quote.
Markup does not make a weak page strong. It makes a strong page legible.
How do you fix the common failures?
| What it shows | Why | What to do |
|---|---|---|
| Block is not valid JSON | Why: A trailing comma, a smart quote pasted from a document, or an unescaped quotation mark inside a string. | What to do: Remove the stray character. Until then the whole block is discarded, with all the markup in it. |
No @context | Why: Without it the block is arbitrary JSON, not JSON-LD, and is ignored. | What to do: Add "@context": "https://schema.org" to every top-level node. |
An Article with no author | Why: Who wrote it is inferred, not stated. | What to do: Nest a Person or Organization with a name and, ideally, a url to a real bio page. A bare string works but carries less. |
No dateModified | Why: When the page last changed is inferred, not stated. | What to do: Emit it from your CMS in ISO 8601. Do not hardcode it or bump it on every deploy: a date that always says today tells a crawler nothing. |
A Product with no offers | Why: A price without a currency is not usable. | What to do: Nest an Offer with price, priceCurrency and availability. |
| Markup that contradicts the page | Why: This tool cannot detect it. | What to do: Make the JSON-LD match what a reader sees. Marking up a rating you do not display is a policy violation, not a shortcut. |
Questions people ask about this check
My page passes here but Google's Rich Results Test flags it. Why?
Different scope. This tool checks property presence against the documented required and recommended sets. Google additionally checks value formats, image dimensions, and eligibility rules that change per feature and per country. Use this to catch structural problems quickly, then confirm eligibility in Google's own tester.
Should I use JSON-LD, microdata or RDFa?
JSON-LD, in nearly every case. It lives in one block in the head or body rather than being interleaved with your markup, which means it survives template changes and is far easier to generate correctly from a CMS. This tool counts microdata and RDFa items so you know they are there, but validates JSON-LD only.
Does structured data get me cited by ChatGPT or Claude?
Not on its own. No engine documents a direct causal link between structured data and being cited. What it does is make the facts on your page unambiguous: who wrote it, when it was updated, what entity it is about. That is hygiene, not a lever. The page still has to be worth citing, and the crawler still has to be allowed in, which is a robots.txt question.
How many JSON-LD blocks should a page have?
As many as it has distinct things to describe. One block per entity is fine, and so is a single block with an @graph array. What matters is that each node is complete and that you are not describing the same entity twice with conflicting values.
Do you store the pages I check?
No. The page is fetched, parsed in the request, and the result is returned to your browser. There is no account, no email field and no saved history. The shareable link simply re-runs the check against the same URL.
This checks the markup. Attensira's crew keeps it consistent.
7 days free · card required