Optimization Guide
Shopify SpeakableSpecification Schema — Voice Commerce & AI Read-Aloud Product Optimization
When a user asks a voice assistant "Hey Google, tell me about this moisturizer" or an AI agent reads your product page to synthesize a summary, the system must decide which text on the page is most important to extract. Without SpeakableSpecification, it guesses — and often reads navigation text, legal boilerplate, or your full 400-word description. With it, you declare exactly which 2-3 sentences represent your product.
SpeakableSpecification is a schema.org property placed on a WebPage object that uses cssSelector or xpath to mark which text elements on the page voice assistants and AI agents should prioritize for spoken output. For Shopify product pages: target the h1 product title, a dedicated 1-2 sentence .product-speakable-summary element you add to your theme, and the price element. Keep total speakable content under 200 words.
How SpeakableSpecification Works
The schema.org SpeakableSpecification type lives on a WebPage JSON-LD block (not on the Product block). It uses two targeting methods:
cssSelector(recommended for Shopify) — CSS selector string(s) pointing to the HTML elements containing the speakable content. Multiple selectors are supported as an array.xpath— XPath expression(s) for more precise targeting. More powerful but harder to maintain when your Shopify theme changes.
When a voice assistant or AI agent processes your product page, it finds the SpeakableSpecification, extracts the text content of the targeted CSS elements, and uses that text for spoken synthesis or AI summary generation — instead of attempting to extract key text from the full page via NLP.
What SpeakableSpecification improves
| Use case | Without SpeakableSpecification | With SpeakableSpecification |
|---|---|---|
| Google Assistant / Alexa product query | Reads page title + first paragraph, which may be breadcrumb navigation or "Product details" | Reads product name + speakable summary + price |
| AI agent (Perplexity, ChatGPT) product summary | Agent must NLP-extract key information; may emphasize wrong sections | Agent directly accesses the declared speakable content for its summary |
| Voice search result read-aloud | Search engine selects text based on its own heuristics | Your declared summary is the source of truth for the read-aloud result |
| AI LLM citation quality | LLM extracts arbitrary text; product citation may be inaccurate | LLM cites the structured speakable summary for higher accuracy |
Implementation: Shopify Theme + JSON-LD
Implementation has two parts: (1) add a speakable summary element to your Shopify product template, and (2) add a WebPage JSON-LD block with SpeakableSpecification that targets it.
Step 1: Add a speakable summary element to your theme
Add a dedicated <p> element to your product template with a consistent CSS class (e.g., .product-speakable-summary). This element should contain a 1-2 sentence summary of the product's core benefit — written for spoken output, not visual scanning. Keep it under 50 words.
<!-- In product.liquid or main-product.liquid, near the product title -->
<h1 class="product-title">{{ product.title }}</h1>
<!-- Speakable summary: 1-2 sentences, core benefit, voice-optimized -->
<p class="product-speakable-summary">
{{ product.metafields.seo.speakable_summary | default: product.description | strip_html | truncatewords: 40 }}
</p>
<!-- Price -->
<span class="product-price">{{ product.selected_or_first_available_variant.price | money }}</span>
The product.metafields.seo.speakable_summary metafield lets you write a custom voice-optimized summary per product. Fall back to a truncated description if not set.
Step 2: Add WebPage JSON-LD with SpeakableSpecification
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"@id": "{{ shop.url }}{{ page.url }}",
"name": {{ product.title | json }},
"url": "{{ shop.url }}{{ product.url }}",
"breadcrumb": {
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "{{ shop.url }}/" },
{ "@type": "ListItem", "position": 2, "name": {{ product.type | json }}, "item": "{{ shop.url }}/collections/{{ product.type | handleize }}" },
{ "@type": "ListItem", "position": 3, "name": {{ product.title | json }}, "item": "{{ shop.url }}{{ product.url }}" }
]
},
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [
".product-title",
".product-speakable-summary",
".product-price"
]
}
}
</script>
Step 3: Verify the speakable content
After deploying, view your product page source and manually copy the text content of the targeted CSS elements. Read it aloud. The result should answer "what is this product and how much does it cost?" in a natural, complete sentence within 30 seconds of spoken audio. If it sounds awkward, rewrite the speakable_summary metafield.
What to Target: CSS Selector Guide
| Element | Recommended CSS class | Target? | Reason |
|---|---|---|---|
| Product title (h1) | .product-title, .product__title |
Yes | Essential — the name of the product |
| Custom speakable summary | .product-speakable-summary |
Yes | Core benefit in 1-2 sentences — custom element you add |
| Price | .product-price, .price__regular |
Yes | Voice users expect to hear the price |
| Product tagline / subtitle | .product-tagline |
Optional | If you have a concise tagline, it adds voice context |
| Full product description | .product-description, .product__description |
No | Often 200-500 words — too long for voice synthesis |
| Variant selectors (size, color) | .product-form__variants |
No | Interactive elements don't translate to spoken content |
| Review excerpts | .reviews__excerpt |
Carefully | One sentence of social proof adds voice credibility; avoid full review text |
| Shipping / return policy | .shipping-info |
No | Policy text dilutes the voice answer with operational details |
| Navigation, header, footer | nav, header, footer |
No | Never target page chrome elements — they will produce nonsensical voice output |
Writing a Good Speakable Summary
The speakable summary is the most impactful thing you control. It must work as a standalone spoken sentence without visual context. Write it as if answering the question "What is this product?" over the phone.
See images below for details. ✓ Fragrance-free ✓ Vegan ✓ SPF 30 Available in 3 shades. Free shipping on orders $50+.
A fragrance-free, vegan tinted moisturizer with SPF 30 broad-spectrum protection and buildable light coverage in three shades — designed for daily wear on all skin types.
Features: Niacinamide 10%, Zinc PCA 1%, Hyaluronic Acid, Panthenol, Allantoin. Suitable for: Oily skin, Combination skin, Acne-prone skin. Size: 30ml. Free from: Parabens, Alcohol, Fragrance, Silicone. Cruelty-free. Vegan.
A 10% niacinamide serum formulated for oily and acne-prone skin — visibly minimizes pores, balances sebum, and is fragrance-free, vegan, and Leaping Bunny certified.
Speakable summary formula
Use this structure for consistent, voice-optimized speakable summaries across your catalog:
[Article] [Adjective chain] [Product type] [key feature 1] [key feature 2] — [primary benefit claim in plain language], [relevant qualifier if space permits].
Example: "A lightweight, water-based hyaluronic acid serum with 2% concentration — deeply hydrates dry and dehydrated skin and layers under any moisturizer or SPF."
SpeakableSpecification with Shopify Dawn Theme
Dawn uses main-product.liquid for the primary product template. Add the speakable summary element after the product title and before the price:
{% comment %} In sections/main-product.liquid, after the title block: {% endcomment %}
<h1 class="product__title">
{{ product.title | escape }}
</h1>
{% comment %} Speakable summary — add after h1 {% endcomment %}
{% assign speakable = product.metafields.seo.speakable_summary %}
{% if speakable != blank %}
<p class="product-speakable-summary visually-hidden-on-mobile">
{{ speakable | escape }}
</p>
{% endif %}
{% comment %} Add to theme.liquid head — WebPage JSON-LD with SpeakableSpecification {% endcomment %}
{% if template.name == 'product' %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"@id": "{{ shop.url }}{{ product.url }}",
"name": {{ product.title | json }},
"url": "{{ shop.url }}{{ product.url }}",
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [
".product__title",
{% if product.metafields.seo.speakable_summary != blank %}
".product-speakable-summary",
{% endif %}
".price__regular .price-item--regular"
]
}
}
</script>
{% endif %}
The Dawn .price__regular .price-item--regular selector targets the primary sale price. Adjust selector names if you are using a customized Dawn variant — inspect element on your theme to verify the exact class names.
SpeakableSpecification for Collection and Blog Pages
SpeakableSpecification is not limited to product pages. Apply it to collection pages to help AI agents summarize your category, and to blog posts to improve AI article read-aloud quality.
Collection page
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": {{ collection.title | json }},
"url": "{{ shop.url }}{{ collection.url }}",
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [
".collection__title",
".collection__description"
]
}
}
Blog post page
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": {{ article.title | json }},
"url": "{{ shop.url }}{{ blog.url }}/{{ article.handle }}",
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [
"h1.article__title",
".article__excerpt",
".article__content > p:first-child"
]
}
}
Common SpeakableSpecification Mistakes
| # | Mistake | Impact | Fix |
|---|---|---|---|
| 1 | Targeting the full product description container | Voice assistant reads 200-500 words — unusable for voice output | Target only the speakable summary element you control — 1-2 sentences maximum |
| 2 | CSS selector targets an element that doesn't exist on all products | SpeakableSpecification returns empty for products without the element; voice output falls back to NLP extraction | Use a fallback in your Liquid template so the element is always present, even with a truncated description |
| 3 | Speakable summary written for visual scanning (bullet points, markdown) | "• Fragrance-free • Vegan • SPF 30" is nonsensical when read aloud | Write speakable summaries as complete sentences designed for spoken delivery |
| 4 | Placing SpeakableSpecification on the Product block instead of WebPage block | Schema.org specifies that speakable is a property of WebPage — placing it on Product prevents correct parsing |
Create a separate WebPage JSON-LD block and place the speakable property there |
| 5 | Targeting price elements that include compare-at / struck-through price | Voice assistant reads both prices confusingly: "Two hundred dollars, one hundred and fifty dollars" | Target only the current sale price element, not the price container that includes the compare-at |
Frequently Asked Questions
What is SpeakableSpecification and why does it matter for Shopify stores?
SpeakableSpecification is a schema.org property that explicitly marks which text elements on your product page are most important for voice assistants and AI agents to read aloud. Without it, voice assistants guess — often reading navigation text, policy boilerplate, or your full description. With it, you declare a 2-3 element selection (title, summary, price) that produces a 10-30 second spoken answer to "what is this product?" as the first response to voice commerce and AI agent read-aloud queries.
How does SpeakableSpecification work — cssSelector vs. xpath?
Both target HTML elements on your page. cssSelector takes CSS selector strings and is recommended for Shopify because theme class names are consistent and maintainable. xpath takes XPath expressions for more precise targeting. Multiple selectors are supported as arrays. The text content of all targeted elements is concatenated for voice synthesis — so order your selectors logically (title first, summary second, price third).
What text should SpeakableSpecification target on a Shopify product page?
Target 2-4 elements: the product h1 title, a dedicated 1-2 sentence speakable summary element you add to your theme (stored in product.metafields.seo.speakable_summary), and the current price. Keep total speakable content under 200 words / 30 seconds of audio. Do NOT target the full product description, variant selectors, ingredient lists, or navigation elements.
Is SpeakableSpecification the same as structured data for featured snippets?
Related but distinct. Featured snippet optimization is about text quality and format. SpeakableSpecification is an explicit machine-readable annotation declaring which specific HTML elements contain the most important product text for voice synthesis. Both benefit from concise, benefit-led product summaries near the top of the page — but SpeakableSpecification is the machine-readable declaration, while featured snippet optimization is an implicit quality signal.
Does Google currently use SpeakableSpecification for product pages?
Google's official SpeakableSpecification support is currently for news articles via Google Assistant on smart speakers. It has not been formally extended to product pages in Google Shopping or AI Mode as of 2026. However, third-party AI agents (Perplexity, OpenAI browsing, Bing AI) consume it independently of Google's restrictions. Implementing it now costs almost nothing and has forward compatibility value as voice commerce and AI agent shopping assistants grow. There is zero SEO downside.