Ecommerce SEO Singapore
Your catalogue is the problem to fix first, not your keywords. A store with 1,800 products does not have a ranking problem yet; it has a crawling and indexing problem, and everything downstream of that is guesswork until it is fixed. Ecommerce SEO Singapore work at Upscaled starts with the catalogue, the filters and the URL space, then the keywords.
Shopify, WooCommerce and Magento, optimised as they are. The calculator on the right is the arithmetic your store performs every time Googlebot arrives.
Arithmetic, not an estimate: (values + 1) per group, multiplied, times the sort orders. The second number barely moves; that is the whole argument for rules over rewrites.
Ecommerce SEO is the work of getting a store’s category and product pages found in Google without paying for every click. It differs from ordinary SEO because a store exposes thousands of URLs nobody asked for: filters, sort orders, variants, out-of-stock pages. So the order of work is reversed: control what Googlebot crawls first, make the category pages the money pages second, and only then write for keywords.
Ecommerce SEO Singapore starts with a crawl problem, not a keyword problem
A brochure site has about forty URLs; every one can be crawled in a morning. A store with 1,800 products has 1,800 product URLs, forty category URLs, and, the moment filters are switched on, more than two million others nobody asked for. Until the crawl is under control, keyword research is a plan for pages Google is not currently looking at.
Need the store built rather than fixed? That is ecommerce website design Singapore. Not a store at all? Start at SEO services Singapore.
Before the rules: 1,702 crawlable URLs for every page that deserves to rank. Across forty categories, 2,246,400 URLs against 1,800 products.
Category pages are the money pages. Product pages are not.
Commercial search demand sits at the category level: people search for a class of thing, “ceramic dinner plates”, “office chair with lumbar support”, and buy after comparing. Queries that name a specific model are usually already owned by the manufacturer or a marketplace. Category URLs also survive merchandising; a product URL dies with the SKU, taking its authority with it. Three rules, and they are not negotiable.
Real editorial content, above and below the grid
Roughly 150 words of orientation above the fold: what the category contains, how the options differ, what most Singapore buyers choose. A real buying guide below the grid, where it cannot push products off the first screen.
Not a sentence above the grid.
The URL does not move when the range does
A category URL never changes because merchandising changed. Reorganise the range and you remap internally; you do not mint a new slug.
Authority accrues to the URL, not the range.
Eight products, or no category
We do not build a category for fewer than eight products. Below that it is a thin page competing with your own better ones.
Fewer, stronger categories.

