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.

TL;DR 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:

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.

Bad speakable (visual-only writing)

See images below for details. ✓ Fragrance-free ✓ Vegan ✓ SPF 30 Available in 3 shades. Free shipping on orders $50+.

Good speakable (voice-optimized)

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.

Bad speakable (too long, list-heavy)

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.

Good speakable (concise, benefit-led)

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.

Related Resources