Block placements reference
In short
The Custom Block app block can go in four positions: the checkout body, just after the header, just before the delivery address and just after it. Every position renders the same way: it loads the block whose Block ID you paste in. Pick the position by what the block is for.
✓ Applies to
- Advanced and Deluxe plans
- Shopify Plus checkout (and development stores for testing)
- The Custom Block app block
✕ Doesn't apply to
- The thank-you and order status pages
- The Rules Executor block, which runs checkout rules and shows no block content
Positions
| Position | Shopify target | Where it appears | Good for |
|---|---|---|---|
| Checkout body | purchase.checkout.block.render | Wherever the checkout editor lets you add an app block. You choose the spot in the editor | Most blocks: upsells, trust badges, custom fields, notices, gift messages |
| After the header | purchase.checkout.header.render-after | Just below the checkout header | Store-wide announcements, notice banners, step indicators, promo messages |
| Before the delivery address | purchase.checkout.delivery-address.render-before | Above the delivery address form | Delivery notes and address guidance, shipping protection |
| After the delivery address | purchase.checkout.delivery-address.render-after | Below the delivery address form | Delivery date pickers, delivery instructions, shipping protection |
In the checkout editor, all four appear as the same Custom Block app block. Each one has one setting, Block ID. The target names are Shopify’s; you don’t need to type them anywhere.
Shopify only lets checkout apps render in the information, shipping and payment steps on Shopify Plus. Development stores can place and test blocks.
What’s the same in every position
| Behaviour | Detail |
|---|---|
| Content | The block whose ID is in Block ID, with all its block types in builder order |
| Status | Only Active blocks render. Draft renders nothing |
| Visibility conditions | Checked the same way in every position. See visibility conditions |
| Translations | The buyer’s checkout language is used in every position |
| Styling | Your checkout branding. You can’t add custom CSS |
| Empty Block ID | The checkout editor preview shows Block not found |
Positions and blocks that need a delivery address
The two delivery address positions only render when checkout shows a delivery address form. Don’t use them for a block every buyer must see if you offer local pickup, or sell items that don’t need shipping.
Some blocks depend on checkout context wherever you place them:
- Step indicator hides itself when the checkout has fewer than two steps, for example a one-page checkout.
- Shipping protection hides itself when no product is selected or the product can’t be sold.
Several blocks in one position
Each Custom Block app block holds one Block ID. To show several saved blocks, add one Custom Block per Block ID. If the content always shows together, it’s simpler to put all the block types inside one saved block and place it once.
Frequently asked
Does the position change how the block works? +
No. All four positions render the same block the same way, with the same visibility conditions. Only where it appears changes.
Why doesn't my block show before the delivery address? +
The delivery address positions only render when checkout shows a delivery address form. With local pickup, or a cart that needs no shipping, there's no form, so these positions don't show.
Can I put a block on the thank-you page? +
No. The Custom Block app block only has checkout positions. It isn't available on the thank-you or order status pages.