10 min read
eCommerce SEO Tips That Work for Online Stores
Most eCommerce SEO advice is generic: “write good content, build links, make the site fast.” That does not help when you have 2,000 SKUs, a faceted navigation that spits out 50,000 crawlable URLs, and product descriptions copied from the manufacturer. The tactics that move revenue for stores are narrower and more technical: getting category pages to rank for commercial terms, feeding Google accurate product data, controlling crawl waste, and turning the traffic you already have into orders.
This post collects the practices we apply on WooCommerce stores we build and maintain, updated for how Google works in 2026 (AI Overviews on shopping queries, merchant listing rich results, and the July 2026 Product structured data additions). It started life as a short list of tips in 2024; the list below is what actually held up.
Treat category pages as your main ranking asset

Individual product pages churn. Products go out of stock, get replaced, or lose demand. Category and sub-category pages are stable, and they are what Google tends to rank for the high-volume commercial terms (“men’s trail running shoes”, “ceramic pour over kettle”). Yet most stores leave them as a bare product grid with an H1 and nothing else.
What we do on every store:
- Write 150 to 300 words of real buying guidance for each top-level and second-level category. Place it below the product grid if your theme supports it (WooCommerce’s default archive puts the term description above the grid; many themes add a “bottom description” field, and Yoast and Rank Math both let you edit it). Cover what distinguishes the products, the two or three questions shoppers ask, and internal links to the most relevant sub-categories.
- Map one primary keyword per category and make sure no two categories target the same phrase. Duplicate intent between “kitchen knives” and “chef knives” is the single most common reason we see category pages flip-flopping in rankings.
- Keep the product grid crawlable. Infinite scroll that loads products only with JavaScript means Google sees page one and little else. Use paginated URLs (
/category/page/2/) withrel="next"as a fallback, or render at least the first 24 to 36 products server-side. - Expand the catalogue deliberately. The original version of this post said “add more products and categories”. That is half right. A new sub-category earns its place only if it maps to a search term people use and you can stock at least six to eight products for it. Empty categories with two items hurt more than they help.
Get product structured data right, including shipping and returns

Google now separates product snippets (informational pages, reviews) from merchant listing experiences (pages where a shopper can buy). Merchant listings are what put price, availability, shipping cost and return window into your organic result, and Google’s Product structured data documentation says combining on-page markup with a Merchant Center feed gives you the widest eligibility.
WooCommerce outputs basic Product schema by default, and Yoast or Rank Math extend it. Where stores fall down is the fields those plugins do not fill in automatically:
| Property | Why it matters | Where it comes from in WooCommerce |
|---|---|---|
gtin, mpn, brand | Lets Google match your page to its product knowledge graph and to your Merchant Center feed | WooCommerce added a native GTIN/UPC/EAN/ISBN field under the Inventory tab in 9.2 (November 2024). Brand needs the WooCommerce Brands feature (core since 9.6) or a plugin |
offers.shippingDetails | Shows shipping cost in the result; free shipping is a strong click-through signal | Not output by default. Yoast WooCommerce SEO and Rank Math Pro can generate it from your shipping zones |
offers.hasMerchantReturnPolicy | Return window and fee appear alongside price | Not output by default. Set it in Merchant Center, or add via SEO plugin schema settings |
aggregateRating, review | Star ratings in results | WooCommerce reviews, when enabled under WooCommerce → Settings → Products |
category, sale priceValidUntil | Added to Google’s documentation in July 2026 so page markup can match what the Merchant Center feed declares | Manual or via a schema plugin update; check your SEO plugin changelog |
One rule Google enforces hard: the price and availability in your markup must match what is on the page and in your feed. Mismatches cause Merchant Center disapprovals that also drag down organic merchant listings. Test every template with the Rich Results Test after any theme or plugin update, not just once at launch.
Product variants
For variable products (size, colour), Google’s variant markup expects a ProductGroup with hasVariant entries, each with its own SKU and offer. Most WooCommerce schema plugins still output the parent product only. If variants have distinct prices or stock, it is worth adding the group markup through a filter on woocommerce_structured_data_product.
Control faceted navigation and crawl waste
Layered navigation (filter by size, colour, price, brand) generates URL combinations faster than Google will crawl them. A 3,000-product store with five filters can easily expose half a million URLs, most of them near-duplicates. Googlebot spends its crawl budget on those and visits your new products days late.
The approach we take:
- Canonicalise filter URLs to the clean category URL unless a specific filter combination has real search demand (for example “red running shoes” might; “red running shoes size 9 under $100” does not). Yoast and Rank Math handle this for query-string filters; check they still do after switching filter plugins.
- Noindex, do not block. Blocking filter URLs in robots.txt stops Google from seeing the canonical tag. Let it crawl, then consolidate with canonical or noindex. The exception is sort and pagination parameters that create truly infinite spaces; those can go in robots.txt.
- Set internal search result pages to noindex. WooCommerce search (
?s=term&post_type=product) is crawlable by default. - Check Search Console → Pages → “Crawled, currently not indexed”. If that count is a large multiple of your product count, you have a facet problem.
Long-tail keywords still convert, but the format changed

