Table of contents
When users ask Google Assistant "How is the stock market today?" or "What are current bank interest rates?", Assistant needs to decide which passage from hundreds of web pages is suitable for reading aloud. Speakable schema is the signal you use to tell AI: "Here — read this passage."
How Speakable Works in the AI Ecosystem
Người dùng hỏi bằng giọng nói
↓
Google Assistant / Siri / Alexa tìm kiếm
↓
Ưu tiên trang có Speakable schema hợp lệ
↓
Đọc đoạn được đánh dấu speakable (20-70 từ)
↓
Trả lời người dùng bằng giọng nói + hiển thị trang nguồn
Without Speakable — AI can still find your page, but must analyze the text on its own and typically selects a less accurate passage.
JSON-LD Speakable in NewsArticle
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"@id": "https://example.vn/vi/tin-tuc/lai-suat-ngan-hang-thang-8-2026",
"headline": "Lãi suất ngân hàng tháng 8/2026: Vietcombank và BIDV điều chỉnh xuống 4.5%",
"description": "Từ ngày 10/8/2026, Vietcombank và BIDV đồng loạt giảm lãi suất tiết kiệm kỳ hạn 12 tháng xuống 4.5%/năm, mức thấp nhất trong 3 năm qua.",
"datePublished": "2026-08-11T08:00:00+07:00",
"dateModified": "2026-08-11T10:30:00+07:00",
"author": {
"@type": "Person",
"name": "Nguyễn Minh Tuấn"
},
"publisher": {
"@type": "Organization",
"name": "Tin Tức Tài Chính VN",
"url": "https://example.vn",
"logo": {
"@type": "ImageObject",
"url": "https://example.vn/images/logo.png",
"width": 600,
"height": 60
}
},
"image": "https://example.vn/images/lai-suat-8-2026.jpg",
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [".article-lead", ".article-summary", ".article-conclusion"]
},
"articleBody": "..."
}
Speakable with cssSelector in React/Next.js
// components/news/ArticleContent.tsx
interface ArticleContentProps {
lead: string;
body: string;
conclusion: string;
}
export function ArticleContent({ lead, body, conclusion }: ArticleContentProps) {
return (
<article>
{/* Đoạn này được đánh dấu speakable — phù hợp để đọc to */}
<p className="article-lead text-lg font-medium leading-relaxed">
{lead}
</p>
{/* Nội dung chính — không speakable */}
<div className="article-body prose">
{body}
</div>
{/* Kết luận — phù hợp đọc to */}
<p className="article-conclusion text-base border-l-4 border-orange-500 pl-4">
{conclusion}
</p>
</article>
);
}
// app/[lang]/tin-tuc/[slug]/page.tsx
export default async function NewsPage({ params }) {
const article = await getArticle(params.slug);
const jsonLd = {
"@context": "https://schema.org",
"@type": "NewsArticle",
headline: article.title,
datePublished: article.publishedAt,
author: { "@type": "Person", name: article.author },
publisher: {
"@type": "Organization",
name: "Tin Tức VN",
url: "https://example.vn",
logo: { "@type": "ImageObject", url: "https://example.vn/logo.png" },
},
speakable: {
"@type": "SpeakableSpecification",
cssSelector: [".article-lead", ".article-conclusion"],
},
};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(jsonLd).replace(/</g, "\\u003c"),
}}
/>
<ArticleContent
lead={article.lead}
body={article.body}
conclusion={article.conclusion}
/>
</>
);
}
Speakable with Fragment URL (without React)
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "Lãi suất ngân hàng 2026",
"speakable": {
"@type": "SpeakableSpecification",
"url": [
"https://example.vn/vi/tin-tuc/lai-suat#tom-tat",
"https://example.vn/vi/tin-tuc/lai-suat#ket-luan"
]
}
}
Corresponding HTML:
<p id="tom-tat">
Từ ngày 10/8/2026, Vietcombank và BIDV giảm lãi suất tiết kiệm 12 tháng
xuống 4.5%/năm — mức thấp nhất kể từ 2023.
</p>
<!-- ... nội dung bài ... -->
<p id="ket-luan">
Với xu hướng giảm lãi suất hiện tại, người gửi tiền nên cân nhắc kỳ hạn
dài hơn (24-36 tháng) để khóa lãi suất trước khi thị trường điều chỉnh tiếp.
</p>
Content Types and How to Mark Speakable
| Content type | Passages to mark Speakable | Notes |
|---|---|---|
| News | Lead (first 50 words) + conclusion | Google's official use case |
| Definition articles | First paragraph (definition) | When AI answers "What is X?" |
| Guides | Summary section + short steps | Each step under 30 words |
| FAQ | Answer to each question | Already has FAQPage schema — Speakable adds to it |
| Pricing/Quotes | Summary sentence with price + conditions | Do not mark pricing tables |
| Product pages | Core benefit description sentence | Not the entire description |
Speakable Schema Checklist
- Select 2-4 suitable text passages: 20-70 words, self-contained, no tables/URLs
- Add CSS class (
.speakable,.article-lead) to selected passages - Write SpeakableSpecification with cssSelector inside NewsArticle or WebPage
- Test with Google Rich Results Test — verify "Speakable" appears
- Do not change the CSS class after Google has indexed it
- Update speakable passages when article content is updated
Speakable schema is currently the least-used signal in structured data — few developers implement it — so implementing it now creates a clear competitive advantage in voice search and AI assistant queries.
Frequently asked questions
How does Speakable schema work?
Speakable schema marks one or several text passages in a page (typically 20-50 words per passage) as 'suitable for reading aloud'. When a user asks Google Assistant by voice ('Hey Google, latest news about the stock market'), Assistant searches for pages with valid Speakable schema to retrieve the marked text and read it out. Without schema — AI still has to decide which passage to read and typically chooses less accurately. Speakable is currently officially supported by Google for news pages (NewsArticle), but is being expanded to other content types.
Which pages are suitable for using Speakable schema?
Google currently prioritizes: (1) News and online news pages (NewsArticle schema) — this is the official use case for Speakable, (2) Definition/concept explanation pages — AI often reads the opening section when answering 'What is X?' questions, (3) FAQ — short answers are suitable for reading aloud, (4) Step-by-step guides — AI reads each step for the user to follow. Avoid using Speakable for long content, statistical tables, or passages with many URLs and special characters.
Which text passages should be marked as Speakable?
Choose passages that meet these criteria: (1) Length of 20-70 words — short enough for AI to read without losing context, (2) Self-contained — listeners can understand without reading what came before, (3) No tables, numbered lists, URLs, or special characters — these sound awkward when read aloud, (4) Key information in the article — definitions, conclusions, or direct answers, (5) Complete sentences — no mid-sentence cuts. These are typically the opening paragraph and the concluding paragraph.
Can CSS selectors be used instead of assigning @id to each passage?
Yes — Speakable schema supports 2 markup methods: (1) cssSelector: specifies the CSS class or ID of the HTML element containing the text (e.g., '.article-summary', '#main-definition'), (2) url: places a URL fragment pointing to a specific HTML element with an id (e.g., 'https://example.vn/article#definition'). With Next.js/React: CSS selectors are simpler because you only need to assign a className to the component. With static HTML: URL fragments work just as well. You do not need to choose — use both for higher coverage.
Does Speakable schema help with regular SEO rankings?
Speakable does not directly affect traditional Google Search rankings — it is not a ranking signal. However, optimizing for voice search indirectly improves AEO (Answer Engine Optimization): when AI selects your content to read aloud, it increases brand awareness, drives traffic from voice-driven queries, and builds authority as a trusted AI source. With the growing trend of AI search integrating voice (iOS Siri + ChatGPT, Google Assistant + Gemini), Speakable schema is a long-term investment.
AEO Saigon
An Answer Engine Optimization agency in Ho Chi Minh City — helping business websites get cited by AI. About AEO Saigon →
Want your website to be cited by AI like this?
Free Audit