Back to blog
guides11 min read

Category Page SEO: Your Head-Term Asset Is Usually a Blank Grid

Head terms rank on category pages, and most stores ship them as a grid with a templated title. How to map, write, paginate, link and measure the category page.

Aditi ChaturvediSeptember 25, 2026
Category page SEO: your head-term asset, in 4 steps: Map; Write; Title and paginate; Link and measure.
TL;DR

The category page (a collection on Shopify, a product category on WooCommerce) is where a store's head terms rank, and most stores ship it as a product grid with a templated title and no copy. Fix it in this order:

  1. Map: One head term per category. Modifiers (gender, type, material) go to subcategories. Filters with no search demand stay out of the index.
  2. Write: One to three sentences and the subcategory links above the grid; a 150 to 400 word buying guide, top-product links and a short FAQ below it.
  3. Title and paginate: Head term first, brand last, same title on every page of the sequence, and every ?page=N canonical to itself, never to page 1.
  4. Link and measure: Nav, breadcrumbs with BreadcrumbList, and guides all link in. Then read Search Console filtered to the URL and GA4 revenue per landing page, monthly.

"category page seo" gets 50 US searches a month at difficulty 3, and "ecommerce category page seo" another 30 (DataForSEO, US, September 2026). Small numbers for a page type that carries most of a store's organic clicks.

Every page ranking for this query tells you to write 300 words on the category. None checks what live stores actually ship, or what Google's own ecommerce docs say about pagination, facets and schema on a category page. This one does both. Try CrawlRaven free: 1 site, no credit card →

The short answer: head terms rank on category pages, and most of them ship empty

In December 2024 a store owner posted a three-month traffic split to r/SEO. Of 24,583 organic clicks, 13,624 came from category pages and 1,517 from product pages. Nobody in the thread found the ratio surprising, and neither should you.

Category page SEO is the work of making that page earn the head term it already half-ranks for. I fetched eight live category pages this week. Three had no copy at all, two shipped a title that was just the collection name or the brand name, and one WooCommerce store shipped WordPress's default "Archives" title.

The fix is four decisions, not a word count: which term each category owns, what sits around the grid, how the title and pagination behave, and how you will know it worked. Seven steps, with Google's ecommerce documentation as the referee.

Key Takeaways

  • →One head term, one URL: Modifiers become subcategories; filters with no demand stay noindexed. Two pages on one term split the links and the ranking.
  • →Copy has two jobs, in two places: Definition and subcategory links above the grid. A 150 to 400 word buying guide, top-product links and FAQ below it.
  • →The title is yours to replace: Shopify emits the collection name plus the shop name; WooCommerce emits "X Archives - Site". Head term first, brand last.
  • →Page 2 canonicalises to page 2: Google's pagination doc: never use page 1 as the canonical for the sequence, and keep sorts and filters out of the index.
  • →Schema is mostly a distraction here: Product rich results only support single-product pages. BreadcrumbList is the one type Google lists for category pages.

What eight live category pages actually ship (checked September 2026)

I fetched each page with a plain HTTP request on September 25, 2026 and read the HTML. No store's copy is quoted; the table records what each page does, not what it says.

Category pagePlatformTitle tagCopy on the pageJSON-LD
colourpop.com /collections/lippie-stixShopify"Lippie Stix" (collection name only)None rendered; the description exists only as the meta tagItemList
colourpop.com /collections/shadow-paletteShopify"ColourPop®: Shop Eyeshadow Palettes | Bright, Bold Eye Makeup"NoneItemList
porterroad.com /collections/beefShopify"Pasture-Raised, Dry Aged Beef – Porter Road"NoneNone
burrow.com /sofasShopify (headless)"Burrow" (brand only, empty meta description)Five paragraphs below the gridBreadcrumbList
barefootbuttons.com /product-category/accessories/WooCommerce"Accessories Archives - Barefoot Buttons" (WordPress default)One paragraph above the gridCollectionPage, BreadcrumbList
allbirds.com /collections/mensShopify"Allbirds: Sustainable Men's Shoes, Wear-All-Day Comfort"Three short paragraphs and an FAQCollectionPage, FAQPage
gymshark.com /collections/leggings/womensShopify (headless)"Women's Leggings - For Gym, Workout & Everyday"About a dozen paragraphs and an FAQ; two H1sFAQPage
skullcandy.com /collections/wireless-wired-bluetooth-headphonesShopify"Shop Wired, Wireless & Bluetooth Headphones | Skullcandy"Long guide below the grid, linking each sub-rangeFAQPage, Organization

