Skip to content

Required Templates & Features

TL;DR: Every template, page requirement, feature, browser, and SEO rule Shopify checks.

TemplateFormat
Layouttheme.liquid
Homeindex.json
Productproduct.json
Collectioncollection.json
Collection listlist-collections.json
Cartcart.json
Searchsearch.json
Blogblog.json
Articlearticle.json
Pagepage.json
Contact pagepage.contact.json
404404.json
Passwordpassword.json
Gift cardgift_card.liquid (the one template that stays plain Liquid, not JSON)
Configsettings_data.json, settings_schema.json

Every template except Customer Account, Gift Card, and Checkout must support sections.

✅ Must include❌ Common gaps
Untruncated product.titleTitles cut off with truncate or fixed-height CSS clipping
variant.price, variant.unit_price, compare-at priceOnly the current price shown, no compare-at for sale items
product.descriptionDescription omitted on a “simplified” alternate layout
Option names and valuesOptions collapsed into an unlabeled dropdown with no visible name
All product images viewableA gallery that hides images beyond the first 3–4 with no way to see the rest
Variant images that swap on selectionA static gallery that ignores which variant is selected
Quantity selectorOnly an “Add to cart” with an implicit quantity of 1
Add to cart button (disabled/replaced when unavailable)A button that stays clickable and silently fails on sold-out variants
First available variant loads by defaultThe page defaults to the first listed variant even if sold out
Swatches for product options (swatch.image/swatch.color)Plain text option buttons when the product actually has color/pattern swatches configured
Product recommendationsOmitted entirely, or only shown on some product types
Rich product media (3D, video)Only static images supported, even when a product has video/3D assets
Accelerated checkout buttons, on by defaultPresent but disabled by default, or missing on some product templates
Pickup availabilityOmitted, or only shown when a merchant has zero pickup locations (should degrade gracefully, not disappear)
Shop Pay Installments bannerMissing on the product template
{% comment %} ❌ WRONG — silently allows checkout attempts on a sold-out variant {% endcomment %}
<button type="submit">Add to cart</button>
{% comment %} ✅ RIGHT — reflects real availability state {% endcomment %}
<button
type="submit"
{% unless current_variant.available %}disabled{% endunless %}
>
{%- if current_variant.available -%}
{{ 'products.product.add_to_cart' | t }}
{%- else -%}
{{ 'products.product.sold_out' | t }}
{%- endif -%}
</button>
✅ Must include❌ Common gaps
Untruncated collection.title, description, imageTitle truncated by a fixed-width heading with text-overflow: ellipsis and no full-text fallback
Product grid resilient to varying image aspect ratiosGrid that breaks or misaligns when products mix portrait/landscape/square images
Sale badge or product.compare_at_price_max shown when relevantNo visual indication a product is discounted
Sort controlProducts shown in a fixed order with no way to sort
Empty-collection messageA blank grid with no explanation when a collection has 0 products
Pagination or lazy loadingAn unbounded grid that tries to render an entire large catalog at once
product.price_varies used to show a price rangeA single price shown even when variants range widely in price
✅ Must include❌ Common gaps
Line item details: title, unit price, image, final price, quantity, optionsA simplified cart missing unit price or selected option values
Visible cart.total_priceTotal only shown at checkout, not on the cart page itself
Checkout button that submits the cart formA “Continue” button that doesn’t actually submit to checkout
Quantity editing that refreshes the total immediatelyQuantity changes that require a full page reload to reflect in the total
Empty-cart messageA blank page with no explanation when the cart has 0 items
Cart notesOmitted entirely
Selling plans shown in the cartSubscription selections silently dropped once added to cart
Automatic discount codes reflectedDiscounts applied at checkout but invisible in the cart summary
Accelerated checkout buttons, on by defaultMissing or disabled by default on the cart page
✅ Must include❌ Common gaps
A clear “no results” messageA blank page with no explanation for a query with no matches
Distinguishes result types via object_type (product/blog/page)All results rendered identically regardless of type, confusing customers
Pagination or lazy loadingAn unbounded results list
✅ Must include❌ Common gaps
A clear “page not found” messageA generic blank error page
A way forward: a search bar or a homepage linkA dead end with no navigation options

All of these must work somewhere in the theme:

FeatureWhere it must work
Sections on every template (OS 2.0)Every page-supporting template
Discount displayLine items and order totals
Accelerated checkout buttonsProduct page, cart page
Faceted search filteringCollection page, search page
Gift cards, with recipient supportGift card template
Image focal pointsAnywhere image_picker settings are used
Social sharing image (page_image)Any shareable page
Country and language selectorsStorefront-wide, if selling multi-region/language
Multi-level (nested) menusHeader navigation
Newsletter signupFooter or a dedicated section
Pickup availabilityProduct page
Related + complementary product recommendationsProduct page
Rich product media (3D, video)Product page, featured product section, quick view if present
Search box with predictive searchHeader/search template
Selling plans / subscriptionsCart page, customer page
Shop Pay Installments bannerProduct page
Unit pricingCollection, product, cart, customer pages
Variant imagesProduct page
Follow on Shop button (colors unmodified)Wherever social/follow actions are surfaced
PlatformBrowsers
DesktopSafari (latest 2), Chrome (latest 3), Firefox (latest 3), Edge (latest 2)
MobileMobile Safari (latest 2), Chrome Mobile (latest 3), Samsung Internet (latest 2)
WebviewsInstagram, Facebook, Pinterest (latest release, iOS + Android)

Test in an actual webview, not just the desktop version of the same browser engine. Webviews often behave differently, for example, with <video> autoplay rules and viewport sizing.

✅ Do❌ Don’t
Write or compile stylesheets into .css/.css.liquid filesCommit .scss/.scss.liquid files
Let Shopify auto-minify your CSS/JSCommit pre-minified .css/.js (except ES6+ and approved third-party libraries)
✅ Must include❌ Don’t
Theme SEO metadata (title, meta description, canonical URL)Missing or duplicate canonical URLs across pages
Google rich product snippetsNo structured data on product pages
N/AA robots.txt.liquid template (not allowed at all)
✅ Required❌ Don’t
Public theme documentation + contact form, linked from your listing, ready before launchLaunching before documentation/support are in place
Reply to merchant support requests within 2 business daysMulti-day or multi-week response times
Fix critical bugs immediatelyLetting a critical bug sit through your normal release cadence
✅ Do❌ Don’t
Build the full per-page checklist into your section development process from day one. Adding a missing feature (like unit pricing) across an already-built product/collection/cart/customer flow later is expensive.Building the “happy path” for each page and skipping the edge-case states (empty cart, no search results, sold-out variant) until QA finds them later.
Test every page type with genuinely awkward data early on: a sold-out variant, an empty cart, a zero-result search, a collection with mixed image aspect ratios.Testing only in desktop Chrome, and only finding webview-specific bugs (autoplay, viewport quirks) during review.
Treat browser and webview testing as part of your regular QA loop, not a one-time check before submission. It’s much cheaper to catch a regression right when it happens.Treating documentation and support setup as a launch-day task instead of having it ready ahead of time.
  • 14 required templates, see the table above.
  • Product/collection/cart/search/404 pages each have their own must-have field list, see the tables above for the full ✅/❌ breakdown.
  • Browser support spans 4 desktop browsers, 3 mobile browsers, 3 webview apps.
  • No Sass, no pre-minified assets.
  • 2-business-day support response time (your SLA) once your theme is live.