Skip to main content

How to use this checklist

Each section below covers one surface area of a Layers theme integration. Every row has a Who column showing whether the work is handled by the App embed (the Layers theme app extension) or by Dev (your theme code), along with notes pointing at the relevant docs. When a row is marked App embed, the behavior is automatic the moment the embed is toggled on in Online Store → Themes → Customize → App embeds — there is no theme code to write for that item. See What the app embed and SDK handle for you for the full inventory. Work the sections in order. Each one assumes the previous section is complete.
If you adopt the @commerce-blocks/sdk, every Dev row in this checklist has a Liquid + SDK variant that wraps the network call, the caching, and the state management — but the work itself is the same. Use the Liquid + Fetch or Liquid + SDK guides depending on which path you’re on.

1. App embed

ItemWhoNotes
Install the Layers Shopify app and enable the theme app extensionDevOnline Store → Themes → Customize → App embeds → Layers. See Storefront Pixel.
Storefront token loaded from shop.metafields.layers.embed_settingsApp embedAutomatic. Read the same metafield in Liquid when you need it for direct fetch calls. See Liquid integration.
Device and session IDsApp embedPersisted via cookies / sessionStorage. Cookie fallbacks configured via sessionCookieFallbacks.
Cart and customer context attached to every Layers requestApp embedproductsInCart, customer ID, segment, and tag context all forwarded.
Shopify Markets context (currency, country, language)App embedForwarded when Shopify Markets is configured.
collection_view, product_view, product_click, add_to_cart, block_view tracking eventsApp embedCaptured by the storefront pixel and shipped to the Tracking API.
_layers_attribution line item property on add-to-cartApp embedAppended when the shopper clicked from a Search/Browse response.
Order attribute writing for attributionApp embedReads _em_* and _layers_session_id on orders. Edgemesh attributes take priority when present.
Semantic redirect interceptionApp embedEnabled under Settings → Semantic Redirects → Auto Redirect. See Semantic Redirects.
?utm_products= dynamic linkingApp embedInbound links expand to matching products. See Dynamic linking.
Third-party forwarding (Clarity, Blotout, Rivo, Abra, FoxSell, Edgemesh)App embedToggle in dashboard. See Third-Party Integrations.
Search Inspector (?_layers_debug_menu=true)App embedAvailable on every page. See Search Inspector.

2. Currency selector

ItemWhoNotes
Market detection on Layers requestsApp embedActive market forwarded with every request.
Currency switcher UI in the themeDevStandard Shopify currency picker. Layers reads market from the storefront context — no Layers-specific wiring needed.
Price formatting on rendered cardsDevFormat priceRange.formatted (SDK) or price_range.min_variant_price (Fetch) using the active currency.

Search results page

ItemWhoNotes
Route handler for /searchDevWire the search query from the URL to a Layers Search request. See Implementing search in Liquid or with the SDK.
Authentication and identity on the search requestApp embedStorefront token, device ID, session ID, cart, customer all forwarded.
Render the results gridDevUse the same product tile component you use on collection pages.
Render facets and sortDevSee Rendering facets in Liquid and Rendering sort orders in Liquid.
Banners on the search results pageDevSame appliedRules[].banners shape as browse. See Rendering banners in Liquid.
Empty-state and no-results UIDevHide facets / sort when results.length === 0.
Auto Redirect for matching queriesApp embedToggled under Settings → Semantic Redirects.

Autocomplete

ItemWhoNotes
Wire the autocomplete input to the Layers Autocomplete APIDevDebounce 100–200ms. See Implementing search in Liquid → autocomplete.
Render suggested terms, products, and collectionsDevThe response contains all three sections.
Autocomplete tracking eventsApp embedautocomplete events captured automatically.
Curated autocomplete entriesPlatformConfigure under Autocomplete curation.

4. Collection pages

Sort

ItemWhoNotes
Sort-order dropdown populated from app--278936322049--sort_order metaobjectsDevSee Rendering sort orders in Liquid.
Default sort from collection.metafields.layers.default_sort_orderDevSee Liquid integration → Collection default sort.
Pass the selected sort code into BrowseDevRe-execute the request on change.

Facets

ItemWhoNotes
Facet sidebar populated from app--278936322049--facet metaobjectsDevNames and codes come from Liquid; values and counts come from the Browse API. See Rendering facets in Liquid.
Active filter state in URLDevReflect selected filters in query string so back/forward works.
Re-execute Browse on filter changeDevSend the filter group on every request. See Filtering.
Numeric ranges (price, etc.)DevRead from top-level data.priceRange (SDK) or facets.variants.price (Fetch).

Grid

ItemWhoNotes
Product grid driven by Browse resultsDevStandard tile component.
PaginationDevpagination: { page, limit }. Re-execute on page change.
Banners — hero rows above the gridDevSee Rendering banners in Liquid.
Banners — inline overtake and inject tiles by positionDevSame render guide.
Pin / sort / variant breakout consequencesPlatformConfigured in merchandising rules. The grid order Layers returns is the order you render.
Cart / customer context on browseApp embedForwarded automatically.

5. Recommendation blocks

ItemWhoNotes
Block-picker section setting populated from app--278936322049--block metaobjectsDevSee Rendering blocks in Liquid and the SDK twin.
Anchor wiring (product.id, collection.handle, none)DevPer-template data-anchor-id.
Fetch / hydrate the blockDevSee the rendering guides.
Cart context for cart-anchored blocksApp embedproductsInCart injected automatically.
Cross-block product deduplicationApp embedProducts rendered earlier on the page are excluded from later blocks.
Click attribution and feedbackApp embedThe embed listens for clicks on rendered cards and submits feedback.
Fallback chain (when a block has no results)PlatformConfigured under Fallback chains. Hide the section when results are empty.
ItemWhoNotes
Visual Search widget loadedApp embedProvided by the embed once enabled in the dashboard.
Placement on PDPs and collection pagesDevChoose where the entry point appears.
Clarity / Blotout forwarding of visual-search eventsApp embedAutomatic when the integration is enabled.

7. Similar Products (PDP)

ItemWhoNotes
Similar Products section on PDPsDevAnchor a block on product.id with a similar-products strategy. See Rendering blocks in Liquid.
”Shop similar” entry point on tilesDevOptional UX affordance — opens the Visual Search flow keyed on the tile’s product.
Identity, cart, attribution on the requestApp embedAutomatic.

8. QA and go-live

ItemWhoNotes
Open the Search Inspector on representative pagesDev?_layers_debug_menu=true. Verify request, response, attribution, and pixel events on a collection page, a search page, a PDP, and the cart. See Search Inspector.
Confirm collection_view, product_view, product_click, add_to_cart, block_view are firingDevInspector shows the events as they go out.
Confirm _layers_attribution appears on add-to-cart line itemsDevClick from a Layers-surfaced tile, add to cart, then inspect the line item properties.
Confirm market context on requests when running with Shopify MarketsDevInspector shows the market the embed sent.
Test a banner-bearing rule on the storefrontDevHero placement above the grid, inline placement at the right position, both web and mobile breakpoints.
Test auto-redirect for a configured semantic redirectDevSearch the matching query and confirm the redirect fires.
Test a ?utm_products= linkDevConfirm the inbound link surfaces the expected products.
Confirm third-party forwarding (if enabled)DevSpot-check the relevant tool — Clarity replay, Blotout dashboard, Edgemesh attribute on a test order.
Pre-launch search quality passPlatformRun through Test text search to confirm ranking is shaped how you want.
Final pixel + tracking sign-offDevOne full purchase flow with the inspector open to confirm _em_* / _layers_session_id are written to the order.

See also