Most Singapore online stores pour budget into ads and homepage design, then leave product detail pages (PDPs) on default theme settings and manufacturer-supplied copy. That is the wrong order. The product page is where buying intent is highest, where Google decides whether to show a rich result with a star rating and price, and where a slow mobile load quietly kills a sale. Unoptimised PDPs mean you are paying to send traffic to pages that cannot rank or convert on their own.
This is a working checklist. It assumes you run a real catalogue on Shopify or WooCommerce, sell in Singapore dollars, charge GST, and ship locally. Every section gives you something to action today: templates you can paste, a schema snippet you can adapt, and the settings that move rankings on a PDP. Work through it once per product template, then re-run it quarterly because catalogues and prices change and rankings decay without maintenance. For the wider picture, our guide on what ecommerce SEO is and the comparison of ecommerce SEO versus traditional SEO explain why product pages behave differently from blog posts.
On-page foundations
URL and slug structure
Keep slugs short, lowercase, and human-readable. Include the product name and a defining attribute, not the SKU or a string of IDs.
- Good: /products/linen-shirt-mens-white
- Avoid: /products/sku-48817-variant-2?ref=collection
On Shopify the /products/ prefix is fixed, so optimise the handle. On WooCommerce you can choose your permalink base; /product/ is fine and consistent. Set the slug once and avoid changing it later. If you must change it, 301 redirect the old URL so you do not lose accumulated authority.
Title tag and meta description templates
Write a unique title and meta description for every PDP. Keep titles near 50 to 60 characters and descriptions near 140 to 155 characters so they do not truncate. Lead with the product, then the qualifier, then the brand.
Below are templates you can paste into your theme’s SEO fields or a plugin like Yoast or Smart SEO, swapping the bracketed tokens.
TITLE (general): [Product Name] [Key Attribute] | [Brand]
TITLE (price-led): [Product Name] [Attribute] – From S$[Price] | [Brand]
TITLE (local intent):[Product Name] [Attribute] in Singapore | [Brand]
META (general): Shop the [Product Name] in [colour/size options]. [One concrete benefit]. Free delivery over S$[X] in Singapore. GST included.
META (review-led): [Product Name] rated [X.X]/5 by [N] reviewers. [Benefit]. Ships from Singapore in [N] days. Easy [N]-day returns.
|
Field |
Template |
Worked example |
|
Title (general) |
[Product] [Attribute] | [Brand] |
Linen Shirt Men’s White | Kemeja |
|
Title (price-led) |
[Product] [Attribute] – From S$[Price] | [Brand] |
Linen Shirt Men’s – From S[X]. GST included. |
|
Meta (review-led) |
[Product] rated [X.X]/5 by [N] reviewers. Ships from SG in [N] days. |
Linen Shirt rated 4.7/5 by 213 reviewers. Ships from SG in 2 days. Easy 30-day returns. |
H1 and heading hierarchy
The H1 should be the product name, rendered once per page. Do not let the theme also wrap the logo or a banner in an H1. Use H2s for the sections that follow: description, specifications, sizing, shipping and returns, reviews, and Q&A. This helps Google understand the page and gives you natural places to answer buyer questions.
Content that earns the ranking
Unique descriptions, no manufacturer copy
The biggest on-page weakness in Singapore catalogues is pasted manufacturer descriptions. If twenty resellers carry the same paragraph, Google has no reason to rank yours. Rewrite every description in your own words.
A strong PDP description covers:
- The core benefit in the first two lines, written for the buyer not the catalogue
- Materials, dimensions, and specifications in a short table or bullet list
- How it suits Singapore conditions where relevant (climate, voltage, local sizing)
- What is in the box, compatibility, care, and warranty
Aim for usefulness over a fixed word count. A simple accessory may need 120 words; a high-consideration item may justify 400 to 600. For platform-specific tactics see our notes on SEO for Shopify.
Images: filenames, alt text, compression, lazy load
- Filenames: name files by content before upload, for example linen-shirt-mens-white-front.jpg, not IMG_4821.jpg.
- Alt text: describe the image for a shopper who cannot see it, including the product and key attribute. Keep it natural, not a keyword pile.
- Compression: export at the display size, serve WebP or AVIF where supported, and target under 150 KB per image where quality allows.
- Lazy load: lazy-load below-the-fold gallery images, but never lazy-load the main hero image because that delays your Largest Contentful Paint.
Technical and schema
Product, Offer, AggregateRating, and Breadcrumb JSON-LD
Structured data turns a plain blue link into a rich result with price, availability, and star rating. Shopify and WooCommerce themes emit some schema by default, but it is often incomplete or duplicated. Validate what your theme outputs, then add or correct fields. The deeper mechanics are covered in Shopify schema and structured data.
Here is a clean Product block combining Offer and AggregateRating, plus a separate Breadcrumb block.
{
“@context”: “https://schema.org/”,
“@type”: “Product”,
“name”: “Linen Shirt Men’s White”,
“image”: [
“https://yourstore.com.sg/img/linen-shirt-mens-white-front.jpg”
],
“description”: “Breathable men’s linen shirt designed for Singapore’s climate.”,
“sku”: “LSM-WHT-001”,
“gtin13”: “0123456789012”,
“brand”: { “@type”: “Brand”, “name”: “Kemeja” },
“offers”: {
“@type”: “Offer”,
“url”: “https://yourstore.com.sg/products/linen-shirt-mens-white”,
“priceCurrency”: “SGD”,
“price”: “59.00”,
“priceValidUntil”: “2026-12-31”,
“availability”: “https://schema.org/InStock”,
“itemCondition”: “https://schema.org/NewCondition”,
“shippingDetails”: {
“@type”: “OfferShippingDetails”,
“shippingDestination”: {
“@type”: “DefinedRegion”,
“addressCountry”: “SG”
}
}
},
“aggregateRating”: {
“@type”: “AggregateRating”,
“ratingValue”: “4.7”,
“reviewCount”: “213”
}
}
{
“@context”: “https://schema.org/”,
“@type”: “BreadcrumbList”,
“itemListElement”: [
{ “@type”: “ListItem”, “position”: 1, “name”: “Home”, “item”: “https://yourstore.com.sg/” },
{ “@type”: “ListItem”, “position”: 2, “name”: “Men’s Shirts”, “item”: “https://yourstore.com.sg/collections/mens-shirts” },
{ “@type”: “ListItem”, “position”: 3, “name”: “Linen Shirt Men’s White” }
]
}
The table below explains which fields matter and the common mistakes that get rich results suppressed.
|
Schema field |
Why it matters |
Common mistake to avoid |
|
name |
Must match the visible H1 |
Theme outputs a different value than the page |
|
priceCurrency |
Sets the currency in the SERP |
Left as default USD instead of SGD |
|
price |
Drives the price shown in results |
Static value that does not update with the live price |
|
availability |
Shows In stock or Out of stock |
Always InStock even when sold out |
|
aggregateRating |
Enables the star snippet |
Marked up but not visible on the page, which violates policy |
|
reviewCount |
Required alongside ratingValue |
Present without any real reviews behind it |
|
gtin13 / sku |
Helps matching and Shopping |
Omitted entirely, weakening product matching |
|
itemCondition |
Clarifies new versus used |
Missing when selling refurbished goods |
Only mark up ratings that are genuinely visible on the page, and never invent review counts. Fabricated review markup is a manual-action risk.
Canonical and variant handling
Decide whether each variant gets its own indexable URL or canonicalises to a parent. For colour or size variants that share a description, point variant URLs to the main product URL with a canonical tag so you do not split authority or cannibalise yourself. Give a variant its own page only when it has materially different demand and content, such as a distinct model. On Shopify, avoid letting ?variant= query URLs get indexed; on WooCommerce, keep variation URLs canonicalised to the parent product.
Out-of-stock handling
Do not delete or 404 a temporarily out-of-stock product, because you lose the ranking you built. Instead:
- Keep the page live and set availability to OutOfStock in schema
- Show a clear restock note or a back-in-stock email capture
- Surface in-stock alternatives so the visitor stays on site
- For permanently discontinued items, 301 redirect to the closest live product or the parent collection, not to the homepage
Trust and user-generated content
Reviews and ratings
Reviews add fresh, unique, keyword-rich content to a page that rarely changes, and they unlock the star snippet through AggregateRating. Use a review app (Shopify) or plugin (WooCommerce) that renders review text in the page HTML, not only inside a JavaScript widget Google may not read. Request reviews by email a few days after delivery, and display both the average and the count.
Questions and answers
A Q&A block answers real pre-purchase objections (sizing, compatibility, delivery time, GST, warranty) and naturally captures long-tail queries. It also reduces support load. Keep questions and answers in crawlable HTML. Reducing pre-purchase friction this way ties directly into cutting cart abandonment.
Internal linking
Product pages should never be orphans. Build links in from multiple directions:
- From collections: every PDP should sit in at least one well-linked collection or category page, with descriptive anchor text on the product card.
- Related products: show complementary or similar items, and keep these as real crawlable links rather than a script-only carousel.
- From content: link buying guides and blog posts to the relevant PDPs using the product name as anchor text.
- Breadcrumbs: the breadcrumb itself is an internal link that reinforces hierarchy and matches your Breadcrumb schema.
As inventory changes, audit for orphaned PDPs that lost their only link. For the full site-wide method, see our complete SEO checklist.
Performance
Core Web Vitals on product pages
PDPs are usually the heaviest pages on a store because of large galleries, review widgets, and tracking scripts, and they are the pages most likely to be opened on mobile. Optimise the three Core Web Vitals:
- LCP (load): the hero product image is almost always the LCP element. Preload it, serve it at display size, and do not lazy-load it. Aim under 2.5 seconds.
- INP (interactivity): defer non-critical third-party scripts (chat, reviews, social pixels) so taps respond quickly.
- CLS (visual stability): reserve fixed dimensions for images, the price block, and the add-to-cart button so nothing jumps as the page loads.
Background and diagnosis steps are in Core Web Vitals explained.
Mobile
Most Singapore ecommerce traffic is mobile, and Google indexes the mobile version. Confirm the add-to-cart button is reachable without zoom, the price and stock status are visible above the fold, the review section renders on mobile, and tap targets are not cramped. Test the actual PDP template on a mid-range phone, not just a desktop preview.
Local Singapore signals
This is where most overseas checklists leave money on the table. Local intent and trust signals lift both conversion and relevance for Singapore queries.
- S$ pricing: display prices in SGD with the S$ symbol and set priceCurrency to SGD in schema, so the SERP and Shopping surfaces show the right currency.
- GST display: if you are GST-registered, state whether the displayed price includes GST. A line such as “Price includes 9% GST” removes checkout surprise and reduces abandonment.
- Local delivery: show realistic Singapore delivery timeframes and any free-delivery threshold near the price and in the meta description.
- Returns: state your returns window and process plainly. Singapore shoppers compare return policies before buying high-consideration items.
- Local relevance: where natural, reference Singapore use cases in the description (climate, sizing, voltage and plug type for electronics).
If location-based discovery matters to your category, pair this with local SEO fundamentals.
Measurement
Set up three layers before you start optimising so you can prove the lift.
- GA4 events: confirm the ecommerce events fire on PDPs: view_item, add_to_cart, begin_checkout, and purchase, each with item ID, price, and currency. This ties organic landings to revenue, not just sessions.
- Search Console: track impressions, clicks, and average position per PDP URL, and watch the Products report under Enhancements to catch invalid schema before it costs you rich results.
- Rank tracking: track priority product and category keywords on Singapore (google.com.sg) and segment mobile from desktop, since the two can diverge.
Review monthly. A PDP gaining impressions but few clicks usually needs a better title and meta; one with clicks but no conversions usually has a content, price, or speed problem.
Master checklist
Copy this into your project tool and tick through it per product template.
- Slug is short, lowercase, descriptive, and stable
- Unique title tag near 50 to 60 characters, product-first
- Unique meta description near 140 to 155 characters with a local hook
- Single H1 equal to the product name
- H2 sections for description, specs, shipping, reviews, and Q&A
- Description rewritten in your own words, no manufacturer duplicate
- Image filenames descriptive before upload
- Alt text on every image, natural and specific
- Images compressed and served as WebP or AVIF
- Hero image not lazy-loaded; gallery images lazy-loaded
- Product plus Offer plus AggregateRating plus Breadcrumb JSON-LD valid
- priceCurrency set to SGD and price updates with live price
- availability reflects real stock state
- Variants canonicalised or given distinct optimised pages
- Out-of-stock pages kept live; discontinued items 301 redirected
- Reviews visible in HTML, average and count shown
- Q&A block in crawlable HTML
- Linked from at least one collection and from related products
- No orphaned PDPs after catalogue changes
- LCP under 2.5 seconds; CLS controlled; scripts deferred
- Mobile template checked on a real device
- S$ pricing and GST status shown clearly
- Local delivery timeframe and returns window stated
- GA4 ecommerce events firing with item data
- Search Console Products report clean
- Priority keywords tracked on google.com.sg, mobile and desktop
Key takeaways
- Product pages carry the highest buying intent, so optimise them before scaling ad spend.
- Rewrite every description; pasted manufacturer copy is the most common reason PDPs cannot rank.
- Complete, accurate Product plus Offer plus AggregateRating plus Breadcrumb schema unlocks rich results, but only mark up what is visible.
- Keep out-of-stock pages live and canonicalise variants to avoid losing earned authority.
- Singapore signals (S$, GST, local delivery and returns) lift both relevance and conversion, and overseas checklists ignore them.
- Track GA4 events, Search Console, and Singapore rankings so you can prove and direct each improvement.
FAQ
Do I need different SEO for Shopify versus WooCommerce product pages?
The principles are identical, but the controls differ. Shopify fixes the /products/ prefix and emits theme schema you must validate, while WooCommerce gives permalink control and relies on plugins for SEO fields and schema. See our Shopify SEO services and WooCommerce SEO service.
Should each product variant have its own URL?
Only when the variant has genuinely different content and demand. For colour or size variants that share a description, canonicalise to the parent product so you do not split authority or cannibalise rankings.
How do I keep a star rating in Google search results?
Use valid AggregateRating markup backed by reviews that are visible on the page, and never fabricate counts. Invisible or invented review markup risks a manual action and removal of the rich result.
What should I do with out-of-stock products?
Keep temporarily out-of-stock pages live, set availability to OutOfStock, and offer alternatives or a restock alert. Only 301 redirect when a product is permanently discontinued.
Does displaying GST affect SEO?
Not directly, but a clear “price includes 9% GST” line reduces checkout surprise and abandonment, improving the engagement and conversion signals that influence store performance.
How long until product page SEO shows results?
Schema fixes can surface in days, but ranking and traffic gains usually build over weeks to a few months as Google re-crawls and reviews accumulate. Track Search Console impressions weekly to see movement early.
How often should I re-run this checklist?
Quarterly per template, plus a quick pass whenever you add a product line, change pricing, or update your theme.
Get your product pages ranking
If your catalogue is large or your theme is fighting you on schema and speed, a structured audit pays for itself fast. MediaPlus builds and optimises Singapore online stores end to end, from ecommerce website development to ongoing SEO services in Singapore. If you want a search-ready storefront and product pages built to convert, talk to us about your ecommerce SEO.



