Voice Search / GEO / AEO
Speakable Schema Validator
Paste speakable JSON-LD (or a full page) and get a real spec check: SpeakableSpecification structure, cssSelector syntax and matches, hidden or empty selections, over-broad selectors, and word-count sanity for a natural spoken summary — plus a suggested starter snippet if the page has none.
Runs entirely in your browser. Nothing you paste here is sent anywhere except an anonymized usage count.
Paste the contents of a <script type="application/ld+json"> block, or a full HTML page — every "speakable" property is found automatically. Paste the full page (not just the JSON-LD) to also check each selector against the real content: does it match anything, is it hidden, how many words would be read aloud.
What this checks, and how to fix common mistakes
A "speakable" SpeakableSpecification tells voice assistants and answer engines exactly which part of a page to read aloud — usually the headline plus one short lead paragraph, not the whole article. This tool walks the JSON-LD graph the same way a crawler would, finds every "speakable" property wherever it sits, and validates its structure: it must resolve to an object (or list of objects) that carries at least one non-empty "cssSelector" or "xpath" entry.
Google's current implementation reads "cssSelector" only — "xpath" is valid per the schema.org spec but is not supported there, so this tool flags xpath-only specifications as a compatibility warning, not a hard error. Keep at least one cssSelector alongside any xpath you already ship for other consumers.
When you paste the full page (not just the JSON-LD), every selector is run against the real DOM: a selector that matches nothing is an error (nothing will be spoken), a selector whose matched element is hidden via inline style, a stylesheet rule, "aria-hidden", or the "hidden" attribute is also an error, and an ID selector that matches more than one element usually means a duplicated id in the markup.
Word count matters for a natural-sounding result: very short selections (under 5 words) are flagged as thin, very long ones (over 70 words, or the large majority of the page's total text) are flagged because a "summary" that is really the whole article defeats the purpose and can sound unnatural read aloud — pick a genuinely short, self-contained summary instead.
If no speakable markup exists at all and you paste full page HTML, this tool suggests starting selectors from the page's own headline and shortest lead-style paragraph, with a ready-to-edit JSON-LD snippet. Selectors built from a stable "id" attribute are marked as the more reliable choice — add ids to your headline and summary elements rather than relying on the tool guessing tag position, which can break silently after a redesign.