Product copy, variants, and the out-of-stock URL
Most Singapore stores publish the manufacturer’s description verbatim, which gives Google no reason to prefer your URL over the nine other retailers selling the identical SKU with the identical paragraph. The fix is not “write more”; it is to write what only you can write: local sizing advice, what it is used for here, what arrives in the box, what breaks first, which alternative in your own range is the better buy.
We do not write original copy for 1,800 products, and neither should anyone else. The SKUs carrying the most margin and the most demand, typically the top 40 to 60, get it. Everything else gets a structured specification table, real photography and one differentiator line. A spec table Google can parse beats 200 words of padding.
Variants: one URL per variant only where people genuinely search the variant, which usually means colour and size in fashion and almost nothing else; otherwise one product URL with selection on the page and variant structured data describing the relationship. Out of stock: if the SKU is coming back, the URL stays live, returns 200 and updates its availability; if it is gone for good, serve 404 or 410 and redirect nothing. Never a redirect to the category or the home page.
Schema, platform, speed and depth: where the catalogue leaks
Each platform hands you a different set of problems, and knowing which ones are fixable saves months. Click a tab.
Two classes, and most stores pick the wrong one
Google splits product markup into product snippets, for pages where a visitor cannot buy, and merchant listings, for pages where they can buy from you. A Singapore store selling from its own checkout wants merchant listings.
- An Offer on every product page with price, priceCurrency SGD and a real availability value driven by the stock system, never a hardcoded InStock
- Variant markup where variants exist; return policy and loyalty programme nested under Organization, not bolted onto each product
- If you run a Merchant Center feed, keep the two consistent: a page price that disagrees with the feed suppresses the enhancement for both
Two paths to the same product
Shopify exposes the same product at /products/
- Link hygiene: internal links and grids pointed at the canonical path
- App-injected scripts no theme setting removes, audited one by one
- robots.txt.liquid is editable but not unlimited; the rules that fit go there
The fastest generator of URLs on this list
Layered navigation adds ?filter_* parameters, attribute and tag archives spawn pages nobody asked for, and ?orderby= and ?add-to-cart= are crawlable by default.
- Attribute and tag archives switched off before anything else
- Parameter rules for filter_*, orderby and add-to-cart
- Canonical rules on the archive types that stay
The most control, the least forgiveness
Layered navigation adds a parameter for every attribute a shopper selects, so each filter needs an explicit rule: indexable, canonicalised or blocked. Configurable products and their simple children can both resolve at their own URLs.
- Every filter given an explicit rule
- Simple child products set to not visible individually
- Canonical tags for categories and products switched on; they are off in a default install
Depth is physical
A product six clicks from the home page is as hard for Googlebot to reach as a box on the top shelf at the far end of the aisle. Every product should sit within three clicks; on most stores we review a meaningful share sits at five or six, reachable only by paginating deep.
- Breadcrumbs everywhere, feeding a BreadcrumbList Google displays instead of a raw URL
- Related-product blocks curated or rules-driven, never random
- Pagination: each page its own canonical, real <a href> links behind “load more”, no page numbers after a #; rel=next/prev does nothing now, and reusing titles across a sequence is fine
Why a catalogue fails Core Web Vitals differently
Google’s thresholds are public, measured at the 75th percentile of real page loads, split by mobile and desktop. A brochure site fails them in one obvious way. A category page fails them in three less obvious ones.
How long the main element may take to appear. On a category page it is rarely the hero; it is the first product tile in a grid of twenty-four to sixty images competing for the same connections.
How long a tap may take to produce a visible response. On a store it is the filter widget, re-rendering sixty tiles on the main thread after every chip.
How far the page may move while settling. On a store it is almost never the layout; it is price, stock badges, discount flashes and currency switchers injected after first paint.
Two things make the LCP worse: lazy-loading libraries applied globally, which defer the above-the-fold tile as well, so the element that defines your LCP is deliberately delayed; and themes that serve a 1,600-pixel source file into a 320-pixel slot on mobile. We set a weight and request budget per category template before touching a single image, then measure against it. A rule you can fail is worth more than a score you can argue about.
The first 90 days, with dates attached
Reporting is monthly, against the days 1–14 numbers. You work with the same people throughout: 8+ years of combined experience across the team, not a handover to an account manager after the pitch.
Measure
Full crawl of the store, a server log sample, a Search Console export of every URL marked discovered-not-indexed, and the URL-space arithmetic from the calculator run against your real filter groups.
What you holdYou get the numbers before any recommendation.Stop the bleeding
Parameter and robots rules, canonical corrections, the sitemap rebuilt to contain only indexable URLs, 404 and 410 handling for dead SKUs, empty filter combinations made to return a proper not-found.
What you holdCrawl waste drops here.Build the money pages
Category template rewritten with real editorial content, breadcrumbs and BreadcrumbList, internal link depth pulled back to three clicks, merchant-listing schema deployed across the catalogue.
What you holdThe hierarchy, then the leaves.Speed and copy
Category-template performance budget enforced, image pipeline corrected, original copy written for the highest-margin SKUs. First movement on category terms is normally visible in this window.
What you holdRevenue attribution is not; we will not pretend otherwise.How ecommerce SEO Singapore is measured, in that order
Three rows, read monthly against the days 1–14 baseline. Crawl first, because nothing below it moves until it does; revenue last, because it is the slowest to attribute and the easiest to overclaim. Click a row.
From Search Console and the server log, not a tool score. Nothing below this row moves until it does.
Category terms before product terms; impressions before clicks, because impressions move first.
GA4 ecommerce events, in your property, tagged so organic is separable from paid and direct.
Catalogues we have worked on, and what moved
Four Singapore sites where the build and the search work were one plan. Every figure below is already published on our portfolio page, pulled from Search Console and PageSpeed Insights, data as of August 2026.
↗GreenGarden
Integrated facilities management, greengarden.sg. Website and SEO: 65 tracked keywords reached Google page 1; Search Console impressions grew to 435K with 3.16K clicks.
↗Fortified
Renovation and reinstatement contractor, fortified.com.sg. Website and SEO: 81 tracked keywords reached page 1; impressions grew to 253K and clicks to 3.53K.
↗Roofers
Roofing and awning contractor, roofers.com.sg. Website and SEO: 72 tracked keywords reached page 1; impressions climbed to 49.5K with 407 clicks.
↗fomo.energy
Rent-to-own solar on a brand-new domain, fomo.energy. Website and SEO: 35 keywords on page 1, 12K impressions and 308 clicks; mobile PageSpeed 48 to 76.
Ecommerce SEO Singapore: frequently asked questions
Q.01How much does ecommerce SEO cost in Singapore?
+
Q.02How long before a new product page ranks?
+
Q.03Should I fix category pages or product pages first?
+
Q.04Do I need unique descriptions for every product?
+
Q.05Can you add star ratings to my Google listing?
+
Q.06Does this still work if I also sell on Shopee and Lazada?
+
Q.07Can you work on my Shopify store, or do I have to migrate?
+
Q.08Will the changes break my store or its design?
+
Q.09Who owns the store, the accounts and the data?
+
Q.10Who is this not for?
+
Q.11Should I run ecommerce SEO or Google Shopping ads?
+

Send us one category and one product URL
That is enough to tell you whether your problem is crawl, content or schema, and which of the three is costing you the most right now. You get the answer in writing, with the URL count your filters are minting, whether or not you engage us.