The fix, in one snippet
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Article",
"headline":"Running shoes for flat feet","datePublished":"2026-09-14"}
</script>
Illustrative values. Change the paths, hostnames and options to match your own site before using it.
The sections below explain what is tested, why it matters and the alternatives.
What we test
We look for JSON-LD blocks (<script type="application/ld+json">) and for microdata attributes on each page, record the @type values found, and verify that each JSON-LD block is syntactically valid JSON. A block that does not parse is reported as a failure, because search engines discard it silently.
We do not validate the schema itself against Google's eligibility rules; that requires the Rich Results Test, which is linked below.
Why it matters
Ordinary HTML says what a page looks like. Structured data says what it means: this string is a price, that one is an author, this is a recipe's cooking time. That distinction is what makes rich results possible, and rich results occupy far more of a search page than a plain listing.
Invalid JSON-LD is the common failure and the most frustrating, because the page looks instrumented. A trailing comma or an unescaped quote is enough for the whole block to be dropped, with no visible symptom anywhere except Search Console.
Marking up content that is not visible on the page, or that does not match what the page shows, is a spam policy violation rather than a shortcut.
How to fix it
Add JSON-LD in the head, generated from the same data the page renders:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Running shoes for flat feet",
"datePublished": "2026-09-14",
"author": { "@type": "Organization", "name": "Example" }
}
</script>
Start with the type that matches the page: Article, Product, FAQPage, HowTo, LocalBusiness, BreadcrumbList. Escape the values properly, and test the rendered page with the Rich Results Test rather than testing the template. Only mark up what a visitor can actually see.
Where this fits
Structured data (JSON-LD) missing or invalid is check 1 of 4 that the seo & site health audit runs under structured data and social, ordered the way they are worth fixing. That ordering is the point: Fixing this one while the check above it still fails buys less than it looks like.
What fixing this still leaves open
Structured data (JSON-LD) missing or invalid closes one route in. Immediately below it: Open Graph tags missing, where open Graph tags decide how a link looks when it is shared; Site icon missing, where the site icon appears in tabs, bookmarks, history and increasingly in search results themselves; Twitter card missing, where a twitter:card tag selects the card format on X.
Found in the same scan
The seo & site health audit reports this alongside checks from other categories that are at least as serious, including Broken internal links, where an internal link that returns an error is a dead end for the reader and a wasted request for the crawler, and Crawl errors (4xx / 5xx), where uRLs reached during the crawl that returned a client or server error. A single run of seo & site health audit answers all of them at once.
The first few lines
You are a senior web engineer. I ran a security and SEO scanner against my site and it reported the finding below. Fix it properly rather than suppressing the symptom.
Finding: Structured data (JSON-LD) missing or invalid (medium severity)
Scanner check id: seo-structured-data
The rest of this prompt names the pages and line numbers we found the problem on, the configuration to change, and the constraints a good answer has to respect. It is free, it just needs an account so the work is not scraped wholesale.
Sign in with GoogleSigning in is free and takes one click. We store your email address and nothing else.