SEO Lesgo Media · 2026
- 3-6 monthsbefore rankings settle
- 2.5smobile LCP target
- RM1,000-RM2,500basic monthly SEO scope
Store owners arrive with the same complaint. They have 400 products indexed, Search Console shows impressions, and almost nothing converts.
Store SEO does not work like service-site SEO. A plumber has ten pages and one keyword each. A shop has one URL per SKU, hundreds of near-identical pages generated by colours and sizes, and a filter system quietly multiplying all of it.
Here is what is different about ranking a shop, with the WooCommerce and Shopify specifics called out where they matter.
Category pages are the real ranking assets
People do not search for SKU-2214-BLK. They search for “baju kurung moden”, “office chair Malaysia”, “tudung bawal murah”. Those are category queries, and the page that should answer them is your category or collection page.
Most Malaysian stores treat that page as a grid and nothing else. The title tag repeats the internal category name, there is no copy and no internal links. Google is left with thumbnails and prices.
The fix is unglamorous. Give each commercial category 250 to 500 words placed under the product grid so it does not push products below the fold. Answer what buyers want before they filter: which sizes or specs exist, what price bands are normal, and what shipping costs to Sabah and Sarawak.
What a category page needs
- A title tag built on the search phrase, not the internal category name
- 250 to 500 words of real copy, placed below the grid
- Links out to the subcategories sitting under it
- A stable URL that does not change when you re-sort the menu
In WooCommerce, category descriptions live under Products, Categories, and many themes print only the short version. Shopify has the field by default, but most themes output it above the grid where it gets truncated. Check what your theme renders.
Product pages when all you have is the supplier’s description
Resellers and dropshippers hit this immediately. The supplier sends a spec sheet, you paste it, and so do the other forty stores selling the same item. Google now has forty pages with identical body copy, and it will not pick the newest store.
You cannot out-write a spec sheet by rewording it. Add what the supplier cannot: local context. Malaysian sizing notes, whether the plug is a UK three-pin, how the material behaves in humidity, real delivery timing to East Malaysia, what the warranty means on an imported unit.
Two or three original paragraphs per product is enough. Do it for the products that actually sell, not all 900. Sort by revenue, take the top 50, write those properly, and leave the long tail on supplier text with a self-referencing canonical.
A store with 50 well-written product pages and 850 thin ones performs better than a store with 900 uniformly thin ones. Google judges the page, it does not average the site.
Variants and filters quietly generate thousands of junk URLs
This is the failure that sinks the most Malaysian stores, and owners rarely see it because nothing looks broken on the front end. A shirt in 5 colours and 4 sizes is 20 combinations. Add a filter sidebar with brand, price band and material, and every combination can produce a crawlable URL. Google’s crawling documentation says this directly: crawling faceted navigation URLs tends to cost sites large amounts of computing resources because of the very large number of possible filter combinations.
Google’s stated options are to disallow the parameters in robots.txt, serve filters behind URL fragments since Search generally does not crawl fragments, put rel=”nofollow” on every link pointing at a filtered URL, or canonicalise back to the unfiltered page, which they call the weaker long-term choice. They also say to return a real 404 for empty filter combinations rather than redirecting to an error page.
| Source of junk URLs | WooCommerce | Shopify |
|---|---|---|
| Filters | ?filter_colour= from most filter plugins |
?filter.p. on collections, edit robots.liquid |
| Sorting | ?orderby= on every category |
?sort_by= on every collection |
| Variants | Variations share one product URL, which is safe | ?variant= on the same URL, canonical handles it |
| Duplicate paths | Optional /product-category/ permalink base |
/collections/x/products/y duplicating /products/y |
Shopify’s collection-scoped product URLs are the one most people miss. Shopify canonicalises to the short version, so leave that alone and make sure your internal links and sitemap use the short form too.
Out-of-stock and discontinued products need a decision, not a delete
The reflex is to delete the product when stock runs out. That throws away every link and ranking the page earned.
- Temporarily out of stock. Keep the page live and indexable, set
availabilitytoOutOfStockin the schema, add a back-in-stock email capture. Position holds, traffic keeps arriving. - Discontinued but replaced. 301 to the replacement if it is genuinely the same thing in a new model. If it is only loosely similar, redirect to the category instead.
- Discontinued with no replacement. Keep the page, say so in the copy, link to the closest three alternatives. Only 404 it when the page has no links and no traffic.
- Seasonal. Never delete. A Raya page that survives twelve months rebuilds its ranking far faster than a fresh URL every season.
On WooCommerce, hiding out-of-stock items under Products, Inventory makes those pages return a 404, so turn that setting off. On Shopify, unpublishing from the Online Store channel does the same. Archive rather than delete, and keep the URL responding.
Product schema and review markup, as Google actually requires it
Store owners either do nothing here, or install three plugins that all output competing markup. Google’s merchant listing documentation is specific about what is required.
On the Product: name, image, and offers as a single Offer where you are the seller, not an AggregateOffer. Inside the Offer: price, which must be greater than zero, and priceCurrency as a three-letter ISO 4217 code, so MYR. Everything else is recommended rather than required, including sku, brand.name, availability, hasMerchantReturnPolicy and shippingDetails.
For variants, Google documents a ProductGroup parent carrying productGroupID, variesBy and hasVariant, with each variant a Product holding its own sku. Most stores do not need this. It matters when variants have meaningfully different prices.
Review markup has one rule people break constantly. Google’s review snippet guidance says ratings must be sourced directly from users and that you must not aggregate reviews or ratings from other websites. Pulling your Shopee star rating onto your own product page is exactly what they prohibit.
Internal linking from content to category pages
Most stores have a blog that links nowhere useful. Articles point at the homepage, occasionally at one product, almost never at the category that should be ranking. That wastes the only link equity a small store fully controls.
Write content that sits one step before the purchase and point it at the category. A guide on choosing mattress firmness links to the mattress category, not to one mattress. The article picks up informational traffic, the category collects the links, and the category is what ranks commercially.
Three rules. Link with the phrase you want the category to rank for, not “click here”. Give every category at least three inbound internal links from content. Keep top-selling categories within two clicks of the homepage, because menu depth tracks how often Google recrawls a page. Our breakdown of on-page versus off-page SEO covers why this outweighs off-site work at small scale.
Shopee and Lazada outrank your store for your own product names
This comes up in every Malaysian store audit. You search your own product name and page one is Shopee, Lazada, TikTok Shop, then maybe you at position eight.
You will not beat them on the generic product name. Those domains carry authority, review volume and crawl frequency you cannot match on a RM1,500 monthly budget. Pretending otherwise wastes a year.
Pick queries where marketplace listings are weak instead. They are thin on anything requiring explanation: comparisons, sizing guides, compatibility, warranty and after-sales. They have no physical presence, so city-modified and “near me” searches are open. And they cannot rank for your brand.
If you already sell on Shopee, that listing will rank whether you like it or not, so put your brand name in it and treat the marketplace as a discovery channel feeding your own site. Adding a physical location and working your Google Business Profile opens a set of searches no marketplace can enter.
Images and site speed on a store carrying thirty plugins
Product photography is the heaviest thing on a store. The usual state is 2MB JPEGs straight from the photographer, uploaded at 3000px, displayed at 400px.
Three things matter, in order: serve the right dimensions, convert to WebP, lazy-load below the fold. Alt text matters for accessibility and image search, not for ranking the product page. Nobody renames 900 files by hand, so on WooCommerce use a bulk converter such as ShortPixel or Imagify. On Shopify the CDN handles conversion, leaving you to upload at sane dimensions and stop apps injecting extra sizes.
Aim for mobile largest contentful paint under 2.5 seconds on a category page, tested on 4G rather than office fibre. WooCommerce gives full control and full responsibility: cart fragments run sitewide by default and commonly slow category loads. Shopify removes the server question but adds app scripts you cannot always defer, where the honest fix is deleting apps. The decisions made at build stage decide how much of this you are stuck with.
Google requires product images to be crawlable and indexable. If a CDN rule or hotlink protection blocks Googlebot from your image URLs, your Product markup fails and merchant listings disappear.
Where the SEO work differs between WooCommerce and Shopify
Neither platform ranks better than the other. They fail differently, and knowing which failure mode you own saves months.
| Task | WooCommerce | Shopify |
|---|---|---|
| Titles and meta | Yoast or Rank Math, full template control | Theme templates, editable but limited |
| URL structure | Fully controllable, category base removable | Fixed /products/ and /collections/ prefixes |
| robots.txt | Direct file edit | Editable via robots.liquid |
| Product schema | Plugin-generated, often duplicated | Theme-generated, usually one clean copy |
| Content | WordPress, strongest blog available | Basic blog, workable but limited |
| Speed ceiling | Depends on hosting and plugin discipline | Good baseline, degrades with every app |
| Main risk | Plugin conflicts, duplicate markup, junk URLs | Fixed URL patterns, limited technical access |
If you are still choosing, the cost and control trade-off is in our WooCommerce versus Shopify comparison. If the store already exists, the platform is not your bottleneck. Nobody having written the category pages is.
The first ninety days on a store that has never had SEO
- Week 1: count the damage. Crawl the store and compare indexable URLs against your product count. More than double your products plus categories means filters are the first problem.
- Weeks 2 to 3: close the taps. Handle filter and sort parameters, fix out-of-stock behaviour so pages stop 404ing, submit a clean sitemap.
- Weeks 4 to 6: write the top categories. Eight categories carrying the most revenue, each with a real title tag and 250 to 500 words.
- Weeks 6 to 9: schema and images. One source of Product markup, validated, plus a bulk conversion of the image library.
- Weeks 9 to 12: start content. Four articles sitting before the purchase decision, each linking into a category with its target phrase.
Expect first movement around week six to eight on the categories you rewrote, and settled positions at 3 to 6 months. Budgets sit in the same band as any retainer, which our Malaysian SEO pricing guide puts at RM1,000 to RM2,500 a month for a basic scope.
Nak tahu angka sebenar untuk business anda?
Hantar detail ringkas. Kami semak akaun atau website anda, pastu tunjuk di mana duit bocor dan apa langkah paling berbaloi seterusnya.
Frequently asked questions about ecommerce SEO in Malaysia
Should I optimise category pages or product pages first?
Category pages, without exception. They target the phrases people actually type, and there are far fewer of them so the work is finishable. Product pages are worth the effort only for top sellers, where search demand genuinely exists for that item by name.
What do I do if my supplier’s product description is all I have?
Keep it, then add two or three original paragraphs covering Malaysian sizing, plug type, delivery timing to Sabah and Sarawak, and warranty terms. Do this for the top fifty products by revenue, not the whole catalogue. Original content on the pages that sell beats thin content everywhere.
Do product filters really hurt my SEO?
They can. Google’s crawling documentation states that crawling faceted navigation URLs tends to cost sites large amounts of computing resources because of the very large number of possible filter combinations. Crawl effort spent on filtered URLs is effort not spent on your real category and product pages.
Should I delete a product page when the item is out of stock?
No. Keep the page live and indexable, set availability to OutOfStock in the schema, and offer a back-in-stock notification. Deleting throws away every link the page earned. Only remove a URL when the product is gone for good and the page has neither traffic nor inbound links.
What is the minimum Product schema Google requires?
For a merchant listing, Google requires name, image, and offers as a single Offer where you are the seller. Inside the Offer, price must be greater than zero and priceCurrency must be a three-letter ISO 4217 code, so MYR. Everything else, including sku, brand and availability, is recommended rather than required.
Can I show my Shopee reviews on my own site with star markup?
No. Google’s review snippet guidance says ratings must be sourced directly from users and that you must not aggregate reviews or ratings from other websites. Displaying them as plain text is fine, but marking them up as your own aggregate rating breaks the guidelines and can cost you the rich result.
Can a small store realistically outrank Shopee and Lazada?
Not on generic product names, and chasing that wastes a year. You can win on brand terms, comparison and sizing queries, compatibility questions, city-modified local searches, and anything needing explanation or after-sales service. Those are the queries marketplace listings answer badly.
How long before ecommerce SEO shows results in Malaysia?
Expect first movement six to eight weeks after category rewrites go live, and settled positions at 3 to 6 months. Stores with heavy filter problems take longer because Google must recrawl and drop the junk URLs first. Competitive Klang Valley categories run to the longer end.
Conclusion: ecommerce SEO in Malaysia
Ranking a Malaysian store comes down to four jobs in order: stop the filters generating junk URLs, write the category pages nobody has written, add original local detail to the products that sell, and point your content at categories instead of the homepage. Marketplaces keep the generic product names, so build on brand, comparison and local queries. Give it 3 to 6 months on a RM1,000 to RM2,500 basic scope.
Versi Bahasa Melayu di sini: SEO untuk kedai online Malaysia.
For a second opinion on where your store is losing crawl budget and rankings before you spend anything, talk to the Lesgo Media team.
Baca lagi
- What Is SEO? A Beginner Guide for Malaysian Businesses
- Google Business Profile Malaysia: Cara Daftar & Optimize
- Organic SEO Services in Malaysia: What You Are Actually Buying
