Category Page Optimization
Category pages as money pages: unique intro copy, category-level schema, internal linking discipline, and where to place supporting content.
Category pages — product list pages, PLPs, collections, “shop all” pages — are the highest-revenue surface in e-commerce SEO. They target the head of demand (“running shoes,” “wireless headphones,” “nightstands”), they convert at 2-4× the rate of blog content, and they are where most retailers hide a 12-row product grid behind 800 words of stuffed copy. This module fixes that.
TL;DR
- Category pages target commercial intent at the head. A ranking PLP for “running shoes” outearns a ranking PDP for “Brooks Ghost 16 men’s size 10” by 50-100×. Treat them as your money pages, not as glorified directories.
- Unique editorial copy is mandatory and goes above the grid. 100-200 words of buyer-helpful framing — sizing tips, materials guide, season notes — separates ranking PLPs from no-traffic ones. Below-the-fold hidden copy underperforms.
CollectionPage+ItemListschema is the 2026 standard. It feeds AI Overviews and gets your category cited as a starting point for shopping queries.
The mental model
A category page is like a department-store floor manager during peak season. Their job is not to sell one item; it is to point each shopper to the right aisle, fast, with confidence. They know which models suit narrow feet, which colors are still in stock, and which brand they’d buy themselves. They show their reasoning, then step out of the way.
A bad PLP is the opposite — a clerk who reads you the same brochure for every shoe in the room and never points to the wall. A good PLP frames the decision in three sentences, then surfaces 12-24 well-organized options with the signals (price, rating, badge) the buyer actually scans for.
The reason category pages outrank PDPs on head terms: head queries express category intent, not SKU intent. “Running shoes” wants a list and a guide; “Brooks Ghost 16 men’s 10D” wants one product. Match the intent or lose to whoever does.
Deep dive: the 2026 reality
Google’s commercial-intent classification distinguishes three SERP shapes for shopping queries: Product Pack (PDP-flavored, Amazon and Walmart dominate), Refinement Carousel (PLP-flavored, retailers and review sites dominate), and Information Hub (guide-flavored, editorial sites dominate). Head terms — “running shoes,” “office chairs,” “espresso machines” — increasingly trigger the Refinement Carousel, with AI Overviews layered on top.
AI Overviews on category queries cite 2-4 sources by default in tested SERPs as of Q1 2026. The pattern: one editorial guide (Wirecutter, Wired, Tom’s Guide), one or two retailer category pages with clean schema, and sometimes a Reddit thread. Retailers without CollectionPage + ItemList markup do not appear in this citation set.
The Helpful Content classifier treats category pages as a high-risk surface because they are the most templatable. The 2024 March update demoted dozens of mid-market retailers running auto-generated PLP intros from a content-spinner. Distinguishing markers Google appears to weight:
- Original imagery in the intro (not stock).
- Editorial signals: byline, last-updated date, “we tested” or “we stocked since” framing.
- Real merchandising: products visible above the fold, not buried under 1200 words of intro.
- Internal link diversity: category linking out to specific guides, related categories, and the right sub-categories.
Pagination continues to be misunderstood. Google deprecated rel="next"/rel="prev" in 2019 and never reinstated them. The current best practice: paginate with crawlable <a> links (/category?page=2), self-canonicalize paginated pages (do not canonicalize page=2 to page=1), and use View All only when the full grid renders under 100 products.
Faceted state on category pages deserves its own module (61). The PLP question here is: which subset of facets, if any, deserve their own indexable URL? The answer for most catalogs: 5-30 high-demand facet combinations per parent category, indexed; everything else is noindex,follow. Module 61 covers the math.
Visualizing it
flowchart TD
A[Category URL] --> B[Above the fold]
B --> C[H1 with category term]
B --> D[Editorial intro 100-200 words]
B --> E[Hero image or category banner]
B --> F[Visible product grid]
A --> G[Mid page]
G --> H[Filter or facet rail]
G --> I[Product cards with price + rating]
A --> J[Below grid]
J --> K[Buyer's guide or FAQ]
J --> L[Related categories]
J --> M[Sub-category links]
C --> N[CollectionPage + ItemList JSON-LD]
I --> N
N --> O[AI Overview citation eligible]
Bad vs. expert
The bad approach
Most platforms ship a category page that looks like this once you strip the chrome:
<h1>Running Shoes</h1>
<div class="product-grid">
<!-- 12 product cards, no intro, no guide, no schema -->
</div>
<div class="seo-text" style="color:#777; font-size:11px; margin-top:80px">
<p>Welcome to our running shoes collection. We have a wide selection of
running shoes from top brands. Whether you're looking for road running
shoes, trail running shoes, or running shoes for beginners, we have the
best running shoes for you. Shop our running shoes today...</p>
</div>
The “SEO text” is keyword-stuffed, hidden, and below the grid. There is no schema. No buyer’s guide. No internal links to sub-categories. The page targets the keyword and ignores the user. Helpful Content classifier flags this exact pattern, and the page sits at position 18 forever.
The expert approach
<head>
<title>Running Shoes — Road, Trail & Stability | Northshore</title>
<meta name="description" content="Shop 247 running shoes from Brooks, Hoka, Nike, Saucony, Asics. Free returns, expert fit notes, in-stock from Portland warehouse.">
</head>
<body>
<nav aria-label="Breadcrumb">
<a href="/">Home</a> /
<a href="/shoes">Shoes</a> /
<span>Running Shoes</span>
</nav>
<h1>Running Shoes</h1>
<div class="intro">
<p>We carry 247 running shoes across <a href="/shoes/running/road">road</a>,
<a href="/shoes/running/trail">trail</a>, and
<a href="/shoes/running/stability">stability</a> categories from 14 brands.
Our team logs at least 30 miles in every model we stock; the notes on each
PDP reflect what we actually felt.</p>
<p>If you're new: most road runners start in a neutral cushioned shoe
(Brooks Ghost, Hoka Clifton). Trail runners need a separate model with
aggressive lugs. Heavier runners (190+ lb) generally do better in
stability shoes regardless of arch type. <a href="/guides/how-to-pick-a-running-shoe">Full sizing guide here.</a></p>
</div>
<section class="filters" aria-label="Filter products"><!-- ... --></section>
<ul class="product-grid"><!-- 24 product cards above the fold on desktop, 6 on mobile --></ul>
<nav class="sub-categories">
<h2>Shop by type</h2>
<a href="/shoes/running/road">Road (132)</a>
<a href="/shoes/running/trail">Trail (61)</a>
<a href="/shoes/running/stability">Stability (39)</a>
<a href="/shoes/running/racing">Racing (15)</a>
</nav>
<section class="guide">
<h2>How we recommend running shoes</h2>
<!-- 400-word guide with subheadings: pronation, cushioning, drop, fit -->
</section>
</body>
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "Running Shoes",
"url": "https://northshore.example/shoes/running",
"description": "Running shoes from Brooks, Hoka, Nike, Saucony, Asics — road, trail, and stability options.",
"breadcrumb": {
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://northshore.example/" },
{ "@type": "ListItem", "position": 2, "name": "Shoes", "item": "https://northshore.example/shoes" },
{ "@type": "ListItem", "position": 3, "name": "Running Shoes", "item": "https://northshore.example/shoes/running" }
]
},
"mainEntity": {
"@type": "ItemList",
"numberOfItems": 247,
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"url": "https://northshore.example/products/brooks-ghost-16",
"name": "Brooks Ghost 16"
},
{
"@type": "ListItem",
"position": 2,
"url": "https://northshore.example/products/hoka-clifton-9",
"name": "Hoka Clifton 9"
}
]
}
}
Why it works: the H1 matches the head query exactly; the intro is short, useful, and links to refining categories; the grid appears immediately; sub-category links cap the facet explosion at four authoritative sub-categories; the buyer’s guide gives the page editorial weight without burying the products; CollectionPage + ItemList markup is the citation key for AI Overviews. Tested across mid-market apparel and outdoor retailers, this pattern lifts category-page sessions 40-120% within two quarters.
Internal linking from PLP to PDP and back:
| Link direction | Anchor pattern | Why |
|---|---|---|
| PLP → PDP | Product name as anchor on card | Standard, expected |
| PLP → sub-category | Category name + count (132) | Disambiguates intent, helps facet decisions |
| PLP → buyer’s guide | ”How to pick a running shoe” descriptive anchor | Trust signal, dwell time |
| PDP → PLP | Breadcrumb + “More running shoes” link | Builds PLP equity |
| Editorial → PLP | Specific anchor: “we tested 14 running shoes” | Strongest signal — not just a footer link |
Do this today
- In Ahrefs or Semrush, export your top 50 categories by potential traffic. Cross-reference against your actual ranking. Any category ranking position 8-30 with intro copy under 50 words above the grid is a quick win — write 150 words, add internal links, ship.
- Run Screaming Frog with custom extraction for
h1, the first paragraph afterh1, and the count of internal links from the page. Filter for PLPs with intro under 50 words OR fewer than 10 outbound internal links. Those are your highest-leverage rewrites. - Validate
CollectionPageandItemListschema with Rich Results Test. If your platform doesn’t ship it (Shopify default, most WooCommerce themes), add it via theme injection or a plugin like Yoast E-commerce or RankMath Pro. - Audit above-the-fold real estate on mobile. Open PageSpeed Insights, view the field-data screenshot, and confirm at least 4 product cards are visible above the 720px fold on a Pixel 7. If the intro pushes the grid below the fold, shorten the intro to 60-80 words and move the rest below the grid.
- Open GSC → Performance → filter by URL containing
/category/or/collections/. Sort by impressions descending, CTR ascending. Any PLP with 5K+ impressions and CTR under 1.5% has a title/description problem. Rewrite for buyer language, not template language. - Map facet → URL decisions. Use GSC + GA4 to identify the 5-30 most-searched facet combinations per parent category (e.g., “men’s road running shoes,” “women’s trail running shoes”). Promote those to indexable URLs with their own intro copy. Module 61 covers the rules.
- Add breadcrumb navigation with
BreadcrumbListschema on every PLP. Crawlable<a>elements, not JS-rendered. This single change is worth 5-15% category traffic on most catalogs that don’t have it. - Place the buyer’s guide content below the grid, not above. Above the fold belongs to products and an intro. Below-the-grid editorial content (300-600 words) feeds Helpful Content signals without pushing the grid down.
Mark complete
Toggle to remember this module as mastered. Saved to your browser only.
More in this part