Publish approved product facts for discovery and return contract prices only to authorized buyers. Check HTML, structured data, feeds, downloads and APIs; hidden prices and search exclusion do not enforce access.
A wholesale buyer can need your filter’s dimensions before they qualify for a contract price. That is a useful public product page. The problem begins when “Log in for price” hides the number visually but the page response still publishes it.
I recommend deciding the public/private field boundary before choosing markup or a lock app. The workflow below preserves useful discovery where the business permits it, checks where private terms can escape and shows when a shopping appearance is incompatible with the available public data.
Put it into practice
B2B catalog workbook
Specify who may see, buy, quote and approve, then test price precedence at the exact company and location.
Explore this resourceDecide which product facts are public
Start with a field list, not the lock app. Ask the commercial owner to classify product identity, specifications, stock information, standard price, negotiated price, quantity breaks, customer discounts, credit terms and documents. Assign one of three meanings: public, available to a defined company after authorization, or internal only. A public list price and a private contract price are different fields even when the current system stores them together.
For each field, record its source, audience, export destinations and approval owner. Avoid labels such as “B2B data” that conceal several rules. A safety data sheet may be public while a customer quote using the same product must remain private. Write the rule for visitors whose account is pending, suspended or no longer assigned to that company.
| Data or surface | Public visitor | Approved Company A | Approved Company B |
|---|---|---|---|
| Product identity and technical facts | Approved title, SKU, material, dimensions | Same public facts | Same public facts |
| Contract price response | No contract offer returned | A’s authorized price only | B’s authorized price only |
| HTML and rendered page | Public facts; no private payload | Only authorized offer data | Only authorized offer data |
| JSON-LD and embedded page state | No contract prices | No other company’s terms | No other company’s terms |
| Search, downloads, feed and API output | Approved public fields only | Only fields permitted for this actor | Only fields permitted for this actor |
Use this as an acceptance contract across the storefront and integrations. It is an implementation recommendation, not a statement that your present platform enforces every row. If public product identity itself is confidential, choose a private catalog and accept the discovery limit instead of publishing a thin imitation of it.
Inspect the response, not just the visible price
A page can say “Log in for price” while its response still contains the price. Review the server HTML, rendered DOM, JSON-LD, inline configuration, data attributes, network responses and downloadable files. Include collection cards, quick views, predictive search, comparison tools, print views and alternate language or currency URLs. A theme correction reaches only the surfaces it actually controls.
Trace the product into feeds and integrations separately. Record who exports to Merchant Center, marketplaces, public search indexes or downloadable catalogs. Check whether a feed uses a default customer, a privileged service account or the last saved price. Access to an administrative source must not silently become permission to publish all of its fields.
I recommend capturing the expected field set before inspecting output. Search for the fictional test prices and company identifiers as well as the word “price.” A clean text search is useful evidence for those values; it is not proof that an endpoint cannot reveal a different private field. Ask the developer to review the server authorization rules and shared-cache behavior too.
Keep authorization separate from crawl and index controls
Authentication identifies a visitor; authorization decides whether that visitor can read a particular company’s offer. Google’s guidance recommends password protection for confidential content. The server must prevent an unauthorized response from carrying private terms, even if the caller knows a product or company identifier. Control what you share with Google Search.
Robots.txt is a crawler instruction. It does not require a human or API client to log in, and a blocked URL can still appear in Search. Noindex is a search exclusion rule. It does not stop a person with the URL from reading the response. Google must be able to crawl a resource to see its noindex rule, so blocking the same resource in robots.txt can prevent that rule from being processed. Robots.txt limitations; how Google processes noindex.
Do not send private prices to Googlebot as an exception. Keep the approved public product response useful to both ordinary visitors and crawlers. Have the implementation owner decide how authenticated responses, caches and exports preserve the company boundary. Disabling a button or changing CSS does not provide that boundary.
Publish product facts without exposing contract offers
- Decide what is public. Publish approved technical facts or keep the catalog private; private offers require server authorization.
- Inspect every response surface. Hidden labels and search exclusion do not protect prices in HTML, rendered DOM, JSON-LD, embedded state, the price API or feed.
- Fix a leak before release. Remove the private offer from anonymous output; do not replace it with a fictitious zero price.
- Check search eligibility separately. Use an offer-based appearance only when there is a real eligible public offer.
Illustrative example Anonymous output must contain neither Company A’s $42 nor Company B’s $39. Each authorized company receives only its own offer. Three actors × six defined surfaces = 18 expected-output cases: a planning count, not a security score.
Choose the search appearance your public data can support
| Goal | Decision for a price-gated product |
|---|---|
| Ordinary organic discovery | Keep a useful public technical page accessible and intentionally indexable. A contract price is not the public page’s purpose. Indexing and ranking remain uncertain. |
| Product snippet | Google requires a product name and at least one of review, aggregateRating or offers. A valid review/rating path can qualify without an Offer; do not invent one. Product snippet structured data |
| Merchant listing structured data | Requires a genuine active offer price greater than zero and the other required properties. A login-gated negotiated offer is not a reason to expose confidential terms. Merchant listing structured data |
| Merchant Center feed | Submitted price must satisfy the landing-page and checkout rules. Review the actual channel policy instead of exporting a company contract as the public price. Merchant Center price requirements |
A product can still have useful public facts when it does not qualify for a shopping enhancement. Rich-result eligibility is not guaranteed display. Treat a missing-price warning as a scope decision: either you have a real permitted public offer, or that offer-based appearance is unsuitable for this page. Do not put zero in an Offer to mean “ask for price.” Zero describes a price, not an authorization rule.
Merchant Center permits free, straightforward account signup under its stated conditions, but the submitted price must be purchasable by any user in the target country. That does not make a negotiated Company A price a general offer. Keep regional rules, approved member pricing and your actual sales restrictions in the channel review.
Give the buyer enough public information to choose the next step
A public product page should help a buyer establish fit before they request access. Include approved identifiers, dimensions with units, material, compatibility, pack quantity, supported applications and genuine limitations. Link relevant public documentation. Explain what account approval changes: for example, access to company pricing and ordering. Do not imply instant approval when a sales team must review an application.
Keep confidential drawings and customer-specific documents out of the public asset folder. A document link hidden from a page is still a public link if the file server serves it anonymously. Give private downloads the same access review as the price response. Include PDF text and metadata in that review, not just the filename.
If the commercial team requires a completely private assortment, maintain an approved public capability or category explanation only where it helps visitors. Do not publish private product names to create search pages. This choice belongs to the business owner; SEO cannot decide that disclosure is acceptable.
Run a three-actor acceptance check
- Prepare controlled inputs. Use a representative product, two authorized companies with deliberately different fictional prices, an anonymous session and the exact URL/endpoint/export inventory. Record theme/app versions and the owner of each output.
- Check anonymous reads first. Open the product and its alternate surfaces without an existing session. Save response and rendered evidence in an access-controlled work folder. Do not paste real terms into public validators or support forums.
- Check both company boundaries. Company A must not receive B’s price, or the reverse. Revisit the product after switching accounts and after logging out. Have the developer inspect whether a shared cache can reuse an authenticated response for another actor.
- Check direct reads. Test the documented APIs and files with appropriate approved test access. A missing link does not excuse an endpoint that returns unauthorized data. Include expired or revoked membership.
- Check publication outputs. Inspect fresh HTML, markup, generated feeds and downloaded documents after the change. Mark each case pass, fail or not yet checked, with evidence and an owner.
- Release only the accepted scope. Keep public content discoverable where intended. Recheck representative surfaces after theme, lock-app, feed or search-service changes.
This is a test plan for your implementation team, not a claim that the examples below were run against a store. A failed boundary blocks release of that surface. Do not treat eighteen clean screenshots as a substitute for server authorization review.
Trace the leak or search loss to its owner
| Observation | Check first | Action |
|---|---|---|
| Price hidden on page, visible in source | Inline state or schema still contains a private offer | Remove private fields from the anonymous server response; recheck consumers. |
| A’s price appears after B logs in | Session/company context and cache partitioning | Hold the affected change; trace response generation and cache keys with the developer. |
| Price persists in shopping results | Feed, landing page and current structured data | Correct the actual exporting source; do not assume a CSS change reached it. |
| Public product disappears from Search | Login requirement, HTTP response, robots and noindex changes | Restore only approved public content and intended crawl/index settings. |
| Markup test requests an offer | Wrong target appearance or incomplete genuine data | Choose a supported appearance; omit fabricated price/rating properties. |
If private information is already public, first remove or protect the source and all affected URL variants. Review Google’s removal process for the appropriate temporary and lasting actions. A Search removal request is not a fix for a still-public API or feed. Keep evidence of the correction and monitor the affected URLs; do not promise a fixed recrawl or price-removal deadline.
Hand off a field contract, not a request to “hide prices”
The useful deliverable is a short table of fields, audiences, outputs, expected responses and acceptance evidence. Attach the outstanding cases and name the owner of storefront, feeds, search, documents and caching. Keep source evidence containing real company terms private.
I would choose a public technical catalog with authorized offers when discovery matters and product facts are publishable. I would choose a fully private catalog when assortment disclosure is itself restricted. If an app covers only the visible storefront, scope the missing endpoints and exports before purchasing more tools. The cost depends on the actual surfaces and responsibilities, not the number of hidden price labels.
Hypothetical worked example
Worked example: a hidden $42 price still leaks
Fictional teaching example. An industrial filter has public SKU, dimensions and material. Its assumed Company A unit price is $42 and Company B price is $39. Neither is a public offer. The anonymous page displays “Log in for price,” but its JSON-LD contains A’s $42.
| Actor | Visible price | Price anywhere in permitted response |
|---|---|---|
| Anonymous | No contract price | Neither $42 nor $39 |
| Company A | $42 | A’s $42 only |
| Company B | $39 | B’s $39 only |
The anonymous case fails even though the page looks correct. Remove the private Offer from the public output and trace the same field into embedded state, search and feeds. Do not replace $42 with $0. Keep the technical facts available. A and B still need their own authorized offers.
For a bounded first check, define six surface groups: HTML, rendered DOM, JSON-LD, embedded state, documented price API and generated feed. Three actors × six groups = 18 expected-output cases. This count is a planning example, not a security score; additional documents, channels and revoked-account tests increase the scope. No ranking gain or removal deadline follows from the correction.
Frequently asked questions
Can a product page be indexed without a visible price?
A useful public product page can be intended for ordinary discovery without publishing a contract price. That does not guarantee indexing, ranking or a shopping enhancement. Keep those goals separate and verify the actual response and index directives.
Should we use noindex for every B2B product?
Only if excluding those public pages is the intended search decision. Noindex removes the page from Google after processing; it does not protect confidential fields. Use authorization for private offers and preserve approved public pages where discovery is wanted. Noindex documentation.
Can we mark up a review instead of an Offer?
A genuine eligible review or aggregateRating can meet that part of Product snippet requirements without an Offer. The page must meet all applicable requirements. Do not create reviews or ratings to satisfy a test. Product snippet structured data.
Sources and further reading
- Control what you share with Google Search
Source checked: October 31, 2026.
- Product snippet structured data
Source checked: October 31, 2026.
- Merchant listing structured data
Source checked: October 31, 2026.
- Introduction to robots.txt
Source checked: October 31, 2026.
- Block Search indexing with noindex
Source checked: October 31, 2026.
- Merchant Center price attribute
Source checked: October 31, 2026.
- Remove a page hosted on your site from Google
Source checked: October 31, 2026.
