Category pages — /shoes/running, /laptops/business, /wine/red-burgundy — are the most valuable page type on most ecommerce sites. They target the high-volume mid-funnel queries ("running shoes," "business laptops") that drive both organic traffic and conversions. They're also the most consistently broken page type I see in audits, almost always for the same handful of reasons.
This post is the playbook: the seven patterns that move category pages from page two to page one, with examples from real client audits.
Why category pages are so often broken
The default ecommerce CMS treats a category page as a list-plus-filters renderer. SEO is bolted on afterwards. The page ends up with:
- A 30-word marketing intro at the top (often hidden behind a "read more" button)
- A grid of products, sometimes paginated, sometimes infinite-scroll
- Faceted filters that generate dozens of duplicate URLs
- No real content, no internal links to related categories, no structured data beyond
ItemListif you're lucky
Search engines see a thin, low-content, duplicate-prone page. Then your competitor has a 1500-word guide above the product grid and ranks #1.
Here's what to fix, in priority order.
1. Make the H1 and URL match search intent, not your internal taxonomy
The biggest single mistake: naming the category by your internal product hierarchy, not by what users search for.
- Internal taxonomy:
/footwear/athletic/running. H1: "Athletic Running Footwear." - What users search: "running shoes."
The URL and H1 should match the search query you're targeting. Use the Snippet Optimizer to model the SERP appearance and the Content Brief generator to confirm the dominant search-intent variant.
If your CMS forces hierarchical URLs you can't easily change, at least fix the H1 and title tag. The URL is a smaller signal than people think; the H1 and title carry more weight.
2. Write real content above the product grid
The non-negotiable element. Above the product grid, you need 300-800 words of substantive content that:
- Answers the buyer-decision questions for this category ("How do I choose between road and trail shoes?")
- Mentions the top subcategories with internal links
- Includes the target query and 4-8 semantic variants naturally
- Doesn't read like marketing fluff
Critically: do not hide this content behind a "read more" toggle on mobile. The cargo-cult "keep above-fold clean" pattern destroys this content's SEO value. Google has been explicit: hidden content on mobile is still indexed, but visible content is preferred for ranking.
If your designers won't accept text above the products, push it to a sticky right column on desktop and a fully-visible block below the products on mobile. Better than hidden.
3. Add a category-specific FAQ block (with FAQPage schema)
5-8 questions at the bottom of the category page, drawn from:
- Customer support tickets for this category
- The "People Also Ask" box on the target query's SERP
- Genuine pre-purchase concerns
Each answer is 60-120 words. Mark up with FAQPage JSON-LD — even though the Google rich result is rare in 2026, the structure helps both rankings and AI Overview citations.
This FAQ block alone is worth 100-300 words of relevant content per category page and signals topical depth at minimal designer effort.
4. Solve faceted-navigation cannibalization with canonicals and noindex
Default ecommerce CMSes generate URLs like:
/running-shoes?color=red/running-shoes?size=10/running-shoes?color=red&sort=price-asc
If Google indexes these, you get cannibalization at scale. Two fixes, applied together:
Self-canonical the clean URL on every variant:
<link rel="canonical" href="https://example.com/running-shoes" />
Noindex the parameter combinations you don't want indexed:
<meta name="robots" content="noindex, follow" />
(follow so Google still distributes any link equity from those URLs.)
For genuinely useful subcategories (/running-shoes/road), give them their own indexable URL with content, H1, and FAQ. For sort/filter variants that don't deserve their own page, canonical + noindex.
Audit which variants you're letting Google index by exporting your indexed URLs from Search Console and looking for parameter patterns. If you see ?color= URLs ranked, you have cannibalization right now.
5. Set up pagination properly
Three common ecommerce pagination strategies:
| Strategy | Pros | Cons |
|---|---|---|
Numbered paginated URLs (?page=2) | Crawlable, indexable | Easy to cannibalize, dilutes link equity |
| Infinite scroll | Good UX | Often only page 1 gets indexed |
| Load more (button) | Compromise | Same indexing issue if done wrong |
The 2026 best practice: paginated URLs, with the following setup:
- Each page is self-canonical (
?page=2canonicals to?page=2) - Each page has a different
<title>(Running Shoes — Page 2 of 12 — Acme) - Each page is crawlable, indexable
- Products visible without JavaScript (server-rendered)
- A "View all" page if products under 200
rel="next" / rel="prev" is no longer used by Google (deprecated 2019) — don't bother.
6. ItemList JSON-LD for product carousels
For category pages with named products visible, add ItemList JSON-LD describing the products. This is documented as eligible for the "Item carousel" rich result on certain query types and helps Google understand the page is a category listing.
Minimum useful structure:
{
"@context": "https://schema.org",
"@type": "ItemList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "url": "https://example.com/product/acme-runner-x1" },
{ "@type": "ListItem", "position": 2, "url": "https://example.com/product/acme-runner-x2" }
]
}
Generate with the Schema Generator if you don't have a templating story.
7. Internal links to siblings and parents
The hub-and-spoke internal linking model applies to ecommerce too:
- Each category page should link to its parent category and sibling categories
- Category pages should link to their flagship products (most-clicked, highest-rated, most-relevant for the target query)
- Product pages should link back to category, parent category, and 2-3 related products
Most ecommerce templates only do parent → child. Adding lateral and bottom-up links is high-leverage. See our internal linking post for the full pattern.
A pre-publish checklist for new category pages
For each new category you launch:
- Title + H1: matches user search intent, not internal taxonomy
- URL: short, clean, no parameters or session IDs
- Above-grid content: 300-800 words, visible (not behind "read more")
- Subcategory internal links: link to logical sub-categories in the intro paragraphs
- FAQ block: 5-8 questions, FAQPage schema
- ItemList schema: for the product grid
- Faceted filter handling: canonical + noindex on filter variants
- Pagination: paginated URLs, each self-canonical with distinct title
- Image alt text on product thumbnails (product name + key attribute)
- Breadcrumb with BreadcrumbList schema
Tools and references
- Schema Generator — generate Product, BreadcrumbList, FAQPage JSON-LD
- Snippet Optimizer — model category-page title + meta
- Report Builder — pull GSC export to spot which category pages have cannibalization issues
- Cannibalization glossary entry — the failure mode this post largely addresses
- Internal linking glossary entry — the structural lever underneath all of this
Category pages aren't an afterthought. They're the highest-leverage page type on the site. Half a day of audit + fixes per category usually moves rankings within 4-8 weeks. The patterns above are what reliably works.