Voice search schema markup in JSON-LD: FAQPage, HowTo, Speakable, LocalBusiness templates. WordPress implementation via Rank Math, honest notes on what Google limited or removed.
This guide gives you ready JSON-LD templates for voice search schema markup: FAQPage, Speakable, HowTo, LocalBusiness, and Product. Every example is validated in Rich Results Test and comes from markup I have shipped on real client sites. Honest notes on what Google limited or deprecated in 2023โ2025 are included where relevant.
If you already read my previous article on Google Search Live, this is the technical companion โ what the strategic overview looked like, applied in code. If you landed here cold from search, start reading at the priority section below.
Not the person who will touch the code? This guide still tells you exactly what to ask your developer for. Or email me or message me on Telegram and I’ll implement the markup on your site.
JSON-LD over Microdata: why it matters for voice
Schema.org supports three formats: JSON-LD, Microdata, and RDFa. Google officially recommends JSON-LD โ a separate script block in the head or body, independent of your HTML.
For voice AI search this matters for two reasons:
- Parsing speed. AI bots don’t walk the DOM and pull data from HTML attributes โ they parse a clean JSON object.
- Stability. Microdata breaks easily on redesigns. Any template refactor can silently strip out
itempropattributes. JSON-LD lives in its own block, unaffected by CSS classes or DOM structure.
If your site runs on Microdata today, migrating to JSON-LD won’t hurt rankings. Every example below uses JSON-LD only.
Where to start: priority of schema types for voice
Not all schema types matter equally for voice search. Here’s the order I use across client projects โ from fastest win to “nice to have”:
- FAQPage โ the fastest win. Works on any site. AI assistants cite FAQ answers most often in voice responses.
- LocalBusiness โ critical for businesses with a physical location (stores, clinics, restaurants, salons). Voice search is often local.
- Product โ for e-commerce and priced services. Voice queries like “how much does it cost” trigger Product schema.
- HowTo โ for step-by-step instructions. Google removed HowTo rich results in 2023, but the markup still works for AI assistants (details below).
- Speakable โ experimental. Google supports it only for news publishers in English via Assistant. Worth adding, don’t plan a strategy around it.
Does schema work for Bing and Microsoft Copilot?
Yes โ and it’s worth calling out, since Bing holds meaningful share in the US and drives Copilot. Bingbot parses the same schema.org JSON-LD Google does, with one practical difference: Bing tends to weight Organization and LocalBusiness more heavily in its Knowledge Panel, which then feeds Copilot answers. Register your site in Bing Webmaster Tools and use its URL Inspection to confirm Bing sees your markup โ otherwise you lose a share of US voice traffic silently.
If you have one day to improve voice visibility, add FAQPage to your key pages. That’s the fastest path to visible results.
FAQPage: the #1 source of voice answers
FAQPage is the format AI assistants pull from most often for voice queries. It already contains a question-answer pair in a machine-readable shape, so the parser doesn’t need to extract an answer from prose โ it reads a ready Q&A. Google’s official FAQPage documentation covers the basics.
FAQPage JSON-LD example
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does Google Ads setup cost in 2026?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Google Ads setup costs from $X for a simple account to $Y for a full funnel with Performance Max, Shopping, and remarketing. Pricing depends on campaign count, GA4 integration, and conversion tracking setup."
}
},
{
"@type": "Question",
"name": "What is the minimum realistic Google Ads budget for a small business?",
"acceptedAnswer": {
"@type": "Answer",
"text": "For US and UK local businesses, a realistic minimum is $1,000 to $1,500 per month. Below that threshold Google's algorithm can't gather enough conversion data to optimize, so spend gets absorbed into the learning phase without returns."
}
},
{
"@type": "Question",
"name": "How long does Google Ads take to generate leads?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Most local businesses see first conversions within two weeks of launch. Stable, optimized performance typically lands around week six to eight, once Google has enough data to refine bidding and audience signals."
}
}
]
}
</script>
Dollar values ($X, $Y) are placeholders โ use your actual pricing. The three-question example shows minimum viable density for rich results.
Rules for the “text” field โ working observations, not official Google rules
The AI reads exactly this text. Here’s what I apply across client projects โ these are field-tested rules, not published Google standards:
- 50โ150 words. Shorter answers rarely reach featured snippets; longer ones get cut off when voiced. Google publishes no hard limit โ this is a practical benchmark.
- First sentence is the direct answer. No warm-ups like “this is a common question.” Straight to the point.
- Plain text only, no HTML tags. The
textfield doesn’t render HTML. Tags get spoken literally. No bold, italic, or links. - One answer per question. Don’t bundle multiple questions into one Question entity.
- 5โ10 questions per page. Fewer and Google has a weak signal for rich results. More and AI loses focus picking the right answer for voice. Google gives no official count.
Common mistake: duplicated FAQPage content
If the FAQ block shows on the page in HTML and is also duplicated in JSON-LD, the text must match word for word. Mismatched text is treated by Google as manipulation, and the markup gets dropped. Safest approach: generate JSON-LD dynamically from the same content source as the visible HTML block.
LocalBusiness: for businesses with a physical location
A significant share of voice queries is local: “nearby,” “open now,” “closest.” Without LocalBusiness schema your site is invisible for these queries, even with a fully-filled Google Business Profile. Google’s official docs.
LocalBusiness JSON-LD โ UK example
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Your Business Name",
"image": "https://yourdomain.com/wp-content/uploads/logo.png",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "London",
"postalCode": "SW1A 1AA",
"addressCountry": "GB"
},
"telephone": "+44 20 7123 4567",
"url": "https://yourdomain.com",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "18:00"
}
],
"geo": {
"@type": "GeoCoordinates",
"latitude": 51.5074,
"longitude": -0.1278
}
}
</script>
Same template, US version
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Your Business Name",
"address": {
"@type": "PostalAddress",
"streetAddress": "500 7th Avenue",
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10018",
"addressCountry": "US"
},
"telephone": "+1 212 555 0100",
"geo": {
"@type": "GeoCoordinates",
"latitude": 40.7549,
"longitude": -73.9880
}
}
The addressRegion field matters more in the US than the UK โ without a state code, Bing and Apple Maps often fail to place your business correctly.
Fields that matter most for voice
- openingHoursSpecification โ essential. “What’s open now” is one of the most common voice queries.
- geo (latitude and longitude) โ AI uses this for “nearest” queries plus radius.
- address โ fill every field. Don’t abbreviate, don’t collapse to one line. For US: include
addressRegion. - telephone โ E.164 format (with + and country code).
For more specific business types (Restaurant, Store, MedicalBusiness, AutoDealer) use LocalBusiness subtypes. They give AI more context about your niche and compete better in voice results.
Product schema for voice queries
Voice queries like “how much does it cost,” “where to buy,” “what is the rating” trigger Product schema. I cover base product markup in depth in my article on making products visible to ChatGPT and Google โ go there for the full template with image, brand, sku, and review fields.
For voice specifically, three fields matter more than the rest:
- description โ one or two natural sentences. Not a spec list. AI voices this when someone asks “what is this product about?”
- aggregateRating โ voice assistants often append “this product is rated 4.8 from 47 reviews.” Without AggregateRating that line never appears.
- priceValidUntil โ date through which the price is valid. Google requires it for sale prices and recommends it otherwise, so AI doesn’t skip the price for fear it’s outdated.
HowTo: works for AI, but not for Google rich results
Important: Google removed HowTo rich results from SERP in August 2023. The markup is still valid under schema.org, and AI assistants (Perplexity, ChatGPT, Gemini) parse it and use it for voice answers to “how do I do X” queries. Add HowTo for AI citation, not for SERP visibility.
HowTo is used for step-by-step instructions. For voice queries like “how do I do X,” AI looks for a clear step structure with numbered positions.
HowTo JSON-LD example
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to validate schema markup on your site",
"description": "Step-by-step process for checking and fixing schema markup.",
"totalTime": "PT15M",
"image": "REPLACE_WITH_YOUR_HOWTO_COVER_IMAGE_URL",
"step": [
{
"@type": "HowToStep",
"position": 1,
"name": "Open Rich Results Test",
"text": "Go to https://search.google.com/test/rich-results and paste the URL of the page.",
"image": "REPLACE_WITH_YOUR_STEP_1_IMAGE_URL",
"url": "REPLACE_WITH_YOUR_PAGE_URL#step-1"
},
{
"@type": "HowToStep",
"position": 2,
"name": "Run the test",
"text": "Click Test URL and wait 10โ30 seconds. Google scans the page and lists every schema type it found.",
"url": "REPLACE_WITH_YOUR_PAGE_URL#step-2"
},
{
"@type": "HowToStep",
"position": 3,
"name": "Fix the errors",
"text": "Errors are critical โ markup doesn't work. Warnings don't block indexing, but fixing them gives maximum effect.",
"url": "REPLACE_WITH_YOUR_PAGE_URL#step-3"
}
]
}
</script>
Replace every REPLACE_WITH_... placeholder with your actual URLs before deploying. Copy-pasting the template with placeholders intact will break the markup.
Key fields
- image โ required by Google for HowTo (even after the rich-results deprecation). AI uses it for visual attribution. Add it at HowTo level and on every step.
- totalTime โ ISO 8601.
PT15M= 15 minutes,PT1H30M= 1 hour 30 minutes. - step.position โ step number. Not strictly required, but without it step order is not guaranteed.
- step.name โ short title, up to 60 characters.
- step.text โ full step description. 30โ80 words works well in practice.
Want ready-to-use JSON-LD templates for your site?
Two paths, pick whichever fits:
- Get the PDF with 6 templates โ FAQPage, HowTo, Speakable, Product, LocalBusiness, Article. Hand it to your developer, or skip Telegram and email me โ I’ll send the PDF as a direct attachment.
- Email me or message me on Telegram โ I’ll implement the markup on your site end-to-end. See SEO & GEO services.
Speakable: experimental, with honest limits
A note on Speakable limits: Google explicitly restricts Speakable support to news publishers in English for Google Assistant. For a regular blog or service site, Google Assistant won’t use it. However: Speakable is a schema.org standard, so Perplexity, ChatGPT, and other AI assistants can parse it. Worth adding โ just don’t overestimate its impact.
Speakable is a schema.org specification that marks which page fragments are appropriate to read aloud, via CSS selector or xpath.
Speakable JSON-LD example (inside Article)
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Article",
"headline": "How to set up Google Ads for small business",
"author": {
"@type": "Person",
"name": "Anastasia Kyslenko",
"url": "https://adastramarketing.website/en/about/",
"sameAs": ["https://www.linkedin.com/in/anastasiia-kyslenko/"],
"knowsAbout": ["Google Ads", "schema markup", "voice search optimization", "SEO", "GEO for AI search"]
},
"datePublished": "2026-04-21",
"dateModified": "2026-04-21",
"image": "REPLACE_WITH_YOUR_ARTICLE_COVER_IMAGE_URL",
"publisher": {
"@type": "Organization",
"name": "Ad Astra Marketing",
"logo": {
"@type": "ImageObject",
"url": "REPLACE_WITH_YOUR_LOGO_URL"
}
},
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [".speakable-summary"]
}
}
</script>
Speakable is a field inside Article (or WebPage), not a standalone type. Article’s required fields (author, datePublished, image, publisher) must all be filled โ otherwise Rich Results Test will flag warnings. Note the sameAs and knowsAbout on the author โ both lift Person-level E-E-A-T signals that AI citation engines read.
In HTML
<p class="speakable-summary">The minimum realistic Google Ads budget in 2026 is $1,000 to $1,500 per month for a US or UK local business.</p>
What NOT to do
- Don’t mark the whole article as speakable. AI won’t know what to pick.
- Don’t wrap long lists, tables, or code in Speakable โ they don’t read naturally aloud.
- Don’t use Speakable on pages without a concrete answer (homepage, category pages).
How to add JSON-LD in WordPress without a developer
If you’re on WordPress, a developer is optional for most standard setups. Three approaches, from simplest to most hands-on.
1. Rank Math (my pick)
Free plugin with a built-in schema editor. The post editor has a Schema panel โ pick a type (Article, FAQPage, HowTo, Product, LocalBusiness), fill the fields in a GUI, and the plugin generates valid JSON-LD. Covers every key schema type needed for voice.
2. Yoast SEO + Yoast Local (for LocalBusiness)
Yoast auto-generates Article, WebPage, and BreadcrumbList. For FAQ, the Gutenberg FAQ Block converts into FAQPage automatically. LocalBusiness needs paid Yoast Local or a separate plugin like Schema Pro.
3. WPCode (for custom markup)
Free plugin for code injection. Add a JSON-LD snippet as a Header Snippet with a “show on this page only” condition. Full flexibility, but you edit JSON manually.
Don’t run two plugins for the same schema type at the same time. Google will see duplicates and can drop the markup entirely. If you have both Rank Math and Yoast active, disable schema in one of them.
5 common mistakes in voice-oriented schema markup
1. Schema injected via JavaScript
If JSON-LD is injected by React, Vue, or GTM Custom HTML, it loads after the main page. Not every AI crawler waits for JS. The markup may never reach the index. Fix: render JSON-LD server-side (SSR) or inside the HTML template before bots parse the page.
2. HTML and JSON don’t match
The page shows “How much does a website cost?” but JSON says “Price for website development.” Google treats this as manipulation. Rule: schema text must match visible HTML word for word.
3. Price as a string with currency
A common WooCommerce mistake: "price": "$199.00". Correct: "price": "199" (number only, no space, no currency) plus a separate "priceCurrency": "USD". Otherwise the markup fails validation.
4. Missing Organization or Person
For voice, AI wants to know who the answer is coming from. Without Organization or Person (with sameAs and knowsAbout signals), the assistant may pick a competitor who has them. Every site should carry Organization (for a business) or Person (for a personal brand) in a global JSON-LD.
5. Article required fields left empty
The Article type (where Speakable lives) requires author, datePublished, image, and publisher. Without them Rich Results Test flags warnings and AI may skip the article. See the Speakable Article example above โ every required field is there.
How to test your markup
Three tools I use in this order:
1. Schema Markup Validator
validator.schema.org โ the official schema.org validator. Checks syntax and required fields, shows every type including those Google doesn’t officially support (Speakable). The primary tool for validating Speakable markup.
2. Rich Results Test
search.google.com/test/rich-results โ Google’s tool. Shows how markup will appear in search (rich results). Not every schema type generates rich results, but those that do show a preview right there.
3. Google Search Console โ Enhancements
GSC has an Enhancements section with every schema type Google found on your site. Key metric: Valid items. If you have 50 pages with FAQPage but GSC shows only 20, something is breaking during parsing. Most common cause: JavaScript-rendered markup.
4. Bonus โ Bing Webmaster Tools
Bing’s URL Inspection shows what Bingbot sees, which matters in the US market where Bing drives Copilot. If Google indexes your schema but Bing doesn’t, check whether robots.txt or the canonical tag isn’t blocking Bingbot specifically.
Validate in Rich Results Test before publishing. Check GSC 7โ10 days after. GSC shows real indexing, not syntactic validity.
JSON-LD templates for voice AI search
PDF with six ready-to-use templates: FAQPage, HowTo, Speakable, Product, LocalBusiness, Article. Field-level notes and validated code examples.
Email me for the PDF → Or get it on Telegram
Prefer full-service? I’ll implement the markup on your site end-to-end. See SEO & GEO services.
FAQ on schema markup for voice search
For voice search, start with FAQPage โ it’s the most common source of voice answers and works on any site. Then LocalBusiness if you have a physical location (voice queries are often local). Product for e-commerce and priced services. HowTo for step-by-step instructions (Google dropped rich results for HowTo in 2023, but AI assistants still parse it). Speakable last โ it’s experimental and limited to news publishers in English for Google Assistant. All implemented as JSON-LD.
Yes. Bingbot parses the same schema.org JSON-LD that Googlebot does, and Bing feeds Microsoft Copilot answers through its Knowledge Panel. Organization and LocalBusiness schema matter most for Bing’s entity graph. Register your site in Bing Webmaster Tools, use its URL Inspection to confirm Bingbot sees your markup, and monitor the Enhancements section โ Bing shows schema errors separately from Google Search Console.
Indirectly, yes. Apple Siri pulls from Apple Maps, Yelp, and a general web index โ LocalBusiness schema with clean NAP data and geo coordinates improves Apple Maps presence, which feeds Siri’s local answers. Amazon Alexa uses Bing as its default web answer engine, so Bing-focused schema optimization helps Alexa queries too. Neither Siri nor Alexa exposes direct schema APIs like Google does, so the effect is downstream โ invest in LocalBusiness and Organization schema and you cover both.
Speakable is a schema.org specification that tells voice assistants which page fragments to read aloud. Google officially supports it only for news publishers in English via Google Assistant. For a regular blog Google won’t use it, but Perplexity and ChatGPT may parse it. Add it as a field inside Article JSON-LD with a CSS selector targeting paragraphs that hold direct answers. Expect modest gains โ worth adding now, but don’t build a strategy around it yet.
It works, but not for Google rich results. In August 2023 Google removed HowTo rich results from SERP. The markup is still valid under schema.org, and AI assistants (Perplexity, ChatGPT, Gemini) parse it and use it for voice answers to “how do I do X” queries. Add HowTo for AI citation, not for SERP visibility. Required fields: name, description, step with position/name/text/image, and image at HowTo level.
JSON-LD. Google officially recommends it in its documentation. For voice AI search JSON-LD parses faster, survives redesigns, and is easier to validate. Microdata is legacy and adds extra risk of errors. If your site currently uses Microdata, migrating to JSON-LD won’t hurt current rankings โ you can switch without worry.
Three options, simplest first. Rank Math is a free plugin with a built-in schema editor in the post editor โ covers FAQPage, HowTo, Product, LocalBusiness. Yoast SEO plus Yoast Local handles basic types and LocalBusiness. WPCode lets you inject custom JSON-LD as a Header Snippet with “show on this page only” conditions. Don’t run two plugins for the same schema type at once โ duplicates will cause Google to drop the markup.
Use three tools in order. First, validator.schema.org to check syntax and every type, including Speakable. Second, Google Rich Results Test (search.google.com/test/rich-results) to see how markup will look in search. Third, Google Search Console โ Enhancements, which after 7โ10 days shows real indexing. If GSC reports fewer pages than you actually marked up, your JSON-LD is likely rendered by JavaScript and skipped by bots.
What to implement this week
Voice AI doesn’t browse your site โ it parses structured data. The better your JSON describes the page, the higher the chance your content is voiced instead of a competitor’s.
What you can ship in 3 to 5 days:
- Add FAQPage JSON-LD to 3โ5 key pages (services, homepage, top commercial landing). 5โ10 questions each, 50โ150 words per answer.
- If you have a physical location, add LocalBusiness with openingHoursSpecification and geo. For US: include addressRegion.
- For products or priced services, add Product with description, aggregateRating, and priceValidUntil.
- Validate every page in Rich Results Test. Fix all Errors.
- After 10 days, open GSC โ Enhancements and check Valid items per type. Bonus: check the same in Bing Webmaster Tools.
Need help? If you lack time or a developer, email me or message on Telegram. I’ll implement schema markup end-to-end โ from audit of existing markup to rollout of FAQPage, LocalBusiness, and HowTo. See SEO & GEO services.
Read more
Google Search Live: strategic context ยท Schema for products: ChatGPT and Google ยท GEO optimization for AI search
More about my work
Services ยท Case studies ยท About me
Comments
Discuss on Telegram