Ecommerce SEO has a different shape from local SEO. There is no map pack to win. Instead there is a site with hundreds or thousands of URLs, most created automatically by filters, sorting and variants, competing with marketplaces and big retailers for searches where the shopper is comparing prices. Good SEO for an online store does three things in order: it makes sure search engines spend their time on the pages that matter, it makes those category and product pages better than the competition, and it builds content that brings shoppers in before they have decided what to buy.
This guide is for owners and marketing leads at independent online stores, especially on WooCommerce, and for agencies running ecommerce SEO. Our example is Bean & Barrel Coffee, a fictional roaster selling beans, brewing gear and subscriptions from its own WooCommerce store.
Site architecture: categories carry the weight
Product pages win specific searches (“ethiopia yirgacheffe light roast”). Category pages win the broader, higher-volume ones (“single origin coffee beans”, “decaf coffee beans”). Most stores underinvest in categories.
A structure that works for most catalogs:
| Level | Bean & Barrel example | Targets |
|---|---|---|
| Home | / | Brand, broad positioning |
| Category | /coffee/ | “coffee beans online”, “fresh roasted coffee” |
| Subcategory | /coffee/single-origin/, /coffee/decaf/, /coffee/espresso/ | Specific product types people search for |
| Product | /product/ethiopia-yirgacheffe/ | The exact product and its long-tail variants |
| Guide | /guides/how-to-choose-espresso-beans/ | Research questions before purchase |
| Comparison | /guides/aeropress-vs-french-press/ | Shoppers deciding between options |
Rules that keep the structure clean:
- Every important page within three clicks of the home page, through menus, category links and breadcrumbs.
- One canonical URL per product. WooCommerce can produce several paths to the same product through categories; make sure the canonical points at one.
- Create an indexable subcategory only when people search for it and you have enough products for it. “Decaf coffee beans” earns a page. “Coffee beans 340g bag” does not.
- Product tag archives are usually thin. Most stores should noindex them or not use them for navigation.
Category pages that rank and convert
A category page that is only a product grid gives search engines little to understand and shoppers little help. Bean & Barrel’s espresso category follows a simple layout:
- A short intro above the grid (two to four sentences): what is in the category and who it suits. Keep the products visible on the first screen.
- The product grid, with useful sorting and filters.
- A buying guide below the grid: roast levels for espresso, how to pick beans for milk drinks, grinder notes, links to the best sellers and to the full brewing guide.
- A few questions shoppers ask, answered briefly.
- Links to related categories: grinders, espresso machines, milk pitchers.
Titles matter here too. WooCommerce shop and category pages often ship with weak default titles like “Espresso Archives”. RankThat’s WordPress Bridge can write SEO titles and descriptions for shop and category pages when you use Rank Math or SEOPress, and you review each one before it goes live. See ecommerce SEO with RankThat.
Faceted navigation and crawl control
Faceted navigation lets shoppers filter by roast, origin, price and more. Each combination can create a new URL, and a store with 200 products can end up with tens of thousands of crawlable addresses. Search engines then spend their effort on near-duplicate filter pages while new products wait to be crawled. Google’s own guidance on managing faceted navigation is worth reading in full.
A decision table for typical WooCommerce URL types:
| URL type | WooCommerce example | Usually |
|---|---|---|
| Sort order | ?orderby=price | Keep out of the index: canonical to the unsorted category, and consider blocking in robots.txt |
| Attribute filters | ?filter_roast=light | Block or noindex, unless the filter matches a real search and deserves its own page |
| Price filters | ?min_price=10&max_price=20 | Block in robots.txt |
| Add-to-cart links | ?add-to-cart=123 | Block in robots.txt |
| Pagination | /coffee/page/2/ | Keep crawlable with its own URL; do not canonical page 2 to page 1 |
| Valuable filter combinations | “light roast decaf” | Turn into a real subcategory with its own URL, title and intro |
Two cautions. First, a URL blocked in robots.txt cannot be crawled, so search engines cannot see a noindex or canonical on it; choose one method per URL type. Second, test any robots.txt change before you publish it, for example with the free robots.txt checker. A misplaced rule can block your whole shop.
A site audit shows how many crawlable URLs your filters create, duplicate titles across filter pages, and canonicals that point the wrong way. The crawl errors guide explains how to work through the results.
Product pages
- Write your own descriptions for your best sellers first. Manufacturer copy appears on every other store that sells the product. Bean & Barrel adds tasting notes, the farm and process, brew recommendations and a roast date policy.
- Variants: one product page with options and one canonical URL, unless a variant is searched for separately and genuinely differs.
- Reviews: collect them from real buyers after delivery, never incentivize positive ones, and show them on the page.
- Photos: your own, compressed, with descriptive alt text.
Handling stock changes:
| Situation | What to do |
|---|---|
| Temporarily out of stock | Keep the page live, mark availability as out of stock, offer a back-in-stock alert, suggest alternatives |
| Seasonal product returning next year | Keep the URL; update it when it returns so it keeps its history |
| Discontinued with a close replacement | 301 redirect to the replacement |
| Discontinued with no replacement | Redirect to the category, or let it return 404 or 410 if nothing fits |
The WordPress Bridge can create redirects for broken product URLs that RankThat finds, for you to approve.
Product schema
Product structured data makes your pages eligible for richer results such as price, availability and review stars, and it feeds Google’s shopping surfaces. A trimmed example:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Ethiopia Yirgacheffe, Light Roast, 12 oz",
"image": "https://www.example.com/images/yirgacheffe.jpg",
"description": "Washed Ethiopian coffee with jasmine and lemon notes, roasted weekly.",
"sku": "BB-ETH-12",
"brand": { "@type": "Brand", "name": "Bean & Barrel Coffee" },
"offers": {
"@type": "Offer",
"url": "https://www.example.com/product/ethiopia-yirgacheffe/",
"price": "19.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": "0", "currency": "USD" },
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" }
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30
}
}
}
Keep schema in sync with the page: if the price or stock changes and the markup does not, Google may ignore it or flag it in Search Console. On the home or about page, Organization (or its OnlineStore subtype) describes the business itself. A free Google Merchant Center account adds your products to Google’s free shopping listings. Google’s product structured data documentation lists the required and recommended properties.
Comparison and alternative pages
Shoppers who search “AeroPress vs French press” or “Chemex alternatives” are close to buying something. A store that sells both options is the natural place to answer. Good comparison pages:
- Compare on the things shoppers care about (taste, ease, cleanup, price, capacity), in a table.
- Say plainly which option suits which person.
- Link to both products and to the relevant category.
- Are updated when products or prices change, with the date shown.
Brand comparisons work the same way if you stock both brands. Be fair; a page that pretends one side has no strengths is less useful and less likely to be cited.
Content-led growth
Beyond comparisons, content brings shoppers who are not ready to buy yet. Organize it as topic clusters that link into categories:
- Brewing guides (pour over, espresso, cold brew) link to the gear and the beans that suit each method.
- Buying guides (“how to choose a burr grinder”) link to the category and the top picks.
- Origin and roast explainers link to single-origin products.
- Gift guides published before each gifting season link to gift sets and subscriptions.
RankThat’s content tools suggest topics, write briefs and draft articles in your brand voice, and the keyword gap shows the categories and guides competing stores rank for that you do not.
Seasonality
Gifting peaks around the end-of-year holidays, with smaller peaks for Father’s Day, Mother’s Day and Valentine’s Day. Keep one evergreen URL for sale events (for example /black-friday/) and update it each year rather than creating a new page, so it keeps its links and history. Publish gift guides six to eight weeks ahead of each peak.
What to track every month
| Metric | Source |
|---|---|
| Organic revenue and orders by landing page type (category, product, guide) | Google Analytics 4 |
| Clicks and impressions by category | Search Console |
| Indexed pages versus pages you want indexed | Search Console page indexing report |
| Positions for category and product terms | Rank Tracker |
| Pages ranking 8 to 20 | Opportunities |
| Crawlable URL count and duplicate titles | Site Audit |
Common mistakes
- Letting every filter combination be crawled and indexed. It dilutes the site and slows the crawling of pages that earn money.
- Category pages with no text, or a wall of text that pushes products below the fold. Short above the grid, helpful below it.
- Manufacturer descriptions on every product. They are duplicate content shared with every other stockist, so there is no reason for a search engine to prefer your copy.
- Deleting discontinued products without redirects. Links and rankings built over years disappear with the page.
- Product schema that shows a different price from the page, usually because a plugin caches old markup. Spot-check after every price change.
- A new sale URL every year. The old one had the links; keep it and update it.
- Judging content by traffic alone. A brewing guide with modest traffic that leads to grinder sales is worth more than a viral post that sells nothing. Compare revenue by landing page in Google Analytics 4.
A 90-day plan
| Weeks | Focus | Tasks |
|---|---|---|
| 1 to 2 | Crawl audit | Count crawlable URLs, map parameters, check canonicals and sitemap contents |
| 3 to 4 | Crawl control | Robots.txt and noindex rules for sort, price and low-value filters; test before publishing |
| 5 to 6 | Categories | Titles, intros and buying guides for the top five categories |
| 7 to 8 | Products | Rewrite the 20 best-selling product descriptions; Product schema with shipping and returns |
| 9 to 10 | Stock and redirects | Redirect discontinued products; back-in-stock handling for the rest |
| 11 to 12 | Content | Two comparison pages and one brewing guide linked into categories |
| 13 | Review | Compare organic revenue, indexed pages and positions with week one |