Long-tail phrases (“best budget espresso grinder for oily beans”) carry clear intent, and for years the play was a blog post per phrase. In 2026 many of those queries trigger an AI Overview, and the share of shopping queries showing one has grown steeply since late 2025. You still want the traffic; you get it by being the source the overview cites and by owning the transactional version of the query on a category or product page.
Practically:
- Pull 12 months of queries from Search Console, filter to impressions above 100 and position 8 to 25. Those are the phrases where you are almost there.
- Group them by intent. Comparison intent (“X vs Y”) gets a buying guide that links to both products. Specification intent (“does X fit Y”) gets answered directly in the product description and an FAQ block with
FAQPagemarkup. - Answer the question in the first 40 to 60 words of the section. Overviews and featured snippets lift short, direct passages; padded intros get skipped.
- Link from the guide to the category page with the commercial anchor text, not “click here”.
Use paid search data to decide what to optimise
If you run Google Ads, you already have the best keyword research tool available to you: the Search Terms report. It shows which queries produced purchases at what cost. Pull the terms with a conversion rate above your account average and check whether you rank organically for them. Every high-converting paid term where you sit outside the top five organically is a category page or guide you should build or improve.
The reverse works too. Terms that convert organically but where you are bidding expensively can sometimes be pulled from paid, and the budget moved to terms you cannot rank for. We review this quarterly on stores we manage; it routinely uncovers two or three categories worth rewriting.
Speed and mobile: fix the product template, not the homepage
Core Web Vitals are measured per page group, and for stores the product and category templates are what matter. The homepage is where owners run PageSpeed Insights, and it is usually the page with the fewest problems. Check the CrUX data in Search Console → Core Web Vitals and look at which URL groups fail.
The fixes that give the biggest gains on WooCommerce templates, in order of how often they apply:
- Largest Contentful Paint: the main product image. Serve it as WebP or AVIF at the rendered size, add
fetchpriority="high"to it, and do not lazy-load it (WordPress skips lazy-loading the first image in content, but gallery plugins often override this). - Interaction to Next Paint: variation swatches, quick-view modals and mini-cart scripts. Defer everything not needed for the first interaction; test with the Performance panel in Chrome DevTools on a throttled mobile profile.
- Cumulative Layout Shift: reviews, “customers also bought” carousels and cookie banners loading late. Reserve the height with CSS.
- Server response: full-page caching cannot cache cart and checkout, and logged-in customers bypass it. A persistent object cache (Redis) and a PHP 8.3 or newer runtime do more for those pages than another optimisation plugin. If that is outside what your host offers, it is the kind of job our WordPress performance optimisation service handles regularly.
Internal linking that reflects how people buy
Stores inherit their internal link structure from the menu and the breadcrumbs, and that is usually fine for categories. Where we add links by hand:
- Product descriptions link to the parent category and to one or two complementary products, with the product name as anchor. “Pairs well with our stainless milk pitcher” is both useful and a relevant link.
- Buying guides link down to specific products and categories; product pages link back up to the guide (“Not sure which grinder? Read our guide”).
- Out-of-stock and discontinued products get a 301 to the closest replacement or the category, not a 404. WooCommerce keeps discontinued products published by default; set a reminder to review them monthly.
- Breadcrumbs use the primary category. Yoast and Rank Math let you set a primary category per product so the breadcrumb and URL are consistent.
Conversion work is SEO work
Ranking traffic that bounces tells Google the page did not satisfy the query, and it wastes the traffic you earned. The conversion changes with the most consistent results on the stores we run:
- Show the total cost early. Shipping surprises at checkout remain the top reason for abandoned carts; put the shipping threshold (“Free shipping over $75”) in the header and on every product page.
- Put stock status, delivery estimate and return window next to the add-to-cart button. This is the same information you are putting in structured data, so the two stay in sync.
- Collect reviews automatically. A post-purchase email seven to ten days after delivery, with a direct link to the review form, is the difference between 2% and 15% of orders leaving a review. Reviews feed
aggregateRating, which feeds click-through. - Test one thing at a time, on the product template, for at least two weeks. Button colour tests are noise; shipping messaging, image count and description layout are where we see measurable movement.
If you sell services alongside products, or your checkout needs custom fields and steps, our WooCommerce plugins cover product inquiry and quote forms, document and audio previews, and service selling, all of which keep the shopper on a crawlable page rather than bouncing to a third-party tool.
Frequently asked questions
Should I noindex out-of-stock products?
No, not by default. If the product will return, keep it indexed with “out of stock” availability in the schema and a back-in-stock form. If it is discontinued, redirect it. Noindexing loses the rankings and gives the shopper nothing.
Do I still need a blog for an eCommerce site?
You need buying guides and comparison content, and a blog is a convenient place to keep them. What you do not need is a post per week on loosely related topics. Five thorough guides that link into your categories beat fifty thin posts.
How long until category page changes show in rankings?
On a site Google crawls daily, expect movement within two to six weeks. Use the URL Inspection tool in Search Console to request indexing after a significant rewrite, and watch the query report for that URL rather than overall traffic.
Is Merchant Center worth setting up if I do not run Shopping ads?
Yes. Free listings in the Shopping tab and the feed’s role in validating your structured data both apply without ad spend. WooCommerce’s Google for WooCommerce extension syncs the feed.
Where to start
If you do one thing this month, audit your top ten category pages: unique primary keyword, 150-plus words of useful copy, crawlable product grid, and a passing Rich Results Test on a product within each. Next month, pull the Search Console page report and deal with crawl waste from filters. After that, the Google Ads search terms report will tell you what to write. Each step compounds on the one before it, and none of them require a new plugin.
Related reading
- Why do a Wordpress Website And a Dedicated Server go Hand in Hand
- Visual Seo Optimizing Images And Videos For Search
- Ecommerce Marketing Trends to Watch
- Seo Tactics to do if You Want to Appear in ai Answers
- Boost Online Visibility Without Paid Ads
- Key Google Analytics Metrics to Track For Different Websites