# E-commerce site structure: categories, products, and the links between

This guide shows how to structure a small to mid sized store so Google can crawl it, pick the right page for each query, and send buyers. You will map categories and products, set URLs, and link them so clicks flow to money pages.

Updated 2026-09-14 · Source: https://porteur.ai/guides/ecommerce-site-structure

## The pyramid that decides which page ranks

Your structure is a pyramid: home, categories, subcategories, products. The home links to top categories. Categories link to subcategories and top products. Products link back up with breadcrumbs.

This decides which page ranks for which query. Short, broad searches should match higher nodes. Specific searches should match deeper nodes.

- “trainers” should match /footwear/trainers
- “men’s blue running trainers” should match /footwear/trainers/running, or a filter view if you keep that indexable
- “nike pegasus 40 blue size 10” should match /products/nike-pegasus-40-blue

Plan the tree first. Write the category set on a page. If a node does not help a buyer pick, fold it into the parent. Keep click depth shallow: aim for products at two or three clicks from the home.

> Rule: each query type maps to one URL. Avoid two pages chasing the same term, or you will split links and clicks.

## URL patterns that scale and stay consistent

Use clean, predictable paths. One URL per product. One canonical category per product. Keep parameters minimal and consistent. As of 2026, this matches Google’s guidance for ecommerce sites.

| Thing | Good | Avoid |
| --- | --- | --- |
| Home | / | /home, /index |
| Category | /footwear/trainers | /c?id=12, /shop?cat=1 |
| Subcategory | /footwear/trainers/running | /footwear?type=running |
| Product | /products/nike-pegasus-40-blue | /p?sku=ABC, /products/sku |
| Product variant with demand | /products/nike-pegasus-40-blue-size-10 | Variant with no page, or many near-duplicates |
| Parameters for sort and filters | ?sort=price-asc used consistently | Multiple aliases: ?s=1, ?order=price, ?sortby=price |

If variants have distinct demand, give them their own URLs. Example: “iphone 14 case clear” can live at /products/iphone-14-case-clear. If not, keep variants on the parent and use a canonical to the parent.

Keep UTM and tracking parameters out of index. They are for analytics, not content. Use the canonical to the clean URL. In Google Search Console, watch for parameter sprawl in the Indexed and Excluded lists.

> Warning: do not switch URL structure without a redirect map. If you must change, 301 every old URL to its closest match, and keep titles and content stable.

## Categories that earn clicks, not just hold links

Categories are real pages. They target broad and mid tail terms, and help buyers narrow down. Google expects indexable category pages with internal links and breadcrumbs to show site organisation.

- One H1 that names the category: “Men’s running trainers”
- A short intro that says what is in the category and who it suits
- Links to subcategories where they exist
- A list or grid of top products that stay in stock
- Filters for attributes like size, colour, brand

Write a unique intro. Two to three sentences beat a block of filler. Example for /footwear/trainers: “Neutral and stability running trainers for road and trail. Sizes for men and women. Free returns on first fit.”

Keep the product grid evergreen. Do not sort by newest if that buries bestsellers. Consider a Top picks module fed by sales or click data. Link these products by name, not “View”.

> Rule: filters may help users, but only a few facet combinations should be indexable. The rest must not create crawlable duplicates.

## Product pages that match specific searches

Each product page should answer the search that names it. Write for the buyer. Manufacturer text alone is duplicate across many stores, which weakens your chance to rank. Add your own copy, images and policies.

- Title tag under about 60 characters, with the model and key attribute
- Unique description that covers fit, use, materials, and care
- Clear price and availability
- Images that show angles and, if relevant, a variant image per colour
- Reviews, marked up as an aggregateRating on the Product
- Shipping, returns, and warranty details

Add structured data Product with offers, price, availability, and reviews. This helps eligibility for rich results across Search, Images, and the Shopping tab. Check theme output and validate with Google’s Rich Results Test and schema.org definitions.

If you run Merchant Center, send a feed for free listings. Keep feed values aligned with the page. Google expects price, availability, and identifiers to match the visible page content.

## Breadcrumbs and internal links that push authority down

Breadcrumbs show hierarchy and create consistent links up the tree. Mark them up with BreadcrumbList structured data. Place them near the top on all product and subcategory pages, linked to their parents.

