No root theme ships member page templates or a member layout. Until a site has a published page with the
/ slug, the account subdomain root returns a not-found response for its members.Understand the template types
A theme export lays them out beside the storefront templates:
Create the member layout
A site’s pages render inside the layout the site names. Alayouts template named member is what a new site chooses when the theme has one, so start there. The layout owns the signed-in chrome: the greeting, the site’s navigation, and sign-out.
Create layouts/member.liquid:
{{ content_for_header }}carries the normal theme header output and account screens runtime. Keep it for system screens and other theme features.- The sign-out anchor follows
member_routes.sign_out. It needs no form or CSRF-token variable. Confirm the updated authentication release is deployed before migrating an older theme. - The navigation reads
settings.menu, which is the site’s menu in the same shape as alink_listsetting. A navigation component you wrote for the storefront works here unchanged.
member_price, {% member_name %}, or {% member %} on member pages. Those helpers emit shells for the cached storefront. Here the render knows the member, so read member directly.
Build the home page
Add a page with the/ slug to the site. It is served at the site root, so it is the first page a member sees after signing in. Compose its members_page template, for example members_page/home/index.liquid:
{% layout %} tag to it or to any other member template. The site decides the frame, and a tag in the template is ignored.
Add sign-in links
Use an ordinary link wherever your theme offers sign-in:/auth/sign_in to redirect to the auth app without rendering a theme template. Do not create a members_login template or a password form. See Sign in and sign out for the full flow and rollout requirements.
Compose custom pages
Each page you add to a site gets amembers_page template, created with the page and named after it. Open the page in the theme editor and drag sections onto it as you would on a storefront page. The template can also be edited in Code Mode.
Every member page, including the home page, receives the same values: member, member_content, member_routes, and settings.menu. It renders inside its site’s layout. Its slug and its site decide where it is served and who can open it, both of which are set on the page rather than in the template. See Add pages to a site.
Read member page values
Every authorized member page receives these values on top of the theme’s usual variables.Profile and content
Readmember for approved profile fields and member_content for lazy media, content pages, and playlists. Collections load only when consumed. See Member Liquid variables for every field, visibility rules, pagination, and examples.
Member routes
The route values are independent of login state. There is no
member_routes.csrf_token variable. On cached storefront pages, include stable links rather than choosing between them using private member data.
The site’s menu
settings.menu is the resolved menu of the member’s site, deep-merged into the theme’s settings so everything else under settings survives.
Item URLs are already resolved for the account subdomain. Render them as given. Nothing marks the current page, so compare
item.url with request.path when you need an active state.
Follow the rendering rules
- Member pages render on every request for the signed-in member. They are never cached and never served by the CDN.
- Every member page is sent with headers that forbid caching and indexing. Authentication redirects also forbid caching and indexing.
- A member who matches no site, an unpublished page, and a page in another member’s site all return a not-found response. A site without a published
/page returns a not-found response at the root. - The site chooses the layout. A template’s own
{% layout %}tag is ignored. - Variants of a member template are chosen by default or region, never by member. Branch on
memberinside one template instead of adding a variant per audience. - System screens render as
members_pagetemplates that Fluid supplies. Your layout frames them; you do not author their body.
Test your templates
- Sign in as a member and open the home page. Confirm the layout, greeting, and menu render, and that no storefront header appears.
- Follow every menu item. Confirm each opens inside the same layout.
- Open a custom page and confirm it renders its sections and
membervalues. - Follow the sign-out link. Confirm your session ends on the current host, and that opening a member page sends you to sign in.
- Follow the account host sign-in link as a guest and confirm it redirects directly to hosted authentication.
- Open a system screen and confirm it renders inside your layout.
Troubleshoot a member template
Implementation checklist for coding agents
Treat this page as the member template contract. Read the target theme before editing it, and preserve its existing conventions and content.- Confirm member storefront is enabled for the target company. Do not infer it from the presence of this guide.
- Create
layouts/member.liquidwith{{ content_for_header }},{{ content_for_layout }}, a navigation loop oversettings.menu.menu_items, and a normal link tomember_routes.sign_out. - Add a published page with the
/slug to each site and compose itsmembers_pagetemplate as the home page. Usemember_routes.sign_infor sign-in links; authentication does not render a theme page. - Read only the fields documented in Member Liquid variables. Load content collections only where the page needs them.
- Do not add
{% layout %}tags to member templates. The site owns the frame. - Do not use
member_price,{% member_name %}, or{% member %}on member pages. - Do not hand-write system screen markup. Fluid renders the screens.
- Do not write member values into shared assets, cached pages, or storefront templates.
- Verify the home page, a custom page, a system screen, sign-out, and the guest sign-in flow.
- Report which files changed and which checks ran. Editing a theme, publishing it, and enabling the feature are separate actions; confirm the target and authorization before each remote change.