Missing structured data (JSON-LD) in Vue
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 Vue
Inject the script with @unhead/vue’s useHead so it lands in <head> during SSR.
<script setup lang="ts">
import { useHead } from '@unhead/vue'
useHead({
script: [{ type: 'application/ld+json', innerHTML: JSON.stringify({
'@context': 'https://schema.org', '@type': 'Article', headline: 'How to fix CLS',
}) }],
})
</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.