- From a product: Home > Footwear > Trainers > Nike Pegasus 40 Blue
- Each crumb links to its page
- Use the category you want to rank as the parent, not a tag hub

Add cross links that buyers use and crawlers can follow. On product pages: related products, comparable items, and accessories. On category pages: links to sibling categories and top products. Use descriptive anchor text like “trail running socks” rather than “related item”.

Track click depth. If key products sit four clicks deep, add them to category highlights or the home. Shallow paths get crawled and ranked more often on small budgets. See “Click depth” for definitions if you need them later.

## Faceted navigation without index bloat

Filters create many URLs. Google’s guidance is clear: only let a few facet combinations with search demand be indexable. Keep the rest out. Avoid infinite combinations. Keep the canonical to the unfiltered page unless a facet view is a true target page.

1. **Pick targetable facets** Brand, colour, size range, and a couple of material or feature filters often have demand. Example: /footwear/trainers/running?brand=nike&colour=blue.
2. **Choose URL forms** If a facet combo should rank, give it a clean, linkable URL pattern, not a fragment. Keep parameter names stable, lower case, hyphenated values. Example: ?brand=nike, not ?b=NK.
3. **Block the rest** Disallow crawl of non-target parameter patterns in robots.txt. Or render them as fragments (#colour=blue) that browsers use but crawlers ignore. Add noindex to low-value filtered pages if they must be crawlable for users.
4. **Keep canonicals honest** Canonical on filtered pages points to the unfiltered category unless this filtered view is a target page you want indexed.

Do not create separate static pages for every tiny attribute. That looks like scaled content abuse when done at volume without value. A page must add real choice or advice to deserve its place.

> Warning: rel="next" and rel="prev" are not used by Google since 2019. Treat each paginated page as indexable, or create a view-all if it loads fast.

## Pagination that keeps lists crawlable

Large categories need pagination. Each page should have a self-referencing canonical, with links to next and previous pages for users. Do not hide deep pages behind endless scroll without proper links. If you have a stable view-all page that loads quickly, you can canonical to it.

- Keep page size sensible so LCP stays under about 2.5 seconds
- Expose crawlable links to page 2, 3, 4, not just a Load more button
- Carry the same H1 on each page, and vary the title tag with “Page 2” etc

A fixed example: /footwear/trainers shows 24 items. /footwear/trainers?page=2 is linked at the bottom and crawlable. Both pages have “Men’s running trainers” as the H1. Titles are “Men’s running trainers | Page 1” and “Men’s running trainers | Page 2”.

## Out of stock, discontinued, and seasonal

Do not 404 a product that will return. Keep the page live, show the status, and mark availability in structured data. Offer alternatives on the page. This keeps rankings and helps buyers.

- Back soon: keep URL, show expected date if you have it, allow email me when back
- Gone for good: 301 to the nearest relevant product, or to the parent category
- Unknown return: keep live for a while, surface close alternatives, then decide

If a line is retired and has no close match, a 410 Gone is valid. Update internal links so you do not send buyers to dead pages. In Search Console, watch for 404 spikes after catalogue changes and fix or redirect them promptly.

## How structure ties queries to pages, and avoids cannibalisation

Your structure should make it clear which page owns each intent. Category pages own broad and mid tail. Product pages own exact model searches. A small set of filter views may own brand plus attribute combinations. The home is for brand searches and a few flagship links.

1. **Map queries to URLs** List your top search terms from Search Console. Next to each, write the one page that should rank. If two pages compete, merge or change anchors so one wins.
2. **Fix overlapping content** If /guides/best-running-trainers and /footwear/trainers say the same thing, choose one primary and link the other as a helper, or merge them.
3. **Use anchors that match intent** From /footwear, link to /footwear/trainers with “running trainers”, not “shop now”. From the product page, link to /footwear/trainers/running with “running trainers category”.

Check the Search Console Performance report. If a category URL and several product URLs all get impressions for “men’s running trainers”, your structure blurs intent. Strengthen the category: add more internal links, tighten titles on products to focus on model names, and reduce indexable filter views that muddy the target.

## Platform notes: Shopify specifics you can use

Shopify fixes some structure for you. Product URLs are /products/handle. Collections are /collections/handle. You can also see /collections/handle/products/handle, which has a canonical to /products/handle by default. Blogs live at /blogs/name/handle. Static pages are /pages/handle.

- Shopify builds sitemap.xml for you
- You can edit robots.txt since 2021 with robots.txt.liquid
- Set title and description per product and collection in admin
- Set alt text per image
- Most themes ship Product and Breadcrumb structured data, but check it in the code and validate
- Manage redirects in admin under URL redirects

Tag and vendor listing pages often create thin URLs. If they do not help buyers, keep them out of navigation, consider noindex, and block crawl of their parameter forms if needed. Point internal links to collections that you want to rank.

Keep collection pages as the SEO target for broad terms. On product pages, ensure the breadcrumb shows the primary collection you want to rank. Use the built-in canonical unless you split variants into their own pages for demand reasons.

## Questions

### How many categories should an ecommerce site have?

As few as you can while still helping a buyer choose. Start with a small set of top categories and only add a subcategory when you have stock depth and clear demand. If a category holds only a handful of evergreen products, fold it into the parent.

### Should I create pages for every filter combination?

No. Only a small set of facet combinations with proven search demand should be indexable. Keep the rest out with robots.txt patterns, noindex, or fragments. Canonical filtered pages to the unfiltered category unless a filtered view is a true target page.

### Are product variants better on one page or many?

Keep variants on one URL when the intent is the same and demand is not distinct. Split into separate URLs when buyers search for the variant explicitly, like colour or device model. When you split, make each page unique with images, stock, and copy, not just a swapped token.

### What should I do with out of stock products?

Keep the URL live if the item will return. Show availability, mark it in structured data, and link alternatives. If it is gone for good, 301 to the closest relevant product or the category. Use 410 only when there is no replacement and you have removed links.

### Do I need a view-all page for pagination?

Only if it loads quickly and helps users. Google does not use rel next or prev, so each paginated page can be indexable with its own canonical. A view-all can be the canonical target if it performs well and is complete.

### Will AI written product descriptions get penalised?

Google does not penalise AI assisted writing by itself. The risk is scaled content abuse: producing many near-empty pages at scale to manipulate rankings. Each product page needs useful, unique content that helps buyers decide.

## Read next

- [E-commerce SEO for a small store: the pages, the data, the structure](https://porteur.ai/guides/ecommerce-seo): What to ship for ecommerce SEO: where your store can appear, the three page types, product data and feeds, URLs, variants, facets, speed, and the order of work.
- [Category page SEO: the page that ranks for the product type](https://porteur.ai/guides/category-page-seo): Build a category page that wins broad queries: clear H1, intro, subcategory links, top products, clean filters, solid pagination, and fast loads.
- [Product page SEO: what a buyer and a crawler need on the page](https://porteur.ai/guides/product-page-seo): Make product pages that rank and convert: titles and descriptions, images with alt, Product structured data, variants and canonicals, links and reviews.
- [Faceted navigation SEO: which filters to index and how to hide the rest](https://porteur.ai/guides/faceted-navigation-seo): Pick which filters should rank, hide the rest, and keep crawl under control. A practical plan for product sites with examples you can ship.
- [Keyword cannibalization: two pages, one search, and how to fix it](https://porteur.ai/guides/keyword-cannibalization): Two pages ranking for one query cost you clicks. See it in Search Console, pick a winner, merge or canonicalise, and know when to keep both.
- [Internal linking for a small site: which pages link to which](https://porteur.ai/guides/internal-linking-for-seo): Decide which pages rank. Build hubs, write clear anchors, fix orphans, and crawl your site to map links you control.
- [SEO for a marketplace: two sides, category pages, and the listings](https://porteur.ai/guides/seo-for-marketplaces): Build category and location pages for demand. Let listings win the long tail only when they help searchers. Control facets, schema, and pruning.
- [How to build a glossary that earns traffic and links](https://porteur.ai/guides/how-to-write-a-glossary): Which terms deserve an entry, the shape that makes one useful, how entries link to your guides, and the line where a glossary turns into thin pages.

Give me one URL and I will check, in about thirty seconds, how your current structure maps to searches and rivals, and show you three findings free. Free check: https://porteur.ai/
