
Your catalogue is the ranking problem, 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.

A brochure site has about forty URLs. Every one of them can be crawled in a morning. An online store with 1,800 products has 1,800 product URLs, forty category URLs, and — the moment filters are switched on — several hundred thousand more that nobody ever asked for.
That difference changes the order of the work. On a small site you research keywords first. On a store you cannot, because Google has not finished reading the catalogue. Until the crawl is under control, keyword research is a plan for pages Google is not currently looking at.
Google's own crawl-budget guidance is written for sites with a million-plus unique pages, or ten thousand-plus pages that change daily. A 1,800-product Singapore store sounds comfortably below that line. It is not, once faceted navigation is counted. The arithmetic is in the next chapter and it is not close.
So the first month here is unglamorous: server logs, parameter rules, canonicals, sitemaps, HTTP status codes. Nothing to show the board. Everything to show Googlebot.
If you need the store built rather than fixed, that is a different engagement — see ecommerce website design singapore. If your site is not a store at all, start at seo services singapore instead.
A demo category on a store of 1,800 products across 40 categories. Tap the chips the way a shopper would.
/collections/running-shoes/?size=uk-7&colour=black&brand=brand-a&price=under-100&material=mesh&sort=price_asc
6 × 9 × 13 × 5 × 4 × 4 = 56,160
Values plus one for the un-filtered state, multiplied across every group a shopper can switch on. The sort menu multiplies by its four orders.
Arithmetic only — the multipliers above are the filter values themselves, nothing is benchmarked or estimated. Every number in this simulator is also written out in the paragraphs below, so it survives with JavaScript switched off.
The simulator above is the arithmetic your store already performs every time Googlebot arrives.
Take one category. It carries five filter groups: size with 5 values, colour with 8, brand with 12, price band with 4, material with 3. Each group can be on or off and they combine freely, so the URL space multiplies: 6 × 9 × 13 × 5 × 4 = 14,040 distinct filtered URLs. Add a sort menu offering four orders and it becomes 56,160 — from one category page. Build forty categories the same way and the store exposes 2,246,400 crawlable URLs against 1,800 real products: 1,248 URLs per product for Googlebot to wade through before it reaches the one you want ranked.
Now collapse it. Switch the chips off and watch the counter fall. Allow indexing of single-facet views only and you get 5 + 8 + 12 + 4 + 3 = 32 filtered URLs, plus the clean category page: 33. Across forty categories, 1,320. A 1,702-to-1 reduction on one category, achieved with robots.txt patterns, canonical rules and a decision about which anchors may carry a filter parameter at all.
Three specifics most agencies skip, all of them straight out of Google's documentation. A filter combination that returns no results should serve a 404 at the URL where it was encountered, not a redirect to a generic error page. noindex is the wrong instrument for crawl budget, because Googlebot still has to fetch the page to discover the tag. And rel="nofollow" on filter links only works if every anchor pointing at that URL carries it — one forgotten link in a footer undoes the entire rule.
Crawl control is the least photogenic part of ecommerce seo singapore work and the part that decides everything after it.
We will run your live category templates through the same arithmetic and send you the number, the filter groups causing it, and the three parameter rules that would cut it fastest. No obligation attached to the number.
Commercial search demand sits at the category level. People search for a class of thing — "ceramic dinner plates", "office chair with lumbar support" — and they buy after comparing. Queries that name a specific model are usually already owned by the manufacturer's own site or by a marketplace listing, and you will be arguing for third place on your own product.
Category pages also survive. Merchandising changes constantly; a category URL outlives the SKUs inside it. A product URL dies when the product is discontinued, taking whatever authority it had with it. Effort spent on category pages compounds; effort spent on individual SKUs evaporates at the next range refresh.
Three rules we apply, and they are not negotiable:
A category page needs real editorial content, not a sentence above the grid. Roughly 150 words of orientation above the fold — what the category contains, how the options differ, what most Singapore buyers choose — plus a real buying guide below the grid, where it cannot push products off the first screen.
A category URL never changes because merchandising changed. Reorganise the range and you remap internally; you do not mint a new slug.
And we do not build a category for fewer than eight products. Below that it is a thin page competing with your own better ones.

