Categories are for browsing, attributes are for filtering
Categories become pages, with their own URLs, titles and rankings. Attributes power filters. When every new idea becomes a category, a store ends up with thin, overlapping category pages that compete with each other.
From our logs
A tile manufacturer asked us for a new sub-category for its newest products. We added a Product Type attribute to its import template instead, the day before the next import, and built it into the filter sidebar. Customers get the same view. The catalog does not get another category to maintain.
Every quarter we also query the database for duplicate categories and duplicate SKUs, and check that nothing is sitting in Uncategorized.
Filter URLs: decide which ones deserve to exist
Filter plugins create a URL for every combination a shopper clicks. Some of those URLs duplicate your category pages exactly. On one store, a filter URL shaped like /shop/?_category=[collection] showed the same products as the category page /product-category/[material]/[collection]/.
What we do about it:
- •Keep crawlers out of filter combinations. Robots.txt rules for the filter parameters do this, and it is what Google’s own faceted navigation guidance recommends when those URLs do not need to be in search.
- •Remember what robots.txt does not do. It stops crawling, not indexing. A blocked URL can still appear in Google if other pages link to it.
- •Let category pages be the landing pages. They have clean URLs, their own copy and internal links pointing at them.
- •When a filter has real search demand, give it a real page, and link to that page from the site.
Our note to one client who asked for a clean URL for a filtered view:
“Friendly URLs aren’t possible for these results because the page uses a filter system. If you’d like a standard URL, we can build a dedicated page instead... Just note that we’d need to link to that page from somewhere on the site, otherwise it becomes an orphan page and won’t deliver much value.”
And if anyone suggests configuring URL parameters in Search Console: Google retired that tool in 2022.
Product data is SEO data
WooCommerce outputs basic Product structured data, and SEO plugins extend it. Check what your store actually outputs: price, currency and availability that match the page, SKUs, and brand and GTIN where you have them, with one Product entity per product page. More on markup in schema markup.
Availability deserves the most attention, because it is the field most likely to be wrong. On the tile store, stock sits in four warehouses. A product shows as in stock if any of them has it. Otherwise the page says it is out of stock and can be backordered. A weekly check compares the inventory sync count against what it should be.
From our logs
After a store moved to WooCommerce, Search Console reported 11 active products that were not appearing on the Shopping tab. The product pages themselves looked fine. Search Console’s shopping reports are worth reading even when nothing on the site looks wrong.
Sold out, discontinued, deleted
A sold-out product is still a page with a history: links, rankings, sometimes reviews. Deleting it throws that away.
- •Temporarily out of stock: keep the page live, say so clearly, and offer a backorder or an alternative.
- •Discontinued but still selling through: keep it live and visibly marked until the stock is gone. One of our clients gives discontinued products several months to sell their remaining stock, so those pages stay live, and we are adding a visible “discontinued” marker to them.
- •Gone for good: redirect to the closest replacement or to its category. Not to the homepage.
- •Dated products such as courses and events: on a course store, sold-out dates get an automatic “Full” badge, and past dates drop off the page.
A lesson about modeling
On a store selling one-of-a-kind pieces, each piece had been set up as a variation of a parent product, with a stock of one. When pieces sold, the parent products still showed up in filters and search, because filters work on parent products, not variations. There was no clean fix that did not fight WooCommerce’s structure. How products are modeled on day one decides what search and filters can do later.
Imports can delete your rankings
Stores that update their catalog by spreadsheet can lose products without anyone noticing, and every lost product is a 404 with rankings attached.
WP All Import has an option to remove products that are missing from the import file. Its own warning reads: “Products created by this import and no longer present in the import file will be permanently deleted.” On the tile store, we switched that option on only after confirming that every existing product was in the new file, and the client’s staff switch it off for a separate import that covers display products. We have also seen products disappear because their names were blank in the spreadsheet.
Site search is part of findability
If shoppers cannot find a product once they arrive, the work that brought them there is wasted. We check on-site search with canary queries that have expected result counts. On the tile store, a search for “grey” should return more than 100 products, and a search for “aura” fewer than ten.
Those checks exist because search has broken for real. On one day it failed twice: after a database cleanup, which needed a full re-index of the products, and again when the filter plugin’s license lapsed. We describe the full weekly routine in how we test websites with AI.
From our logs
A B2B manufacturer’s site search mostly returned product categories, with no images. Our developer changed the search template to return categories with their thumbnails, so the results looked like something worth clicking.
Replatforming a store
Moving a store onto WooCommerce is a migration with extra data. For a store moving off a hosted store builder, the scope included a crawl of every old URL, 301 redirects to the new product pages, titles and meta descriptions carried across, SKUs including variation SKUs, and a new product feed. As we told that client: “We’re not going to use your product page’s URL structure; we’ll redirect them to the new product pages.” The redirect side is covered in website migration SEO.
After any store launch, our checklist covers permalinks and product slugs, categories, tags and attributes, redirects, canonicals on the right domain, SEO titles and descriptions carried over, a working sitemap, robots.txt allowing indexing, and the stock sync running.
Speed matters on stores too, and carts and checkouts need their own caching rules. See Core Web Vitals.
Working with your SEO consultant
On a bilingual course store, the client’s SEO consultant crawls the site and sets priorities, and we implement them. At the consultant’s request we added trailing slashes and re-pointed breadcrumbs, so that 9 course pages, 3 event pages and 7 product pages each sit under the section people actually browse instead of WooCommerce’s default shop path.
Frequently asked questions
Should WooCommerce filter pages be indexed?+
Usually not. Let category pages rank, and keep crawlers out of filter combinations. If one combination has real search demand, give it a proper page and link to it.
Should I delete out-of-stock products?+
No. Keep the page and say it is out of stock. When a product is discontinued for good, redirect it to the closest replacement or its category.
Does WooCommerce add product schema by itself?+
Yes, basic Product markup. SEO plugins extend it. It is worth checking what your store outputs against Google’s product requirements.
Is /product-category/ in my URLs a problem?+
Not for rankings. Changing the category base on an established store means redirecting every category URL, so it is rarely worth doing on its own.
Can you work alongside our SEO consultant?+
Yes. On one course store, the consultant sets priorities and we implement them.
Sources
- Google Search Central, Managing crawling of faceted navigation URLs
- Google Search Central, Introduction to robots.txt
- Google Search Central, Product structured data