The short version
You can lock one Shopify page without an app by giving it its own page template with a Custom Liquid section that shows the content only to signed-in customers carrying a tag such as wholesale.
Shopify's built-in password, called private mode, hides every page of the online store, and a page on its own only switches between Visible and Hidden.
Keep the protected text inside that section rather than in the page body, set the seo.hidden metafield to 1 to keep the page out of search, test the lock with a tagged customer account, and don't use it for anything confidential.
An app fits when you need a shared password, a secret link or no theme code at all.
The Quick Verdict
Find your row; the sections below walk through each route.
Which lock, by what you need to hide
| Your situation | Pick | Why |
|---|---|---|
| One page for signed-in customers you approve | Page template + Custom Liquid tag check | No app fee; the protected text goes in the section, not the page body; needs a plan other than Starter and a theme that can create templates in the editor |
| One page behind a shared password or secret link, no customer accounts | An app | Lock-page listings describe passwords and secret links; the template route checks signed-in customers only |
| No one to read, test and recheck theme code | An app | A template lock is Liquid you maintain and recheck yourself |
| The whole store stays closed until launch | Private mode | Shopify's store password hides every page from visitors and search engines |
| The whole store is only for wholesale buyers | Private mode, restricted to B2B customers | A store-level setting in Online Store › Preferences for a dedicated B2B store; Shopify B2B isn't available on the Starter or Retail plans |
What Does Shopify Give You Without an App?
Key takeaway
Shopify's built-in password locks the whole online store, not one page. Shopify calls it private mode, and the Help Center describes what it does in one sentence:
In private mode, all of your online store's pages are hidden from visitors and search engines, and your online store displays a customizable landing page instead.
You change the access mode from the access setting menu on the Online Store page of your admin, and you manage the password under Online Store > Preferences. When you first register for a Shopify plan, the store starts in private mode by default. If you searched for “password protection”, it is the same setting: the mobile steps in the same Help Center article call it that.
- Online Store
- Preferences
Shopify's example of an extra private-mode setting is restricting access to B2B customers only, which it describes for a dedicated B2B store. That is a store setting: it decides who sees every page, not who sees one of them. Shopify B2B isn't available on the Starter or Retail plans.
If you want the whole store closed until launch rather than one page locked, our guide to setting up a coming soon page covers private mode and the password page.
A single page has just two visibility states. In the page editor, Shopify's page settings let you choose Visible or Hidden, and Hidden hides the page from your online store. There is no audience in that choice, so Hidden cannot let approved customers in while keeping everyone else out.
- Online Store
- Pages
For specific pages, the Help Center's B2B documentation says you can restrict access “using custom development or third-party apps”, which are the two routes below. The App Store's built-in features page for customer accounts lists Lock pages as supported but gives no steps, so we follow the Help Center here.
Which Route Fits the Page You Want to Lock?
Key takeaway
For one page, the choice is between a template lock in your theme and an app.
Template lock or app: how the two page routes compare
| Page template + tag check | App | |
|---|---|---|
| Who gets in | Signed-in customers carrying your tag; test this with a tagged account | Whatever the app checks: tags, sign-in, passwords, secret links |
| Customer accounts needed | Yes, the visitor signs in | Depends on the listing; password and secret-link locks are described |
| What it hides | What sits inside one Custom Liquid section on one page | Pages, and on some listings products, collections or blogs |
| What stays open | The page body, outside the section | We did not install or test these apps |
| Theme code | A few lines of Liquid you maintain and retest after theme changes | None to write |
| Plan and theme limits | Starter can't create templates; vintage themes can't from the theme editor | Each app's plans and features |
| Cost | No app fee | Free or paid plans, per listing |
If this page is the first step of a paid membership, with tiers, member pricing or recurring billing, the decision is wider than one page. Our members-only store guide compares the storefront password, customer accounts and per-customer gating side by side.
We carry one example through the guide: a wholesale price list on a page called Wholesale prices, meant only for customers tagged wholesale.
How to Lock One Page With a Template and Customer Tags
Key takeaway
The idea is simple. The page gets its own template, the template gets one extra section, and that section decides what to print by looking at the visitor. Everything below runs in the Shopify admin and the theme editor; nothing needs an app.
Why should the check read a tag, not just a sign-in?
Key takeaway
With sign-in links turned on, customer accounts let customers sign in with passwordless authentication: there is no password to share or leak. The catch is what happens when someone you have never heard of signs in:
If someone signs in with an email address that's not associated with an existing customer profile, then a new customer profile is created automatically.
So “is a customer signed in?” is the wrong question for a wholesale price list. The right question is whether this customer carries the tag you gave them.
Treat that tag as a filter, not a secret. Shopify notes that themes and apps can add tags to customers, and Dawn's footer signup form sends one in a hidden field. We could not establish whether a tag changed in that field reaches a customer profile: see our test.
So choose a tag name that is hard to guess and that your theme and apps don't add, and don't rely on this lock for anything confidential.
If your store still runs legacy customer accounts, Shopify has deprecated them and said a final sunset date would be announced later in 2026. We found no announced date on that changelog post or Shopify's upgrade page when we last checked them. After an upgrade, Shopify redirects legacy URLs such as /account/login to the new accounts. Our guide to moving off legacy customer accounts covers the rest of that switch.
Tag the customers who should get in
Key takeaway
Open the customer in Customers and, in the Tags section, add your tag. For a batch, select the customers in the list and click Add tags. In the example, every approved wholesale buyer gets wholesale.
- Customers
Shopify says tags are not case sensitive in the admin. Your check is a separate thing: it compares the text you type in the code with the customer's tags, so write the tag in the code exactly as the admin shows it. We tested letter case: see our test.
The check further down carries its own Sign in link, but the Help Center says customers can't sign in after you hide sign-in links, while its B2B documentation calls showing them optional. Keep sign-in links turned on, as where to turn on customer login shows, or test a real sign-in if you keep them off.
Create a page template and assign it
Key takeaway
If the page doesn't exist yet, create it first with Add page in Online Store > Pages. Then, in the theme editor of your live theme, click the Home page drop-down menu at the top of the editor (it names whichever template is open, Default page in our screenshot), choose Pages and click Create template. Name it after the page, wholesale in the example, and base it on Default page.
- Online Store
- Edit theme
Assign the template just before you test, once the check, the protected text and seo.hidden, all covered below, are in place: open the page in Online Store > Pages and pick the new template in the Template drop-down, which Shopify's Help Center calls Theme template. That list shows only the templates in your current live theme, so a template created in a draft copy won't appear there.
- Online Store
- Pages
Two setups can't create the template. The Starter plan doesn't support creating new templates, and Shopify's theme comparison lists creating templates from the theme editor for Online Store 2.0 themes and themes with theme blocks, including the Horizon family, not vintage ones. Our FAQ on creating and assigning a custom page template covers the cases where the template doesn't show up.
Add the tag check in a Custom Liquid section
Key takeaway
Open the new template in the theme editor, click Add section in the Template group and choose Custom Liquid. Shopify's Help lists custom Liquid among the sections a template area can hold; if Liquid is new to you, the check below is all you need to paste.
If your theme has no Custom Liquid section in the Template group, the check below goes into a section file through Edit code, and Shopify lets you edit theme code only after you've purchased the theme.
The check uses three documented pieces.
- The
customerobject isnilwhen the visitor isn't signed in, and itstagsfield is a list of the customer's tags. - The
containsoperator checks for a string within that list. - And
routes.account_login_urlis the sign-in URL, which redirects to customer accounts when they are enabled.
{% if customer and customer.tags contains 'wholesale' %}
<div class="page-width">
<h2>Wholesale price list</h2>
<p>Orders of 10+ units: 30% off the retail price.</p>
</div>
{% else %}
<div class="page-width">
<p>This price list is for approved wholesale customers. <a href="{{ routes.account_login_url }}">Sign in</a> with your wholesale account to see it.</p>
</div>
{% endif %}The price list inside the first branch is sample text; replace it with your protected content and change wholesale to your tag. Keep the page's own body to a short teaser, because the check guards only what sits inside this section.
We ran this exact code: see our test for what we could and could not check. Test the tagged branch yourself with a customer whose inbox you can open.
- Online Store
- Edit theme
What a Template Lock Does Not Cover
Key takeaway
A template lock is honest about one thing only: what its own section prints. Keep three things in mind.
- Other templates. Shopify documents a
viewURL parameter that renders a page with an alternate template. Your check lives in one template, and the page can be requested with another, where the page's content is not behind your check. - Theme updates. Shopify says changes made in the theme editor, including sections and new templates, are copied to the updated theme, but its code-editing page warns that if you edited theme files and the changes are incompatible, “all your code changes are removed in the updated copy.” Keep a duplicate of the theme, and open the page signed out after every update or theme switch.
- Shopify's own preference. The Help Center advises editing theme files only if you can't make the change with a Shopify app or the theme editor, so use the Custom Liquid section rather than Edit code when your theme offers it. If nobody on your team will maintain the check, choose an app.
The practical rule: keep the protected text out of the page body. Put it inside the first branch of the Custom Liquid check, and let the body say only what the page is for. We tested what the page body shows: see our test.
How Do You Keep a Locked Page Out of Google?
Key takeaway
Locking a page and keeping it out of search are two separate settings. Shopify generates a default robots.txt, but Google is plain about what such a file can and can't do:
This is used mainly to avoid overloading your site with requests; it is not a mechanism for keeping a web page out of Google. To keep a web page out of Google, block indexing with noindex or password-protect the page.
Shopify gives you a per-page switch. Add a custom metafield of seo.hidden to the page and set its value to 1; Shopify says that hides the page from sitemaps, search engines and your online store search. Create the definition under Settings > Metafields and metaobjects > Pages, with the Integer type, then set the value on the page.
If the admin says the namespace and key are already taken, an app is already using seo.hidden and you can't change it in the admin. We tested the noindex side of seo.hidden: see our test.
- Online Store
- Pages
The other route Shopify documents is a noindex tag in the <head> of your theme's theme.liquid file, matched by the page handle. Replace the placeholder with your page's handle, wholesale-prices in the example:
{% if handle contains 'page-handle-you-want-to-exclude' %}
<meta name="robots" content="noindex">
{% endif %}A whole store in private mode is a different case, with its own answer: see what private mode hides from Google.
What Our Test Showed
Key takeaway
We ran this exact check in a development store on Dawn, using the customer accounts sign-in; we did not test legacy customer accounts.
What we did, what came back and what it means for you
| What we did | What came back | What it means for you |
|---|---|---|
| Opened the locked page signed out | The title, the page body and the fallback with its Sign in link; no protected block | A template based on Default page keeps the Page section, so the body isn't protected |
| Added ?view=contact or a made-up suffix to the URL | The Custom Liquid section disappeared; the page body still showed | Keep the protected text in the section, never in the body |
| Clicked Sign in in the fallback | It opened the customer accounts sign-in page, with Show sign-in links turned off; we could not finish a sign-in | Test a real sign-in if Show sign-in links is off: the Help Center says customers can't sign in after you hide those links |
| Ran contains on a test list we built in Liquid, Wholesale against wholesale; typed Wholesale on a customer tagged wholesale in the admin | No match in Liquid; the admin offered the existing tag | Write the tag in the code in the admin's letter case |
| Set seo.hidden to 1 on the page, as an Integer metafield | The page's HTML carried a robots meta tag reading noindex,nofollow, absent before; the page wasn't in the sitemap, but the sitemap's ID range ended before this new page, so it may not have been refreshed yet | Check your own sitemap once it updates |
| Previewed the template in the theme editor | The customer object was nil, so the fallback showed | In our run the preview couldn't reach the tagged branch, so test it on the storefront |
| Changed the hidden tag field in Dawn's footer signup form and clicked submit | hCaptcha held the submission from our automated browser, so no customer was created | We can't say whether a changed tag reaches a customer profile; use a tag that is hard to guess |
We could not sign in as a customer, tagged or untagged, because sign-in sends a one-time code to an inbox our test customers don't have, and we could not check whether sign-in returns the customer to the page. Horizon's theme code also has a Custom Liquid section and prints the page body in its Page section, but we did not run the test there.
Checklist: Lock One Page Step by Step
Key takeaway
The order matters in three places. Create the template in the theme that is live, or the page won't list it. Move the protected text into the section before you assign the template, so the locked page never shows it in its body. And set seo.hidden before you assign the template, so the seo.hidden setting is in place before the lock goes on.
Lock one page to tagged customersTick each step off as you go. Your progress stays in this browser, so you can come back between sessions.
Lock one page to tagged customers
Tick each step off as you go. Your progress stays in this browser, so you can come back between sessions.
Keep a backup copy before you change the theme, so you can discard the changes and start again.
Before you tick this off
- Made a copy of the live theme under Online Store
- Know which theme is live, because the page's template list reads only that one
Add one tag, such as wholesale, to every approved customer profile in Customers.
Before you tick this off
- Picked one tag name that is hard to guess and that your theme and apps don't add, and wrote it down exactly as the admin shows it
- Added it to each approved customer, or to a selection with Add tags
- Sign-in links are on in Settings › Customer accounts, or you tested a real sign-in without them
In the live theme's editor, create a page template named after the page and based on Default page.
Before you tick this off
- Confirmed the store isn't on Starter and the theme can create templates from the theme editor
- The page exists, created with Add page under Online Store › Pages if it's new
- Created the template from the Pages template type
Add a Custom Liquid section to the template's Template group and paste the check into its Liquid code field.
Before you tick this off
- The tag in the code matches the admin tag letter for letter
- The fallback text has a Sign in link built with routes.account_login_url
- Saved the template
Put the content only approved customers should see inside the check, and leave the page body as a teaser.
Before you tick this off
- The page body holds nothing you would mind a stranger reading
- The protected content sits in the first branch of the check
Add the seo.hidden metafield to the page and set it to 1.
Before you tick this off
- Created the definition under Settings › Metafields and metaobjects › Pages with the Integer type
- The metafield is on this page, not on the whole store
- If the admin says seo.hidden is taken, you know an app already uses it
Open the page in Online Store › Pages, pick the new template and save.
Before you tick this off
- The page's Visibility is Visible
- The new template is selected and saved
Open the page signed out, signed in without the tag and signed in with a tagged customer account, then once more with ?view=contact.
Before you tick this off
- Signed out: only the title, the teaser and the fallback show
- Signed in without the tag: the fallback shows
- Signed in with the tag, using a customer whose inbox you can open: the protected content shows
- With ?view= added: nothing protected appears
When Is an App the Better Lock?
Key takeaway
The template route checks one thing: a signed-in customer with a tag. An app earns its place when you need a shared password, a secret link, rules across many pages and products, or simply no code to look after.
The cards below are the five listings we read. They are a snapshot of what we found, not the whole App Store.
Five apps whose listings describe locking pages
Locks any page by customer tag, customer login or password, according to its listing.
- Rating
- 5.0 from 16 reviews
Password-protects pages, locks products and collections and hides prices for wholesale and B2B stores, according to its listing.
- Rating
- 4.9 from 50 reviews
Locks access to any product, collection, page or blog post, according to its listing.
- Rating
- 2.7 from 10 reviews
Adds a password to individual pages, collections or blogs instead of the entire store, according to its listing.
- Rating
- 2.5 from 32 reviews
Locks pages, products, collections, blogs, prices or the whole store, and lets in visitors by tags, sign-in, passwords, secret links, location and more, according to its listing.
- Rating
- 4.7 from 307 reviews
Source: each app's Shopify App Store listing, read November 6, 2026. Ratings move; prices are described in words because the listings showed location-based estimates. We did not install or test these apps.
Page Lock Not Working?
Key takeaway
Most failures come from the page never reaching your section, or from content sitting outside it. Match what you see to a row:
Symptom, cause and check
| What you see | Likely cause | What to check |
|---|---|---|
| Everyone sees the page without the fallback text | The page still uses its default template, so your section never renders | Online Store › Pages › the page: the Template list must show your new template |
| Your new template is missing from the page's list | You created it in a theme that isn't live | The list shows only templates from your current live theme; create it there |
| The protected text shows above the fallback | It sits in the page body, outside the Liquid check | Move it into the Custom Liquid section and leave a teaser in the body |
| A tagged customer still gets the fallback | The tag in your code doesn't match the tag in the admin | Compare both letter by letter, including upper and lower case |
A page with no custom template assigned returns nil for its template suffix in Liquid, which is a quick way for a developer to confirm the first row.
The Bottom Line
Key takeaway
The template route asks for one tag, one template and a few lines of Liquid, and it costs no app fee. What it asks in return is care: content outside the section isn't protected, and theme changes deserve a retest.
Frequently Asked Questions
Front-end developer specializing in Shopify since 2017. Experienced in building custom Liquid themes, optimizing storefront performance, and integrating third-party apps. Directs the editorial process behind Ecom Store Pro: sets its topics and the rules every AI-written page must pass before publication.
This page was written by AI. Separate AI agents that did not write it check its figures and claims against official sources and test its links and interactive tools. A human editor sets the site's editorial direction, topics and rules and checks that pages are complete and display correctly, but does not check their facts or edit their text. Details may change — always confirm critical data at shopify.com.
Editorial PolicySome links in this article are affiliate links. If you sign up for a Shopify store through these links, we may earn a commission at no extra cost to you. Read our full advertising policy.