Most Singapore stores publish the manufacturer's description verbatim. That gives Google no reason at all to prefer your URL over the other nine 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 actually 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. We write it for the SKUs carrying the most margin and the most search demand — typically the top 40 to 60 — and everything else gets a structured specification table, real photography and a 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 variant selection on the page and variant structured data describing the relationship.
Out-of-stock URLs are where stores lose the most accumulated value. If the SKU is coming back, the URL stays live, returns 200 and updates its availability — it keeps its links and its history. If the SKU is gone for good, serve 404 or 410 and redirect nothing: Google treats a 404 as a strong signal not to request that URL again, which is exactly what you want.
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, whether or not you engage us.
Google splits product markup into two classes, and picking the wrong one is why a lot of stores have valid schema and no rich result. Product snippets are for pages where a visitor cannot buy directly — editorial reviews, comparison pages. Merchant listings are for pages where they can buy from you. A Singapore store selling from its own checkout wants merchant listings.
That means an Offer on every product page carrying price, priceCurrency set to SGD, and a real availability value driven by the stock system rather than a hardcoded InStock. Add variant markup where variants exist, and nest your return policy and any loyalty programme under Organization rather than bolting them onto each product. If you also run a Merchant Center feed, keep the two consistent: Google cross-checks them, and a page price that disagrees with the feed price suppresses the enhancement for both.
The house rule, and it costs us work: we will not add aggregateRating or Review markup to buy a row of stars. If your store has genuinely collected reviews through a system that can be audited, we mark them up. If it has not, we do not invent a rating. Fabricated review markup is a structured-data policy violation and the fastest known way to lose every rich result you already had.
Schema is the cheapest win available in ecommerce seo singapore work, and the one most commonly botched by doing too much of it.
Upscaled optimises the store you already have. Each platform hands you a different set of problems, and knowing which ones are fixable saves months.
Shopify exposes the same product at two paths — /products/<handle> and /collections/<collection>/products/<handle>. The canonical usually resolves to the first, but your own internal links and collection grids frequently point at the second, so every internal link you place is feeding a URL that then passes its signal elsewhere. Add app-injected scripts that no theme setting removes, and a robots.txt.liquid that is editable but not unlimited, and the work is mostly link hygiene and template surgery.
WooCommerce generates URL space faster than anything else 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. Most Woo stores need the archive types switched off before they need anything else.
Magento gives you the most control and the least forgiveness. Layered navigation parameters must be governed explicitly, and nothing is safe by default.
What we will not do is recommend a migration to escape a problem that a rules file would solve. If you are still choosing a platform, or the store needs building rather than fixing, that conversation belongs with the build team, not here.
Google's thresholds are public: Largest Contentful Paint within 2.5 seconds, Interaction to Next Paint at 200 milliseconds or less, Cumulative Layout Shift at 0.1 or less — measured at the 75th percentile of real page loads, split by mobile and desktop.
The ceiling for how long the main element may take to appear, at the 75th percentile of real loads.
The ceiling for how long a tap may take to produce a visible response on screen.
The ceiling for how far the page may move under the reader while it is still settling.
A brochure site fails LCP in one obvious way: a heavy hero image. You preload it and you are done. A category page fails differently and it is rarely the hero. The LCP element is usually the first product tile in a grid of twenty-four to sixty images, all competing for the same connections. Then two things make it worse. Lazy-loading libraries applied globally defer the above-the-fold tile as well, so the element that defines your LCP is deliberately delayed. And themes routinely serve a 1,600-pixel source file into a 320-pixel slot on mobile.
CLS on a store is almost never the layout. It is price, stock badges, discount flashes and currency switchers injected after first paint, each one pushing the grid down. INP is the filter widget: re-rendering sixty tiles on the main thread after every chip tap.
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.
If your Search Console shows thousands of URLs discovered and not indexed, the cause is usually three lines of configuration, not a content shortfall. We will tell you which three before you commit to anything.

