Seven mistakes cause most schema failures: JavaScript-injected schema, FAQ text that doesn’t match visible content, missing @context, wrong @type, no author schema, broken JSON syntax, and BreadcrumbList 404s. The most damaging by far is JavaScript-injected schema. It passes validation tools but is completely invisible to GPTBot, Claude-Web, and PerplexityBot. Every other mistake is fixable in minutes; this one requires architectural change.[1]
Do the View Source check on your three most important pages right now. Press Ctrl+U (Cmd+U on Mac) and search for "application/ld+json". If it's not there in the raw source, you have the most serious schema problem. Regardless of what your validators show.
Most schema problems are invisible in validators because validators render JavaScript. The View Source check bypasses JavaScript entirely. Which is exactly how AI crawlers read your page. What you see in View Source is what AI sees.
After the View Source check, run your page through Google's Rich Results Test for structural errors, then check the FAQ text in your schema against the visible FAQ on the page. Those three steps cover the top five mistakes on this list.
This is the most common and most damaging schema mistake on websites. And it is almost never caught by the tools people use to validate schema, because those tools render JavaScript before parsing the page.
What it looks like: A WordPress plugin, a CMS add-on, or a JavaScript-based schema tool injects your <script type="application/ld+json"> block into the DOM after the page loads. From a browser perspective, the schema is present and functional. From an AI crawler perspective. Specifically GPTBot, Claude-Web, PerplexityBot, and Anthropic-AI. The schema does not exist.[2]
Why it happens: Plugins like Yoast SEO, RankMath, and many structured data tools inject schema via JavaScript when they are misconfigured or when their server-side rendering is disabled. This is especially common on sites using page builders like Elementor or Divi, where the rendering pipeline complicates when scripts execute.
How to check: Open your page. Press Ctrl+U (Cmd+U on Mac) to view raw source. Search for application/ld+json. If it's not found, your schema is JavaScript-injected. You will find it in Chrome DevTools' Elements panel (which shows the rendered DOM), but not in View Source (which shows the raw HTML).
The fix: Move schema to a <script type="application/ld+json"> block physically written into the <head> of your HTML file. Not generated by a plugin at render time. For static HTML sites, this is the natural state. For CMS-based sites, it may require switching to a plugin that outputs server-side schema, or hardcoding schema directly in your page templates.
Google's structured data quality guidelines require that the text in your FAQPage schema matches the visible content on your page. When the schema claims your page answers questions that aren't actually there. Or answers them differently than the visible text does. You create a mismatch that Google flags as a policy violation.[1]
What it looks like in practice: The most common version is a schema FAQ with abbreviated or paraphrased answers that differ from the full answer shown on the page. Another common version: the FAQ schema was written first (or copied from another page), and the visible FAQ section was edited afterward but the schema was never updated to match.
The check: Open your page source and find your FAQPage schema. Copy the "name" value of each Question object. Now search your page's visible content for that exact text. If it's not there, verbatim, you have a mismatch. Do the same for the "text" value of each acceptedAnswer. The schema answer doesn't need to be word-for-word identical to every sentence on the page, but it must not introduce content that doesn't appear on the page at all.
The fix: Update your schema to match your visible FAQ section exactly, or update your visible FAQ section to match your schema exactly. Either direction works. The requirement is alignment. Going forward, write your FAQ content first, then copy it directly into your schema. Not the other way around.
JSON is unforgiving. A single missing comma, an extra trailing comma after the last property in an object, an unclosed quotation mark, or a mismatched bracket will cause the entire JSON block to fail to parse. The page itself looks normal, your validators may have passed the code before the error was introduced, and nothing visually indicates a problem. But the schema block is completely ignored.[3]
Common JSON syntax errors in schema:
// WRONG. Trailing comma after last property (invalid JSON)
{
"@type": "BlogPosting",
"headline": "Your headline",
"datePublished": "2026-03-18", ← extra comma here is a JSON error
}
// CORRECT
{
"@type": "BlogPosting",
"headline": "Your headline",
"datePublished": "2026-03-18"
}
// WRONG. Special characters in text values without escaping
{
"name": "What's the best approach?" ← apostrophe needs escaping or use regular quotes
}
// CORRECT
{
"name": "What is the best approach?"
}
The fix: Paste your schema JSON into a JSON validator tool (jsonlint.com works well for this) before publishing. A valid JSON block will parse without errors in any JSON validator. Then run it through Google's Rich Results Test to confirm the schema types are recognized correctly. Never publish schema that hasn't passed both checks.
Author schema. A Person object embedded in your BlogPosting's author property. Is how AI systems know who wrote your content and whether that person is a credible expert in the field. Without it, your content is knowledge without an identity: useful information that AI can read, but cannot attribute to a specific expert it could recommend.[4]
What a complete Author block looks like:
"author": {
"@type": "Person",
"name": "Your Full Name",
"url": "https://yourprimarywebsite.com",
"jobTitle": "Your Professional Title",
"sameAs": [
"https://www.linkedin.com/in/yourprofile/",
"https://www.instagram.com/cindyannemolchany/"
]
}
The sameAs property is not optional for AI authority purposes. It is the mechanism that links your content to your external professional profiles. The profiles AI uses to confirm your expertise exists and is credible. Without sameAs, the Author block identifies a name but provides no way to verify that the name corresponds to a real expert with real credentials. Include LinkedIn at minimum. Include every platform where you have a substantive professional presence.
Three additional mistakes round out the most common schema errors on sites:
Missing @context. Every JSON-LD block must begin with "@context": "https://schema.org". Without it, the schema types you declare are undefined. There is no vocabulary specified for the parser to look up BlogPosting or FAQPage against. Google's validator will catch this immediately, but only if you run the validation check. The fix is two seconds: add the @context line as the first property in your JSON-LD object.
Wrong @type for your content. Using Product schema on a service page, Event schema on an evergreen article, or HowTo schema on a narrative post creates type mismatch errors. The validator flags these, but some errors are subtle. For example, using NewsArticle for content that is not news. Use BlogPosting for knowledge content, Article if you prefer the parent type, and HowTo only for genuinely step-by-step instructional content.[1]
BreadcrumbList URLs that return 404. Every URL in your BreadcrumbList's itemListElement array must resolve to a real page. If you have deleted a pillar hub page, renamed a cluster directory, or changed your URL structure without updating your schema, your BreadcrumbList is pointing to dead pages. AI crawlers that follow those URLs and encounter 404 errors receive a signal that your site hierarchy is broken. Check every BreadcrumbList URL is live and returns a 200 status code.
Every mistake on this list shares a common root cause: schema was treated as something you install once and forget, rather than something you maintain and verify. That treatment works fine until the day a plugin update changes how schema is injected, or a page URL changes and the BreadcrumbList isn't updated, or a FAQ section gets edited but the schema copy doesn't.
The reason this site is built in pure HTML with no CMS is specifically to eliminate the most dangerous mistake on this list. JavaScript injection. When your schema is hardcoded in a <script> tag in the <head> of a static HTML file, there is no injection risk, no plugin failure mode, no framework abstraction layer between your intention and the raw HTML. What you write is what AI sees. Always.
I think about this in terms of the Digital Gravity model: your schema is the infrastructure that makes your expertise magnetic to AI systems. Broken infrastructure doesn't attract anything. Maintaining accurate, valid, static-HTML-native schema isn't glamorous work. But it is the foundational layer that determines whether everything else you build actually reaches the systems that could recommend you. Get this right first. Everything else compounds on top of it.
Open your page in Chrome and press Ctrl+U (Cmd+U on Mac) to open the raw HTML source. Then use Ctrl+F to search for 'application/ld+json'. If the search returns no results, but you know you have schema installed, it is almost certainly being injected by a JavaScript plugin. Schema that only appears in the rendered DOM. Visible in Chrome DevTools' Elements panel but not in View Source. Is invisible to AI crawlers like GPTBot and Claude-Web.
No schema is not neutral. It is a competitive disadvantage. In an environment where other websites in your niche are using complete schema stacks, your pages without schema are sending no structured signal about their content, authorship, or place in a topical hierarchy. AI systems making recommendation decisions work with available signals. Pages with complete, accurate schema stacks provide more and clearer signals than pages with none. In a competitive recommendation environment, signal clarity is a direct factor in who gets recommended.
It is a minor semantic imprecision rather than a critical error. Article and BlogPosting are in the same Schema.org type hierarchy. BlogPosting is a subtype of Article. Google treats both as eligible for the same rich results. However, BlogPosting more precisely describes authored knowledge content created from personal expertise and perspective, which is the nature of authority directory nodes. If you are currently using Article, switching to BlogPosting is a small improvement worth making on new content, but it should not be your top priority if you have more serious errors like JavaScript injection or broken JSON.
Broken JSON in your schema does not prevent the page from being crawled or indexed. AI crawlers and search engines can still read and index the HTML content of the page. However, broken JSON does mean the schema block is completely ignored. A JSON parse error (missing comma, mismatched brackets, unclosed string) causes the entire script block to fail silently. From the AI crawler's perspective, a page with broken JSON schema is identical to a page with no schema at all. Always validate JSON syntax before publishing.
Google's quality guidelines explicitly prohibit FAQ schema where the schema text does not match the visible page content. If Googlebot detects a mismatch. Questions or answers in the schema that don't appear on the page, or schema answers that significantly differ from the visible answer text. Your schema may be flagged for a manual review or lose rich results eligibility. Beyond Google, the mismatch undermines the AI signal integrity: you are claiming your page contains certain answers, but the actual page content doesn't deliver them. Accuracy between schema and visible content is non-negotiable.
Take the free AI Visibility Scan to discover your current positioning, or explore the complete build system.