How this check works
Scanaris looks in your page's HTML for every <script type="application/ld+json"> tag, tries to parse each one as JSON and checks that the result contains @context or @type, which is what distinguishes a schema.org block from any other JSON. One valid block is enough for there to be no finding. If there is none, or the ones present cannot be parsed (a stray comma, an unclosed quote), it opens a low-severity finding. It does not judge whether the chosen type is appropriate or whether properties are missing; only whether there is something Google and AI assistants can read.
Why it matters
Structured data is how you tell a machine, unambiguously, what your page is: this is an organisation with this name and this logo, this is an article written by this person on this date, this is a product at this price with these ratings. Google uses it for rich results (stars, prices, expandable questions, breadcrumbs) and to understand entities. AI assistants use it for the same thing but with more weight, because it saves them interpreting the HTML: a page with well-defined Article and Organization is more likely to be cited with correct attribution than one where the model has to guess who wrote it. It is low severity because lacking it does not remove you from any index; it only makes you harder to understand.
How to fix it
On the home page, at minimum Organization and WebSite:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://yourdomain.com/#org",
"name": "Your company",
"url": "https://yourdomain.com/",
"logo": "https://yourdomain.com/logo.png",
"sameAs": ["https://github.com/yourcompany", "https://www.linkedin.com/company/yourcompany"]
},
{
"@type": "WebSite",
"url": "https://yourdomain.com/",
"name": "Your company",
"publisher": { "@id": "https://yourdomain.com/#org" }
}
]
}
</script>
- By page type:
ArticleorBlogPostingon posts (withauthor,datePublished,dateModified);Productwithofferson product pages;SoftwareApplicationif you sell software;FAQPagewhere there are real questions and answers;BreadcrumbListfor breadcrumbs. - Nuxt:
useHead({ script: [{ type: 'application/ld+json', innerHTML: JSON.stringify(data) }] })on each page, or the schema.org module that generates it from components. - Next.js: a
<script type="application/ld+json">tag in the layout or page with the serialised JSON. - WordPress: Yoast and Rank Math generate
Organization,WebSite,Articleand breadcrumbs without touching code.
The data must match what is visible on the page: Google penalises marking up ratings or prices that do not exist. And the sameAs with your public profiles is what connects your entity to what the models already know about you from other sources.
Check it is fixed
curl -s https://yourdomain.com | grep -oE '<script type="application/ld\+json">[^<]*' | head -c 600
Your JSON should come out. Then paste it into Google's Rich Results Test or the schema.org validator: both tell you whether it is syntactically correct and which recommended properties are missing.
Frequently asked questions
JSON-LD or microdata in the HTML?
JSON-LD. It is the format Google recommends, it goes in a separate block without cluttering the template and it is the easiest to generate from any framework.
I added FAQPage and Google does not show the expandable questions.
Since 2023 Google only shows that rich result for government and health sites. The markup is still useful for AI assistants to extract your questions and answers, which is what this check measures it for. Why some sites get cited and others do not is covered in structured data and AI citations.
Does this replace the title and description?
No, it complements them. The title and meta description are still what Google displays; SEO metadata measures them. Structured data is what machines understand on top of that.