Every product should sit within three clicks of the home page. On most stores we review, a meaningful share of the range sits at five or six, reachable only by paginating deep into a category — and those are precisely the products that never get crawled often enough to rank.
Breadcrumbs do more work here than anywhere else on the web: they give Google the hierarchy, they give users the way back up, and they feed a BreadcrumbList that Google will display instead of a raw URL. Related-product blocks should be curated or rules-driven, not random — a random block builds a link graph with no shape.
Pagination is where documented guidance and agency habit diverge most sharply, so here is what Google actually says. It no longer uses rel="next" and rel="prev"; those tags do nothing for Google now. Each paginated page must have its own canonical — pointing every page back to page one is a common and expensive mistake. Googlebot does not click buttons, so "Load more" and infinite scroll need real <a href> links behind them or the deeper products are invisible. Page numbers must not live after a #, because fragments are ignored. And reusing the same title and description across a paginated sequence is explicitly fine, which saves a great deal of pointless template work.
Days 1–14 — Measure. Full crawl of the store, server log sample, Search Console export of every URL marked discovered-not-indexed, and the URL-space arithmetic from Chapter 02 run against your real filter groups. You get the numbers before you get any recommendations.
Days 15–30 — Stop the bleeding. Parameter and robots rules, canonical corrections, sitemap rebuilt to contain only indexable URLs, 404 and 410 handling for dead SKUs, and empty filter combinations made to return a proper not-found. This is where crawl waste drops.
Days 31–60 — 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.
Days 61–90 — 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; revenue attribution is not, and we will not pretend otherwise.
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. Reporting is monthly, against the numbers from days 1 to 14. Ecommerce seo singapore engagements at Upscaled are scoped after a catalogue review, never sold off a price list.
Six honest exclusions. Every one has cost us a pitch at some point.
It will not beat a marketplace on a brand-plus-model query. Search a specific SKU by name and you are competing with the manufacturer's own site, Shopee, Lazada and Amazon on a query where the buyer has already decided. Category demand is winnable. That query generally is not.
It will not fix margin. Ranking a loss-making SKU loses money faster and more reliably. If the unit economics do not work, organic traffic makes the problem bigger.
It will not get you quoted inside AI answers. Being cited in an AI Overview or by an assistant is a different discipline with a different asset mix — that work lives at ai seo singapore.
It will not touch your checkout, payment gateway or delivery rates. We will tell you when conversion, not ranking, is the constraint. We will not invoice you for SEO to fix it.
It is over-engineering below about 50 SKUs. A small catalogue has no crawl-budget problem. We will say so on the first call rather than sell you a programme you do not need.
And we do not promise a position. Nobody can, and an agency that does is telling you something about how it will behave later.
It depends on catalogue size and platform, and we quote after a catalogue review rather than from a price list. The two variables that move the number most are the number of category templates that need rebuilding and whether your filter system can be governed by rules or needs template work. Ecommerce seo singapore engagements are scoped monthly, with the first month weighted towards measurement.
Assume six to twelve weeks for a product page on a store whose crawl is already healthy, and considerably longer if it is not — because the page has to be discovered before it can be evaluated. Category pages move sooner than product pages. Any agency giving you a date without first looking at how often Googlebot currently visits your store is guessing.
Category pages, almost always. They carry the commercial search demand, they survive merchandising changes, and they are the pages that distribute crawl attention to the products beneath them. Product pages matter, but a product page inside a category Google rarely visits is optimised in the dark. Fix the hierarchy, then the leaves.
No, and trying is usually a waste of budget. Original copy earns its keep on the SKUs with real search demand and real margin — typically 40 to 60 products. For the rest, a structured specification table, genuine photography and one line explaining how the item differs from the next one along will outperform padded paragraphs rewritten from the supplier's PDF.
Only if your store has genuinely collected reviews through a system that can be audited. We do not add aggregateRating or Review markup to a store that has not collected reviews. Fabricated review markup breaches Google's structured-data policies, and a manual action removes every rich result you have, not just the stars.
Yes, and the marketplace listings change the strategy rather than cancel it. You will rarely beat a marketplace on an exact model query, so the work concentrates on category-level demand, comparison intent and the queries where buying direct is obviously better. The goal is owning the searches that happen before a shopper opens a marketplace app.
We work on Shopify, WooCommerce and Magento stores as they are. Migration is a build decision with real costs, and we will not recommend one to solve a problem that a robots file, a canonical rule and a template change would fix. If the store genuinely needs rebuilding, that is a separate engagement with separate scope.
Your store URL, the number of live SKUs and categories, the platform and theme, read access to Search Console and Analytics, and the list of filters on your largest category. That is enough for the URL-space arithmetic and a crawl sample. Anyone quoting a monthly fee before seeing your filter configuration has not looked at the thing that determines the workload.
Send us your store URL and your largest category. We will come back with your real crawlable URL count, the filters causing it, and the three fixes that move first. Ecommerce seo singapore work is quoted after that review — never before it.