Four patterns came out of it:

  • The platform default title is the norm. ColourPop ships the bare collection name, Barefoot Buttons ships WordPress's "Accessories Archives", and Burrow's sofas page returned a title that was just "Burrow".
  • Copy exists and never renders. ColourPop's collection has a description, because it is in the meta tag, but the theme prints nothing on the page.
  • The big stores put the guide below the grid. Skullcandy's headphones page has a long buying guide under the products, with a paragraph and link per sub-range. Barefoot Buttons puts its one paragraph above.
  • Pagination is mostly right on Shopify. Allbirds and Gymshark both serve ?page=2 with a self-referencing canonical and page 1's title, which is what Google asks for.

The gap between a store that ranks for its head terms and one that doesn't is rarely technical. It is a title nobody replaced and copy nobody wrote. Our ecommerce SEO checklist and Shopify SEO checklist each give it one row; this is the long version.

Step 1: Map one head term to one category, and modifiers to subcategories

Google's ecommerce site structure guidance is short: link from menus to category pages, from categories to subcategories, and from subcategories to every product. It adds that Google reads links between pages, not URL structure, to infer importance. Your keyword map is a link map too.

  1. List the head terms. Ten to fifty two-word commercial queries that describe a product type, not a product: "running shoes", "dry aged beef", "modular sofas".
  2. Give each term exactly one URL. The category page that should rank. If two candidates exist, pick one now and fix the other in step 5.
  3. Push modifiers down a level. Gender, type, material and use-case modifiers with their own demand become subcategories with their own URL, H1 and copy. Modifiers without demand stay as filters.
  4. Send product names to product pages. "pegasus 41" is not a category query. A category page that chases it competes with its own product.
  5. Flag the collisions. Any term two pages target, including a blog post or an "all" collection, is a cannibalisation flag. One page keeps the term; the other is rewritten around a different one.
Keyword to category map

One head term, one URL. Modifiers go down a level, filters stay out of the index.

QueryWhat it isPage that owns itURL
running shoesHead termCategory/collections/running-shoes
women's running shoesGender modifierSubcategory/collections/womens-running-shoes
trail running shoesType modifierSubcategory/collections/trail-running-shoes
running shoes size 11Facet with no demandFilter, not indexed?size=11 (noindex or blocked)
pegasus 41 men'sProduct nameProduct page/products/pegasus-41-mens
running shoesSame head term, second pageCannibalisation flag/collections/all-shoes copy also targets it
The red row is the one to catch: two URLs written for the same head term split the links and the rankings between them. Pick the owner, then rewrite the other page's copy and title around a different term.

This is the part we built CrawlRaven for. The keyword map assigns every head term to the category that should rank and flags two categories competing for one term, and because Search Console and GA4 are built in, the same view shows organic revenue per category page. Start with the collection page SEO checker on one URL.

The free plan covers one site, and a lifetime licence for three sites was $49 at launch. Lifetime pricing steps up as licenses sell, so check the pricing page for the current batch. See pricing.

When a filter deserves its own indexable page

Google's faceted navigation guidance splits the decision in two: if you don't need filtered URLs indexed, stop them being crawled; if you do, follow the URL rules and accept the crawl cost. Sort orders and filter variants of the same list stay out, with noindex or robots.txt.

  • Promote a facet to a subcategory when it has its own search demand, enough products to fill a page, and a reason to carry its own copy. Give it a clean path, an H1 and a self-canonical.
  • Keep a facet as a filter when it is size, price, colour or availability with no query behind it. Use ?key=value parameters, the & separator, a fixed parameter order, and noindex or a robots.txt disallow.
  • Return a 404 for empty combinations. Google asks for a real 404 when a filter set has no results, not a redirect to an error page. An empty category gets noindexed, or a 404.

