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.

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:
- Map: One head term per category. Modifiers (gender, type, material) go to subcategories. Filters with no search demand stay out of the index.
- 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.
- 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.
- 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 page | Platform | Title tag | Copy on the page | JSON-LD |
|---|---|---|---|---|
| colourpop.com /collections/lippie-stix | Shopify | "Lippie Stix" (collection name only) | None rendered; the description exists only as the meta tag | ItemList |
| colourpop.com /collections/shadow-palette | Shopify | "ColourPop®: Shop Eyeshadow Palettes | Bright, Bold Eye Makeup" | None | ItemList |
| porterroad.com /collections/beef | Shopify | "Pasture-Raised, Dry Aged Beef – Porter Road" | None | None |
| burrow.com /sofas | Shopify (headless) | "Burrow" (brand only, empty meta description) | Five paragraphs below the grid | BreadcrumbList |
| barefootbuttons.com /product-category/accessories/ | WooCommerce | "Accessories Archives - Barefoot Buttons" (WordPress default) | One paragraph above the grid | CollectionPage, BreadcrumbList |
| allbirds.com /collections/mens | Shopify | "Allbirds: Sustainable Men's Shoes, Wear-All-Day Comfort" | Three short paragraphs and an FAQ | CollectionPage, FAQPage |
| gymshark.com /collections/leggings/womens | Shopify (headless) | "Women's Leggings - For Gym, Workout & Everyday" | About a dozen paragraphs and an FAQ; two H1s | FAQPage |
| skullcandy.com /collections/wireless-wired-bluetooth-headphones | Shopify | "Shop Wired, Wireless & Bluetooth Headphones | Skullcandy" | Long guide below the grid, linking each sub-range | FAQPage, 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.
- 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".
- 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.
- 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.
- Send product names to product pages. "pegasus 41" is not a category query. A category page that chases it competes with its own product.
- 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.
One head term, one URL. Modifiers go down a level, filters stay out of the index.
| Query | What it is | Page that owns it | URL |
|---|---|---|---|
| running shoes | Head term | Category | /collections/running-shoes |
| women's running shoes | Gender modifier | Subcategory | /collections/womens-running-shoes |
| trail running shoes | Type modifier | Subcategory | /collections/trail-running-shoes |
| running shoes size 11 | Facet with no demand | Filter, not indexed | ?size=11 (noindex or blocked) |
| pegasus 41 men's | Product name | Product page | /products/pegasus-41-mens |
| running shoes | Same head term, second page | Cannibalisation flag | /collections/all-shoes copy also targets it |
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.
Seven blocks, in the order a shopper and a crawler meet them
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.
| Pattern | Shopify example | WooCommerce example |
|---|---|---|
| Platform default | Lippie Stix | ColourPop | Accessories Archives - Barefoot Buttons |
| Head term first | Lipsticks | ColourPop | Pedalboard Accessories | Barefoot Buttons |
| Head term plus two subcategories | Lipsticks: Matte, Satin and Liquid | ColourPop | Pedalboard Accessories: Spacers and Mounts | Barefoot Buttons |
| Shop-prefixed (Skullcandy's pattern) | Shop Lipsticks | ColourPop | Shop 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.
- 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.
- 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.
- 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.
- 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.
Step 5: Internal links into the category: nav, breadcrumbs, guides
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.
- 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.
- 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.
- 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.
- 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.
Four reads per category page, once a month
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
- Google Search Central: help Google understand your ecommerce site structure
- Google Search Central: designing a URL structure for ecommerce sites
- Google Search Central: pagination, incremental page loading and their impact on Google Search
- Google Search Central: managing crawling of faceted navigation URLs
- Google Search Central: product snippet structured data
- Google Search Central: include structured data relevant to ecommerce
- Google Search Central: breadcrumb (BreadcrumbList) structured data
- Google Search Central: control your snippets in search results
- Search Console Help: Performance report
- Analytics Help: GA4 Landing page report
- r/SEO, December 2024: should you focus on category pages or product pages?
- Live checks, September 25, 2026: colourpop.com (lippie-stix, shadow-palette), porterroad.com/collections/beef, burrow.com/sofas, barefootbuttons.com/product-category/accessories/, allbirds.com/collections/mens and ?page=2, gymshark.com/collections/leggings/womens and ?page=2, skullcandy.com/collections/wireless-wired-bluetooth-headphones. Read from the HTML returned to a plain HTTP request.
- Keyword volumes and difficulty: DataForSEO Labs, United States, September 2026. SERP: DataForSEO SERP API, United States desktop, September 25, 2026.
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.
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.