A distributor moves their whole catalog behind a trade login. Traffic disappears over the following six weeks. The cause is rarely a penalty; it is usually that six hundred product pages started returning a login screen, Google recrawled them, found near-identical thin pages, and dropped them. Years of accumulated organic footprint, gone for a configuration decision that took an afternoon.
The good news is that hiding a price and staying indexed are not in conflict. They only conflict if you lock the whole page instead of the part you actually need to hide.
Risk 1: cloaking
Cloaking is showing search engines materially different content from what users see, and it is one of the few things Google treats as a spam policy violation rather than a quality signal. The tempting implementation (detect Googlebot by user agent, serve it the full page with the price, serve everyone else the locked version) is exactly the pattern the policy describes.
Do not do it, and be careful about doing it accidentally. Two common accidents: a locking script that skips execution for crawler user agents "so SEO still works", and price markup left in the JSON-LD while removed from the visible page.
Login walls are not automatically cloaking
Worth being precise: gating content behind a login is allowed. Publishers do it constantly. What is not allowed is the special case for the crawler. If Googlebot gets the same locked page a logged-out visitor gets, you are compliant: Google simply indexes what it can see.
Risk 2: thin and duplicate content
If your locked pages all render the same "Log in to see price" panel and nothing else, you have generated hundreds of pages with near-identical content and no unique value. Google's response is to index a few and ignore the rest, and to lose confidence in the section as a whole.
The fix is content, not configuration. Keep the description, the specifications, the images, the reviews and the internal links. A product page with 300 words of genuine description and no price is a perfectly good search result for the query that brought someone there. A page with a login form is not.
Risk 3: deindexing what you already earned
This is the expensive one. Any of the following will remove an already-ranking page from the index: returning 404 or 410, adding noindex, redirecting to a login page, or blocking the path in robots.txt. Recovery after reversing the change takes weeks to months and is not guaranteed to return to the same position.
Before you lock an existing catalog, check what it is worth. Search Console → Pages, filtered to the collection path, and Performance filtered the same way. If those URLs bring in meaningful impressions, locking the page rather than the price is a direct revenue decision.
The safe pattern
| Element | What to do | Why |
|---|---|---|
| HTTP status | Keep 200 | 404 and 301 remove the page from the index |
| Title and meta description | Leave intact | This is what ranks and what gets clicked |
| Product description and specs | Leave visible | Prevents the thin-content problem |
| Images | Leave visible | Image search is a real channel for physical products |
| Price | Replace with your locked message | The only thing you actually needed to hide |
| Add to cart | Replace with the login or apply link | Also your conversion path for new trade accounts |
| Product JSON-LD | Keep, but remove the price field | Matches the page; avoids advertising an unpublished price |
| robots.txt / noindex | Change nothing | Both remove you from search entirely |
Handling the structured data
Most Shopify themes emit Product schema with an offers block. On a locked page, keep the schema and drop the price so it stays consistent with what is rendered:
{
"@type": "Product",
"name": "Merino Wool Throw",
"description": "…",
"image": ["…"],
"offers": {
"@type": "Offer",
"availability": "https://schema.org/InStock",
"url": "https://example.com/products/merino-wool-throw"
}
}Leaving the price in the schema after hiding it on the page creates a SERP result showing a price the visitor cannot find, which is a poor experience, a mismatch Google can flag, and, if you resell brands with MAP agreements, a published price you contractually should not be publishing.
What about the Google Shopping feed
Shopping is a separate system with its own rules, and its main rule here is consistency: the price in the feed must match the price on the landing page, and the landing page must let a shopper buy. A locked product cannot satisfy either, so it will be disapproved.
- Exclude locked products from the feed, using a collection or a metafield rule in the Google & YouTube channel.
- Do not attempt to feed a trade price. Shopping is a consumer surface and your MAP or distribution terms usually forbid it anyway.
- Keep the pages in the organic index. Organic and Shopping are independent: leaving Shopping does not affect organic rankings.
When 404 or redirect is the right answer
Not everything should stay indexed. Return a 404 when the page should not exist for anyone: a discontinued line, or an expired seasonal drop with no successor. Redirect when there is a genuine replacement, such as an old model pointing at the new one. Use noindex for internal utility pages that were never meant to rank, like a trade application confirmation.
The distinction to hold onto: 404 and redirect answer "does this page exist?". Locking answers "who may see this price?". Using the first to solve the second is what costs merchants their rankings.
Prime Lock's default behaviour follows the safe pattern: pages stay 200 and indexable, only the price and buy section are withheld, and price is stripped from the Product schema on locked resources.