Missing structured data (JSON-LD) in Vanilla JS
Answer engines and rich-result crawlers pull entities, facts, and answers out of schema.org JSON-LD — an author, a price, a rating, a FAQ. Without it they fall back to guessing from your prose, which is lossy and easy to get wrong. As AI assistants become how people find things, a page with no machine-readable summary is one they’re more likely to skip or misquote.
Symptoms
How VibeCheck catches it
In your widget · Problems
No structured data (JSON-LD)
To your coding agent · MCP
agent › get_detected_issues
→ { detector: "aeo", issue: "No structured data (JSON-LD)", threshold: "No <script type="application/ld+json"> present on the page" }
The same string in your widget and in your agent’s context — no screenshot, no copy-paste.
Root causes
The fix for Vanilla JS
Emit the script directly in server-rendered HTML (or static HTML). Keep it in the markup so non-JS crawlers read it.
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "Organization", "name": "Acme", "url": "https://acme.com" }
</script>Steps
- Pick the
schema.orgtype that matches the page (Article,Product,FAQPage, …) - Emit a
JSON-LDscript with@context"https://schema.org"and the key fields - Validate with Google’s Rich Results Test and
schema.orgvalidator
FAQ
- Which
schema.orgtype should I use? - Match the page:
Article/TechArticle/BlogPostingfor content,Productfor a product,FAQPagefor Q&A,Organization/WebSitefor the site itself. You can include several types on one page. - Does
JSON-LDhelp with AI answer engines specifically? - Yes. Assistants like ChatGPT, Perplexity, and Google’s AI Overviews extract structured facts far more reliably than prose. Clean
JSON-LDmakes your page easier to cite accurately. JSON-LD, Microdata, or RDFa?- Google recommends
JSON-LD— it’s a single script block separate from your markup, so it’s the easiest to add and maintain, and it’s what VibeCheck checks for.