Production Shopify · Product tabs
Ship product information tabs merchants can reorder
Product descriptions, specs, shipping, and reviews deserve labeled navigation—not a wall of text or exclusive accordions. This guide is about tab panel blocks that merchants can reorder, disable, and populate on PDPs without touching code.
Production implementation guide · Updated 2026-08-03
Tabs are not exclusive accordions—teach the interaction model
Tabs present multiple labeled panels where one is visible at a time by horizontal navigation. Accordions vertically stack collapsible panels. Both are valid on PDPs, but the choice depends on content density and whether merchants expect to see all labels simultaneously.
Tab sections
- Horizontal label row always visible
- One panel active; switching is fast
- Good for 3–6 distinct information categories
- Desktop-first pattern (requires thoughtful mobile adaptation)
Accordion sections
- Vertical stack of headers
- Panels can expand/collapse independently or exclusively
- Good for progressive disclosure of variable-length content
- Mobile-native pattern (works well on desktop too)
ARIA tabs pattern: roles, selection, and panel association
The ARIA tabs pattern requires role=tablist on the container, role=tab on triggers, and role=tabpanel on content. Only one tab is aria-selected=true. Arrow keys should move focus between tabs (roving tabindex). Enter/Space activates the focused tab.
Tabs are not buttons—they are a navigational widget. Do not mix accordion and tab roles in one section.
Tab structure sketch (ARIA-compliant)
{% assign first = true %}
<div class="product-tabs" role="tablist" aria-label="Product information">
{% for block in section.blocks %}
{% assign tab_id = 'Tab-' | append: section.id | append: '-' | append: block.id %}
{% assign panel_id = 'Panel-' | append: section.id | append: '-' | append: block.id %}
<button
id="{{ tab_id }}"
role="tab"
aria-selected="{% if first %}true{% else %}false{% endif %}"
aria-controls="{{ panel_id }}"
tabindex="{% if first %}0{% else %}-1{% endif %}"
data-tab-trigger
>
{{ block.settings.tab_label | escape }}
</button>
{% assign first = false %}
{% endfor %}
</div>
{% assign first = true %}
{% for block in section.blocks %}
{% assign panel_id = 'Panel-' | append: section.id | append: '-' | append: block.id %}
<div
id="{{ panel_id }}"
role="tabpanel"
{% unless first %}hidden{% endunless %}
data-tab-panel
{{ block.shopify_attributes }}
>
{{ block.settings.content }}
</div>
{% assign first = false %}
{% endfor %}First tab selected by default. Panel visibility synced with aria-selected. Block attributes let merchants reorder.
Blocks for reorderable tab panels
Each tab should be a block with a label and content setting. Merchants drag blocks in the theme editor to reorder tabs—no code required. Set max_blocks between 4 and 8 to prevent tab overflow.
Preset three tabs: Description, Shipping, Reviews (or Size guide). Teach the pattern without overwhelming new merchants.
Schema sketch — tab panel blocks
{
"name': 'Product tabs",
"settings": [
{
"type': 'select",
"id': 'mobile_behavior",
"label': 'Mobile display",
"options": [
{ "value": "tabs", "label": "Scrollable tabs" },
{ "value": "accordion", "label": "Stacked accordion" }
],
"default': 'tabs"
}
],
"blocks": [
{
"type': 'tab",
"name': 'Tab panel",
"settings": [
{
"type': 'text",
"id': 'tab_label",
"label': 'Tab label",
"default': 'Description"
},
{
"type': 'richtext",
"id': 'content",
"label': 'Panel content"
}
]
}
],
"max_blocks": 6,
"presets": [
{
"name': 'Product tabs",
"blocks": [
{ "type": "tab", "settings": { "tab_label": "Description" } },
{ "type": "tab", "settings": { "tab_label": "Shipping & returns" } },
{ "type": "tab", "settings": { "tab_label": "Reviews" } }
]
}
]
}Three-tab preset teaches the pattern. mobile_behavior setting adapts UI. max_blocks prevents label overflow.
Mobile tab strategy: scrollable labels or accordion fallback
On narrow viewports, horizontal tab labels may overflow. Options: make the tablist scrollable with visible overflow indication, or switch to accordion markup below a breakpoint. Both are valid—choose based on brand UX.
If switching to accordion on mobile, use the same block loop but swap roles and interaction. Document the breakpoint.
When to use blocks vs product metafields for tab content
Blocks are excellent when the same tabs appear on every product or template. Product metafields shine when tab content is SKU-specific (per-product care instructions, detailed specs). A hybrid approach: blocks for shared tabs (Shipping), metafields for product-owned tabs (Technical specs).
If a tab is empty, hide it. Do not render an empty panel or disabled tab label.
Production debugging for tab sections
| Symptom | Checks |
|---|---|
| Wrong panel shows after clicking a tab | aria-controls mismatch? Panel IDs unique per section instance? JS selecting wrong panel? |
| Tabs break when section duplicated on template | IDs scoped to section.id? Global selectors leaking between instances? |
| First tab not selected on load | First block aria-selected=true? Panel hidden attribute logic? |
| Mobile tabs disappear | Overflow hidden on container? No scroll affordance? Accordion breakpoint not triggered? |
Practice a product tab section by hand
Build this on a development product template before using any generator. You should explain the ARIA tabs pattern and when tabs are better than accordions.
- 01
Create sections/product-tabs.liquid
Implement role=tablist, role=tab, role=tabpanel; use blocks for panels; set max_blocks.
- 02
Keyboard navigation
Arrow keys move focus between tabs (roving tabindex). Enter/Space activates.
- 03
Mobile strategy
Scrollable labels or accordion breakpoint—test on narrow viewport.
- 04
Empty-state pass
Tab with blank content should not render or show fallback message.
- 05
Duplication test
Add two tab sections on one template; operate independently.
Use the converter after the tab model is settled
Static tab HTML can be drafted faster in the converter once you know whether you need blocks or metafields, mobile behavior, and roving focus. The converter does not decide PDP information architecture for you.
Supporting draft acceleration — not a substitute for tab UX design.
What to study next for PDP tab sections
Continue with adjacent skills. Accordion disclosures are a different pattern—study when exclusive collapsible panels are better than horizontal tabs.
Beginner
Liquid and section placement before tab chrome.
- Shopify Liquid for beginners
Read block loops and filters used in tab panels.
- How Shopify sections work
Where product.json sections sit relative to the buy box.
Intermediate
Blocks, ARIA patterns, and related collapsible UI.
- Dynamic Shopify blocks guide
Reorderable rows and editor UX.
- PDP disclosure accordions
Different pattern: exclusive vertical panels—not tabs.
- Worked implementation examples
Real-world tab section code studies.
Advanced
Delivery under merchandising pressure.
- Reusable section design patterns
When to build tabs vs accordion vs hybrid.
- Dawn theme integration
Register tab sections on product templates.
- Resources hub
Curriculum index.
Editorial review
Reviewed by the HTML to Liquid Converter team


Content is reviewed by the HTML to Liquid Converter Shopify development team before publication. Technical accuracy is validated against current Shopify Online Store 2.0 conventions and active client theme work.
Last updated:
Questions or corrections? Contact us.