Public product page
In short. Every product you save as Live gets a public page at /product/ — automatically, no build step needed. The page shows title, price, images, variants, and an Add to Cart button. Five statuses control what shoppers see: Live (full page), Hidden (404), Reserved (page up, no buy button), Sold (same as Reserved, used after shipment), Trashed (permanent 404). To verify: open the path in incognito, confirm the four must-show elements, click Add to Cart. That's it.On this page: Element reference · Status behavior · Steps — verify a live page · Take offline · Mark as sold · Troubleshoot · Known limitations
How to understand your public product page
Overview
Every product you publish has its own public page, reachable at /product/yourstore-canvas-tote-bag.
This is the page shoppers land on from the shop grid, a marketing email, or a search result. The page is generated automatically the moment you save a product as Live — saving is the publish step. The layout comes from your storefront theme and is shared across every product. What you control per-product is the content that fills that layout: title, price, images, variants, description, and stock state.
Scope
| In scope | Out of scope |
|---|---|
| What each element shows and where it comes from | Editing product details (title, price, images) in the admin |
| How product status changes the public view | Configuring checkout or payment gateways |
| How the product slug controls the public URL | Customizing your storefront theme layout |
| Verifying a product page before sending traffic | Managing stock, categories, or shipping settings |
| Diagnosing common "page looks wrong" symptoms | Developer-level page customization |
Reference
| Element | What it shows | Where to change it |
|---|---|---|
| Title | Product name | Storefront → Products → Edit → Name |
| Price | Current selling price (strikethrough if sale) | Storefront → Products → Edit → Price |
| Sale price | Overrides base price when set | Storefront → Products → Edit → Sale Price |
| Images | Gallery in order uploaded | Storefront → Products → Edit → Images |
| Variants | Size, color, style pickers (if configured) | Storefront → Products → Edit → Variants |
| Description | Below the buy button | Storefront → Products → Edit → Description |
| Status badge | Live / Reserved / Sold-out indicator | Driven by product status field |
| Add to Cart button | Active when Live and in stock; hidden when Hidden/Sold | Automatic; controlled by status + stock |
| Slug (URL path) | /product/ | Storefront → Products → Edit → Slug |
Status
| Status | Public page behavior |
|---|---|
| Live | Full page — title, price, images, Add to Cart active |
| Hidden | 404 — page does not exist publicly |
| Reserved | Page visible, Add to Cart replaced with "reserved" message |
| Sold | Page visible, Add to Cart replaced with "sold" message |
| Trashed | 404 — page removed permanently |
Good use cases
- Pre-campaign check — confirm a product looks right in incognito before pointing an email at it.
- Status verification — spot-check that "Best seller" badges, sale prices, or "Sold out" states show correctly.
- Sharing links — copy the clean path for social posts, newsletters, support replies, or partner campaigns.
- Variant confirmation — verify a freshly added size or color appears in the picker before announcing it.
- Support diagnosis — walk a ticket backwards from the public path to find what's missing on the admin record.
What NOT to use this for
- Not the product editor. The public page is what shoppers see; editing happens in the admin. Viewing the public page changes nothing.
- Not a deletion tool. Visiting a trashed product's path shows a 404; the deletion itself happens in the admin.
- Not where promo codes live. Discount logic lives in the Coupons area. The product page can show a strike-through sale price if you set one, but the coupon code field is on the cart.
- Not for stock management. Inventory is on the product record. The public page reflects it; you cannot edit from the public side.
- Not where to change the layout. Product page layout is a theme-level concern — talk to your designer or theme provider.
How this connects to other features
- Products list (admin) — every public product page is driven by a row in the admin Products list. Edit the row, and the public page updates on the next load. Full detail: Reading your live storefront.
- Categories — if your product belongs to a category, the category page is the most common entry point before this page. Full detail: Storefront category pages.
- Cart — the "Add to Cart" button here feeds the cart. If clicking it does nothing, look at cart health, not the product page. Full detail: Cart page testing.
- Coupons — discount codes are entered at cart or checkout, not here. The product page shows a sale price if one is set in the admin, but coupon entry is downstream.
- SEO settings — the page picks up its title and meta description from your SEO defaults plus per-product overrides. If the product is hard to find in search, check SEO defaults first.
- Email campaigns — paste product links from the live public page, not from the admin preview. The paths differ.
Before you start
- At least one Live product. Drafts are invisible to shoppers.
- At least one image. Pages without images render with a blank media slot, which looks broken even when the rest is correct.
- A clean slug. Confirm it looks like
yourstore-canvas-tote-bag— lowercase, hyphenated — not a long string of numbers. - Pricing in the right currency and unit. Decimal prices like
$29.99round to$30on the storefront (see Known limitations below). - An incognito window. The cleanest way to see what shoppers see is to view the path while signed out of the admin.
- Maintenance gate awareness. If your storefront is behind a "coming soon" gate, drop it temporarily or use preview-as-shopper; otherwise the product page will appear not to exist.
Where this lives
To view your public product page, navigate to /product/ on your store's public domain.
If you only know the product's internal numeric ID (visible in the admin), /product/ resolves to the same page. Slugs are preferred because they are human-readable and easier to share.
There is no admin sidebar entry titled "Public product page" — the page is the storefront path. The closest sidebar path is Dashboard → Ecommerce → Products → (pick a product) → View on site, which opens the public path in a new tab.
Steps
1. Save the product in the admin
In Dashboard → Ecommerce → Products, open the product row, fill in title, price, image, and any variants, then set the status to Live (publish). Click Save. The status badge should switch to a green "Live" pill.
If you do not see the green pill after Save, scroll up. Most admin forms show a "Saved" banner near the top; a red error banner means the product is not yet saved — fix the flagged field before verifying the public page.
2. Open the public path in a clean browser
Copy the path shown on the admin page (it will be /product/). Open it in incognito or a different browser where you are not signed in to the admin. This shows the page exactly as a shopper would see it, with no admin toolbars overlaid.
If the path bar still shows the admin domain, you may have copied a draft-preview link. Remove any ?preview=1 or similar query strings before pasting into the new browser.
3. Confirm the four "must show" elements
Look for: the product title, the price (formatted in your currency), at least one product image, and a working "Add to cart" button. If any are missing or wrong, fix them in the admin before sending traffic.
A title reading "Untitled product" almost always means the title field was left blank. A price showing "$0" usually means the price field was not filled in.
4. Click "Add to cart" once
Click the "Add to cart" button. You should be taken to the cart, which should show your product as a single line item with the correct price and quantity.
If the click does nothing, see What to do if it does not work below. If the click goes to the cart but the cart is empty, try clearing browser cookies for the storefront domain and reloading.
5. Note the path for sharing
The path you used in step 2 is the one to paste into emails, social posts, ads, and partner referrals. Copy it now and store it in your campaign tracker.
If your campaign tracker uses tracking parameters, append them using the standard ?utm_source=..&utm_medium=.. format. The product page accepts query strings cleanly.
Steps — Take a product temporarily offline
1. Switch the product status to "Hidden (draft)"
In the admin, change the status from Live to Hidden. Click Save.
Use Hidden when the product will come back under the same path — a seasonal item, a sold-out product being restocked, or a product whose details are being updated.
2. Reload the public path
The public path will now redirect to your 404 page. Shoppers can no longer reach the product, even with the path bookmarked.
3. Confirm category pages are also clean
Open your category page (follow the /product_category/ pattern). The hidden product should no longer appear in the grid. If it still appears, do a hard refresh. If it persists after a hard refresh, contact support with the slug and category.
Steps — Mark a one-of-a-kind item as sold
For studios selling original art, custom prints, or limited drops: use Reserved or Sold to keep the page reachable — showing a polite "no longer available" message — without showing the buy button.
1. Switch status to "Reserved" or "Sold"
In the admin, change the product status to Reserved (buyer paid, item not yet shipped) or Sold (item shipped). Save.
The two statuses behave identically from a shopper's perspective. They exist as separate states so your fulfillment dashboard can distinguish mid-flight pieces from shipped ones.
2. Reload the public path
The page still loads successfully, but instead of the live product detail, shoppers see the storefront's "no longer available" view. The path stays valid so old links keep working.
3. Confirm with a shopper-side test
Open the path in incognito. You should see the title, possibly a thumbnail, and a clear "no longer available" message — but no "Add to cart" button.
A 404 makes a shopper think the link was broken; a graceful "sold" page tells them the story.
What success looks like
- Path pattern —
/product/with a clean, lowercase, hyphenated slug. - Four visible elements — title, price, at least one image, and a working "Add to cart" button, all visible without scrolling on desktop.
- Variants work — pickers populate from the admin record; switching variants updates price and image where configured.
- Fast load — typically under half a second on a normal connection.
- Shareable preview — pasting the path into email, social, or a chat thread produces a preview card with title, image, and description.
- Search visibility — the product begins to appear in search results within a few days of going live.
What to do if it does not work
- The page redirects to my 404. Most common cause: the product status is Hidden (draft) or Removed (trash) instead of Live (publish). Open the admin record and switch the status to Live, then reload.
- The page loads, but the price shows $30 instead of $29.99. Decimal prices are rounded down to whole numbers — a known platform constraint. Set the price as
30to begin with, or use a coupon that takes a small percent off at checkout.
- The "Add to cart" button does nothing. Open the page in a clean browser (no extensions, incognito) and try again. If the click still does nothing, the issue is in the cart action, not the product page. Contact support with the product slug.
- Variants do not switch the image. Each variant must have its own image uploaded in the admin. If only the parent product has an image, switching variants leaves the parent image in place.
- The product appears in search results but the page is blank. Hard-refresh to bypass your browser cache. If that does not fix it, wait 5 minutes and try again.
- The path shows a number instead of a slug. The product was saved without a slug. Open the admin record, set a slug, and save. The numeric path still works as a fallback, but the slug path is preferred.
- The page shows the wrong currency. Currency is set in store-wide settings, not per-product. Check Settings → Store → Currency before assuming the product itself is misconfigured.
- The page looks fine on desktop but broken on mobile. This is almost always a theme layout issue. The same product fields drive both views. Share a mobile screenshot with your designer or theme provider.
Known limitations
- Decimal prices round to whole numbers. A product saved at
$29.99displays as$30on the public page. The internal database column does not currently store the cents portion. Set whole-dollar prices, or use coupons to apply a small discount if exact-cent pricing matters.
- The "Reserved" and "Sold" views expose the product's internal ID in the page's HTML class names — invisible to shoppers but visible via "View page source." For most retail stores this is fine; for white-label stores where buyer visibility into in-flight orders is a concern, contact support.
- No native inventory countdowns or urgency widgets. If you want "X people are viewing this" widgets, talk to your theme provider or use a third-party widget that pulls data via your storefront's public hooks.
Examples
Example 1: Launching a seasonal product
Your Store creates a "Fall Tote Bag" product: sets price to $22, uploads four photos, sets the slug to yourstore-fall-tote-bag, sets stock to "In stock," and saves as Live.
Opening the path in incognito shows: title, price, image gallery with thumbnails, color and size variant pickers, and "Add to cart." The click goes to the cart correctly. The path goes into the campaign tracker.
Two weeks later, the season ends. The team switches status to Hidden. The public path now returns a 404 and the product disappears from the category grid. Next fall, re-publishing the same slug revives any old links still floating around — a useful benefit of slug stability.
Example 2: Handling a limited-edition sold-out item
Your Store sells limited-edition prints. Once a piece is claimed, the team switches status from Live to Reserved (buyer paid, item being packed) and later to Sold (shipped). The public path /product/limited-edition-print-2025 still loads, but the buy button is gone — replaced by a "no longer available" message.
Old campaign links stay valid. The two statuses look identical to shoppers; internally they tell the fulfillment team which pieces are mid-flight versus shipped. The team treats the path itself as a soft archive: product review posts, newsletters, and partner pages that linked to it never become dead links.
Example 3: Taking a product offline for a redesign
Your Store is redesigning their Canvas Tote Bag. The old version has sold out and the new one will not be ready for three weeks. Rather than leave a stale, out-of-stock page up, the team switches Canvas Tote Bag to Hidden for the three-week window. The campaign team pauses any active emails pointing to that path.
When the new version is ready, the team updates the product (new photos, new description) and switches back to Live. The slug never changed, so inbound links from earlier marketing automatically pick up the new page on launch day. This is the canonical use of "Hidden" — temporary, planned, and reversible. Trashing is not reversible, so for any "we will bring this back" scenario, Hidden is the right call.
Example 4: Diagnosing a "page looks broken" support ticket
A shopper reports: "I clicked the Classic T-Shirt link in your newsletter and the page is blank." The support team opens the path in incognito — the page loads but shows no image, and variant pickers are missing.
Checking the admin record, the team finds the product was recently re-saved with the image accidentally removed. They re-upload the image, save, and ask the shopper to refresh. The page looks right within a minute.
The public page is rarely broken on its own — it almost always reflects an admin record that needs a quick correction.
Example 5: Choosing a shareable slug
A clean path like /product/yourstore-canvas-tote-bag reads as "canvas tote bag" in social-media preview cards, chat messages, and plain-text email signatures. A messy path like /product/?id=4827&v=2 reads as nothing.
The slug is set once and rarely revisited, so taking 30 seconds to pick a human-readable one pays back over the lifetime of the product. For Your Store, every product slug starts with "yourstore-" so the brand is recognizable in the path alone.
Related reading
Public product page element reference
| Element | What it shows | Where to change it |
|---|---|---|
| Title | Product name | Storefront → Products → Edit → Name |
| Price | Current selling price (strikethrough if sale) | Storefront → Products → Edit → Price |
| Sale price | Overrides base price when set | Storefront → Products → Edit → Sale Price |
| Images | Gallery in order uploaded | Storefront → Products → Edit → Images |
| Variants | Size, color, style pickers (if configured) | Storefront → Products → Edit → Variants |
| Description | Below the buy button | Storefront → Products → Edit → Description |
| Status badge | Live / Reserved / Sold-out indicator | Driven by product status field |
| Add to Cart button | Active when Live and in stock; hidden when Hidden/Sold | Automatic; controlled by status + stock |
| Slug (URL path) | /product/<slug> | Storefront → Products → Edit → Slug |