Step 2: Write category page content that helps someone choose

The copy has two readers. Google wants to know what the page is about in words the H1 doesn't cover. A shopper wants to know how to pick between the forty things in the grid. Copy that serves only the first is the 500-word block nobody reads.

Above or below the grid, and how much

  • Above the grid: one to three sentences. Define the category and name the subcategories, with links. Barefoot Buttons does this with one paragraph. Short, because a shopper who knows what they want should not scroll past an essay.
  • Below the grid: 150 to 400 words with headings. The buying guide, the "which one is right for me" section, the FAQ. Skullcandy and Burrow both work this way. The range matters less than whether the copy answers a question the grid can't.
  • Never as a hidden block. A "read more" toggle that keeps the text in the HTML is fine. Copy loaded only after a click is copy Google may never see.

What goes in the copy

  • A definition sentence that uses the head term once, naturally, and says what the category is for.
  • How to choose: three to five criteria a buyer actually weighs. Drop for running shoes, cut and dry-ageing time for beef, seat depth and fabric for sofas.
  • Links to the subcategories with the subcategory's head term as the anchor, not "see more".
  • Links to three to five top products by revenue, by name. Google's structure doc recommends linking best sellers from prominent pages to signal their importance.
  • A short FAQ of three to five real questions from the queries report. FAQPage markup is fine, but Google restricted FAQ rich results to government and health sites in August 2023, so expect no SERP accordion.
Anatomy of a category page

Seven blocks, in the order a shopper and a crawler meet them

1Home › Shoes › Running shoes
2
Running shoes
3Women'sMen'sTrailStability
4
5
How to choose a running shoe
Road, trail or track
6
What is a stability running shoe?
How often should I replace running shoes?
7
123Next
1
Breadcrumb
Home > Shoes > Running shoes, marked up as BreadcrumbList
2
H1 and intro
The head term as the H1, then one to three sentences that define the category
3
Subcategory links
Descriptive anchors to the modifier pages: women's, trail, stability
4
Product grid
Every product linked with an <a href>, the name as the anchor
5
Buying guide
150 to 400 words with headings: how to choose, what the differences mean
6
FAQ
Three to five real questions from the queries report
7
Pagination
?page=2 links, each page canonical to itself
Blocks 2 and 3 sit above the grid because they are short. Block 5 sits below it because a shopper who already knows what they want should reach the products first.
Opinion· Aditi's take: write the guide for the shopper, and the head term takes care of itself
Every category copy brief I have seen starts with a keyword density target and ends with a paragraph that repeats the H1 six times. The category pages that hold a head term read like a good shop assistant: what this stuff is, how the options differ, the three we sell most. Write that, link it, stop counting.

Step 3: Title tag and H1 patterns for category pages

Every platform writes a default title tag for a category, and every default uses the internal name of the collection, not the query a shopper types. Shopify emits the collection title plus the shop name. WooCommerce emits "Accessories Archives - Site name", a word no shopper has ever searched.

