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.

By , founder of Porteur · Updated 14 September 2026 · Markdown

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.

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.

ThingGoodAvoid
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-10Variant with no page, or many near-duplicates
Parameters for sort and filters?sort=price-asc used consistentlyMultiple 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.

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.

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.

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

Sources

Check my site, free

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, no card
  • Read-only, your own accounts
  • Readable by your agent

Read next