PatternShopify exampleWooCommerce example
Platform defaultLippie Stix | ColourPopAccessories Archives - Barefoot Buttons
Head term firstLipsticks | ColourPopPedalboard Accessories | Barefoot Buttons
Head term plus two subcategoriesLipsticks: Matte, Satin and Liquid | ColourPopPedalboard Accessories: Spacers and Mounts | Barefoot Buttons
Shop-prefixed (Skullcandy's pattern)Shop Lipsticks | ColourPopShop Pedalboard Accessories | Barefoot Buttons
  • Head term first, brand last. The searcher's words are what Google bolds and what the eye scans. Add subcategories to the title only if the page links to them.
  • H1 is the head term without the brand. "Men's Shoes", "Sofas", "Dry Aged Beef" are all fine. Gymshark ships two H1s on its leggings page; one is enough.
  • Same title across the paginated sequence. Google's pagination doc says pages in a sequence don't need distinct titles. Allbirds and Gymshark reuse page 1's title on page 2.
  • Measure it in pixels. A desktop title line is about 600 pixels; check the string that ships in the SERP preview. Shopify meta descriptions and title tags covers where each Shopify fallback comes from.

Step 4: Pagination: every page canonicalises to itself

Google's pagination documentation is unusually direct. Give each page a unique URL such as ?page=2. Don't use the first page of a paginated sequence as the canonical page; give each page its own canonical URL. Link the pages sequentially with real anchors and back to page 1. Google no longer uses rel=next and rel=prev.

  1. Fetch ?page=2 and read the canonical. It should be the ?page=2 URL. A canonical to page 1 tells Google pages 2 to 9 are duplicates, and Google may stop crawling them.
  2. Check the links are anchors. Google's crawlers don't click buttons or trigger JavaScript to load more results. A "load more" button with no href hides every product past the first screen.
  3. Keep sorts and filters out. ?sort_by=price is the same list in a different order; noindex it or block it. Shopify strips sort parameters from the canonical by default.
  4. Don't paginate with fragments. Google ignores #page=2 and may treat the link as already crawled.

Shopify's duplicates are around products, not pagination; see Shopify canonicals and duplicate content. For the crawl-side checks on other platforms, see technical SEO for ecommerce.

Google's structure doc puts it plainly: the more links a page has to it within a site, the higher its relative importance. Category pages are also the page type almost nobody links to from outside, as SaaS SEO vs ecommerce SEO covers. So internal linking is most of the authority a category page will get.

  • Main navigation. Every head-term category in the menu, one click from the homepage, as an <a href>, not a JavaScript handler.
  • Breadcrumbs with BreadcrumbList. Home > Shoes > Running shoes on every product and subcategory page. Google lists BreadcrumbList first among structured data relevant to ecommerce. Our breadcrumb schema generator writes the JSON-LD.
  • Guides and blog posts. A buying guide that links "running shoes" to the category, with those words as the anchor, is the most valuable link it will get. Never let the guide chase the head term itself.
  • Both directions between category and product. A "more running shoes" link in the product template points every product at its category. And Google warns that if a category doesn't link to all its products, Googlebot may not find them by crawling.

Run the internal link analyzer on a category URL to count what already points at it, and with which anchors.

Step 6: CollectionPage, ItemList and Product schema: what Google actually supports

Of the eight pages I fetched, two carried CollectionPage, two carried ItemList, three carried FAQPage and two carried BreadcrumbList. Only the last two do anything on Google. What the documentation says about each type of schema markup on a category page:

  • Product markup on a category grid: not supported. Google's product snippet documentation says product rich results only support pages about a single product, gives "shoes in our shop" as the counter-example, and recommends marking up product pages instead of category pages.
  • BreadcrumbList: supported. The one type on Google's ecommerce structured data page that applies to a category page. It can turn the URL line in the result into a trail.
  • CollectionPage and ItemList: harmless, unmeasurable. Neither is a Google Search feature. Yoast adds CollectionPage on WooCommerce archives; ColourPop's theme adds ItemList. Leave them alone.
  • FAQPage: markup fine, rich result gone. Since August 2023 FAQ rich results show only for government and health sites. The FAQ itself still helps the shopper and the LLM summarising your page.

Step 7: Measure the category in Search Console and GA4

A category page is one URL, which makes it the easiest page type on the store to measure. Two reports, both filtered to the exact URL, once a month.

  1. Search Console, Performance, Page filter set to the exact category URL. Read clicks, impressions and position, three months against the previous three. Then the Queries tab: the head term at position 8 to 20 with few clicks is the page that needs copy and links.
  2. Repeat for ?page=2. If page 2 has the impressions and page 1 doesn't, the canonical or the internal links point Google at the wrong page of the sequence.
  3. GA4, Reports, Engagement, Landing page, filtered to the same URL. Read Sessions and Total revenue for organic search. Revenue per session tells you whether the ranking is worth chasing.
  4. One row per category, then decide. High impressions and low position: write and link. High position and low revenue: the term or the page is wrong. Neither: move on.
Measurement flow

Four reads per category page, once a month

1
Search Console, filtered to the exact category URL
Where: Performance > Search results > Page filter > URLs exactly matching
Read: Clicks, impressions and average position for this one URL, over 3 months against the previous 3.
2
Queries tab: does the head term show up, and where?
Where: Same report, Queries tab, sorted by impressions
Read: The head term at position 8 to 20 with impressions and few clicks is the page that needs copy and links. Missing entirely means another page owns it.
3
GA4 Landing page report, filtered to the same URL
Where: Reports > Engagement > Landing page, organic search traffic
Read: Sessions and Total revenue that began on this page. Revenue per session tells you if the ranking is worth the work.
4
Decide: copy, links, or leave it
Where: One row per category, rerun monthly
Read: High impressions, low position: write and link. High position, low revenue: the term or the page is wrong. Neither: move on.
Run step 1 on ?page=2 as well. If page 2 has the impressions, the canonical or the internal links are pointing Google at the wrong page of the sequence.

Why your category page still isn't ranking, and what to check

  • Another page on your site owns the term. Check the queries report for the head term with no page filter. If a blog post or the "all products" collection is the URL Google shows, retarget it or point it at the category.
  • Page 2 or a filtered URL is the one indexed. Run the page filter on ?page=2 and on the most-linked filter URL. A canonical to page 1, or a filter with more internal links than the category, sends the ranking to the wrong URL.
  • The SERP wants a different kind of page. If the results are guides and reviews rather than grids, the category needs a guide beside it, linking in. One commenter in the same r/SEO thread: "Google SERP looks like a category page on an increasing number of commercial keywords." When it doesn't, a grid alone won't rank.
  • Nothing links to it. A category reachable only from a filter, a footer or a search box has no importance signal. Put it in the navigation and the breadcrumbs, then link it from a guide.
  • The category is thin or empty. Six products and no copy is a page Google has little reason to index. Merge it into its parent, or noindex it until the range exists.

Category page SEO FAQs

Mapping and structure

How many categories should a store have? One per head term with real demand and enough products to fill a page, then subcategories for modifiers with their own demand. Six products and no query is a filter that got a URL.

Should subcategory pages be indexed? Yes, when they own a modifier query and carry their own H1, copy and self-canonical. A filter with a prettier URL is still a filter.

Content and titles

Does category page content have to be unique? Yes. Copy pasted across sibling categories gives Google nothing to distinguish them by. Page 2 can share page 1's title, but the buying guide belongs on page 1 only.

Should the meta description be written by hand? For head-term categories, yes. Google composes snippets from page content when it fits the query better; a grid with no copy gives it nothing, so the description is the only sentence it has.

Pagination, facets and schema

Is a "view all" page better than pagination? Only for short ranges. Google's pagination doc notes a single page can't hold very large numbers of results. Thirty products: one page. Three hundred: paginate.

Does infinite scroll hurt category page SEO? It does when products past the first screen exist only after a scroll event, which Google's crawlers don't trigger. Pair it with real paginated URLs underneath, each with its own canonical.

Sources

Frequently asked questions

What is a category page on an ecommerce website?

A category page lists the products that share a type, such as running shoes or lipsticks, usually as a grid with filters and pagination. Shopify calls it a collection, WooCommerce a product category. It is the page that ranks for the head term, because a searcher typing "running shoes" wants a choice, not one product.

Are category pages or product pages better for SEO?

Both, for different queries. Category pages rank for broad commercial terms, product pages for exact product names and long-tail specifics. In a December 2024 r/SEO thread, a store owner with a couple of thousand products reported 13,624 of 24,583 clicks over three months from category pages against 1,517 from product pages.

How many words should a category page have?

Enough to define the category and help a shopper choose, which in practice is one to three sentences above the grid and a 150 to 400 word buying guide below it. Google's ecommerce guidance asks for content that is useful to shoppers, not a word count, and a keyword-stuffed 500-word block below the fold helps nobody.

Should category page content go above or below the products?

Split it. Put the definition and the subcategory links above the grid, where they are short and useful to a shopper who has not chosen yet. Put the buying guide, top-product links and FAQ below the grid, so a shopper who knows what they want reaches the products first. Gymshark and Skullcandy both do the second half.

What should the title tag of a category page be?

The head term first, then a modifier or two the category genuinely covers, then the brand: "Running Shoes: Road, Trail and Stability | Brand". Replace the platform default. Shopify emits the collection name plus the shop name, and WooCommerce emits "Accessories Archives - Site", which is what Barefoot Buttons shipped when I checked in September 2026.

Should paginated category pages canonicalise to page 1?

No. Google's pagination documentation says not to use the first page of a paginated sequence as the canonical page and to give each page its own canonical URL. Each ?page=N should be self-canonical, link to the next page and back to page 1, and can share page 1's title and description.

Should filtered or faceted category URLs be indexed?

Only when the filter has its own search demand and enough products to be a real page, in which case make it a subcategory with a clean URL and copy. Everything else, including sort orders, should be kept out with a noindex meta tag or a robots.txt disallow, which is what Google's faceted navigation and pagination guidance recommends.

Does CollectionPage or ItemList schema help a category page rank?

Not measurably. Neither is a Google Search feature, and Google's product snippet documentation says product rich results only support pages about a single product and recommends marking up product pages instead of category pages. BreadcrumbList is the one structured data type on a category page that Google lists as relevant for ecommerce.

What is collection page SEO on Shopify?

The same job on Shopify's category template: a hand-written SEO title and description in the collection's Search engine listing, a collection description the theme actually renders, links to sub-collections, and pagination that canonicalises each ?page=N to itself. Shopify handles the last one by default; the copy and the title it leaves to you.

How do I know if a category page is working?

Filter Search Console's Performance report to the exact category URL and read clicks, impressions and the queries tab: the head term should be there and moving. Then filter GA4's Landing page report to the same URL for sessions and Total revenue from organic search. One row per category, rerun monthly.

Aditi Chaturvedi
About the Author

Aditi Chaturvedi

15+ years of growing SaaS websites through SEO | Author, 200-Point Audit Checklist

Aditi has spent 15+ years helping SaaS companies scale organic traffic through technical SEO and content strategy. She is the author of the CrawlRaven 200-Point Audit checklist used by agencies and in-house teams to systematically improve search performance.

category page seocollection page seoecommerce category page seocategory page contentshopify collection page seocategory page description seosubcategory pages seoecommerce seopaginationinternal linking

Reader runs SEO for an online store, knows the category pages are thin, and wants to know which categories to fix first and which head term each one should own.

Every head term mapped to the category that should rank, with the revenue it already earns

The keyword map flags two categories fighting for one term

CrawlRaven joins Search Console, GA4 and a 200-point crawl into one ranked plan. On a store it assigns every head term to one category, flags cannibalisation, and shows organic revenue per category page, so you write copy where the money is. Free plan for 1 site, no credit card required.

CrawlRaven connects Google Search Console and GA4, runs 200+ technical SEO checks, and joins all three into one prioritized fix list, so you know what is broken, what it is costing you, and what to fix first.

✓ No credit card required·200+ checks·GSC + GA4 + full-site crawl
Free plan — no credit card

Stop exporting. Start shipping.

Connect Search Console, import your Ahrefs or Semrush lists, and get one ranked plan. Start free with one site, or grab a limited lifetime deal from $39, only 5 licenses left.

3
Data sources joined
200+
Point audit checks
1
Ranked plan out