ecommerce-seo
Use this skill when optimizing e-commerce sites for search engines - product page SEO, faceted navigation crawl control, category taxonomy, product schema markup, pagination handling, inventory-aware SEO (out-of-stock pages), and e-commerce site architecture. Triggers on any task involving online store search optimization, product listing pages, shopping search results, or e-commerce technical SEO challenges.
marketing seoecommerceproduct-pagesfaceted-navigationproduct-schemacategory-seoWhat is ecommerce-seo?
Use this skill when optimizing e-commerce sites for search engines - product page SEO, faceted navigation crawl control, category taxonomy, product schema markup, pagination handling, inventory-aware SEO (out-of-stock pages), and e-commerce site architecture. Triggers on any task involving online store search optimization, product listing pages, shopping search results, or e-commerce technical SEO challenges.
ecommerce-seo
ecommerce-seo is a production-ready AI agent skill for claude-code, gemini-cli, openai-codex, and 1 more. Optimizing e-commerce sites for search engines - product page SEO, faceted navigation crawl control, category taxonomy, product schema markup, pagination handling, inventory-aware SEO (out-of-stock pages), and e-commerce site architecture.
Quick Facts
| Field | Value |
|---|---|
| Category | marketing |
| Version | 0.1.0 |
| Platforms | claude-code, gemini-cli, openai-codex, mcp |
| License | MIT |
How to Install
- Make sure you have Node.js installed on your machine.
- Run the following command in your terminal:
npx skills add AbsolutelySkilled/AbsolutelySkilled --skill ecommerce-seo- The ecommerce-seo skill is now available in your AI coding agent (Claude Code, Gemini CLI, OpenAI Codex, etc.).
Overview
E-commerce SEO is a specialized discipline distinct from standard website SEO. The scale, dynamism, and structure of online stores create unique challenges: millions of URLs generated by product variants and faceted navigation, rampant duplicate content from sorting and filtering, constant inventory churn as products go out of stock or discontinued, and intense competition for shopping-specific features like rich snippets and Google Shopping placements. This skill provides the patterns and decision frameworks needed to win search for online stores.
Tags
seo ecommerce product-pages faceted-navigation product-schema category-seo
Platforms
- claude-code
- gemini-cli
- openai-codex
- mcp
Related Skills
Pair ecommerce-seo with these complementary skills:
Frequently Asked Questions
What is ecommerce-seo?
Use this skill when optimizing e-commerce sites for search engines - product page SEO, faceted navigation crawl control, category taxonomy, product schema markup, pagination handling, inventory-aware SEO (out-of-stock pages), and e-commerce site architecture. Triggers on any task involving online store search optimization, product listing pages, shopping search results, or e-commerce technical SEO challenges.
How do I install ecommerce-seo?
Run npx skills add AbsolutelySkilled/AbsolutelySkilled --skill ecommerce-seo in your terminal. The skill will be immediately available in your AI coding agent.
What AI agents support ecommerce-seo?
This skill works with claude-code, gemini-cli, openai-codex, mcp. Install it once and use it across any supported AI coding agent.
Maintainers
Generated from AbsolutelySkilled
SKILL.md
E-commerce SEO
E-commerce SEO is a specialized discipline distinct from standard website SEO. The scale, dynamism, and structure of online stores create unique challenges: millions of URLs generated by product variants and faceted navigation, rampant duplicate content from sorting and filtering, constant inventory churn as products go out of stock or discontinued, and intense competition for shopping-specific features like rich snippets and Google Shopping placements. This skill provides the patterns and decision frameworks needed to win search for online stores.
When to use this skill
Trigger this skill when the user:
- Wants to improve search rankings for product pages or product listing pages (PLPs)
- Asks about faceted navigation, product filters, or URL parameter handling
- Needs to implement or improve product schema (structured data, rich snippets)
- Is designing category taxonomy, breadcrumbs, or site architecture for a store
- Wants to handle pagination on category or search results pages
- Needs to manage SEO for out-of-stock, discontinued, or seasonal products
- Asks about duplicate content caused by product variants (color, size, etc.)
- Is working on shopping feed optimization or Google Merchant Center integration
- Wants to understand crawl budget management for large catalogs
Do NOT trigger this skill for:
- General website SEO without an e-commerce context (use the
technical-seo-engineeringskill) - Paid shopping ads (Google Shopping campaigns, PMax) - that is a paid media topic
Key principles
Faceted navigation is the #1 crawl budget killer in e-commerce - A store with 10,000 products can generate millions of filter URL combinations. Without explicit crawl control, Googlebot spends its entire budget on low-value filtered pages instead of product and category pages. Always have a faceted navigation crawl strategy before launch.
Category pages often outrank product pages for commercial queries - Searchers looking for "men's running shoes" want options, not a single product. Invest as much SEO effort in category pages (unique introductory copy, internal linking, facet strategy) as in product pages.
Product schema is table stakes for shopping results - Without valid
Product+Offerstructured data, products are ineligible for rich snippets, Google Shopping free listings, and review stars. Implement it on every product page, not just featured items.Out-of-stock is not the same as discontinued - treat them differently - A temporarily unavailable product still has SEO equity, backlinks, and likely returning stock. A discontinued product needs a 301 redirect strategy. Conflating the two leads to unnecessary traffic loss or thin-content penalties.
Internal linking through breadcrumbs and related products builds authority - E-commerce sites are link-poor by nature (few editorial backlinks per product). A strong internal linking architecture - breadcrumbs, related products, "customers also bought" sections, and category crosslinks - distributes PageRank from the domain to deep product pages.
Core concepts
Page type roles
E-commerce sites have three distinct page types with different SEO roles:
- Category pages (PLPs): Target broad commercial queries ("women's boots", "4K TVs"). High traffic potential. Should have unique introductory copy, subcategory links, and facet links to high-value subsets. These are your most important SEO assets.
- Product pages (PDPs): Target specific queries ("Nike Air Max 270 size 10 black"). Lower individual volume but high purchase intent. Differentiate with reviews, specs, and detailed descriptions.
- Listing/search results pages: Dynamically generated, often lower value. Apply
noindexor canonical control by default unless the query has clear organic demand.
Faceted navigation
Faceted navigation lets users filter products by attributes (brand, color, size, price range). Each filter combination typically generates a unique URL. A category with 5 brands x 8 colors x 6 sizes = 240 URLs from one page. Without controls, Googlebot crawls all of them - and most are near-duplicate, thin pages that dilute crawl budget and may trigger quality signals.
The spectrum of crawl control:
robots.txtDisallow - prevents crawling entirely, no PageRank flows throughnoindex, followmeta tag - crawled but not indexed, PageRank flows- Canonical tag pointing to the base category - indexed under category URL
- AJAX/JavaScript-only filtering - no new URLs generated
- Selective indexing of high-value combinations - allows "blue women's boots" to rank
The right approach depends on whether filter combinations have real organic search demand.
Pagination
rel="next" / rel="prev" were officially deprecated by Google in 2019. Modern
approaches:
- Numbered pages: Allow indexing of all paginated pages. Canonical each page to itself (not to page 1). Ensure page 2+ have unique title tags.
- View-all: A single page showing all items, canonicalled from paginated series. Only viable if the page loads fast enough for Googlebot to render.
- Infinite scroll / load more: Must be backed by discrete URLs for SEO. Pure JavaScript infinite scroll creates a single indexed page.
Product lifecycle SEO
Products move through states that require different SEO handling:
- In-stock: Full optimization, product schema with
InStockavailability - Out-of-stock (temporary): Keep the page, update schema to
OutOfStock, add back-in-stock messaging - do not redirect or delete - Discontinued (permanent): 301 redirect to the category, the closest replacement product, or a curated "alternatives" landing page
- Seasonal: Keep URLs year-round if the product recurs, use
PreOrderorDiscontinuedavailability status in the off-season
Shopping search features
Google surfaces e-commerce content in multiple ways beyond blue links:
- Shopping tab / free listings: Requires Google Merchant Center feed + Product schema
- Rich snippets: Review stars, price, availability in organic results - requires
Product+AggregateRating+Offerschema - Product knowledge panel: For brand pages and branded product queries
- "Popular products" carousel: Driven by Merchant Center + page quality signals
Common tasks
Optimize product pages for search
Use this title tag formula:
{Product Name} - {Key Attribute} | {Brand or Store Name}Example: Nike Air Max 270 - Men's Running Shoe in Black | SportStore
Meta description: Include price, key differentiator, and a call to action. Mention availability for high-converting keywords.
Shop the Nike Air Max 270 for $129. Free 2-day shipping on all running shoes.
Available in 8 colors. Returns within 30 days.Product image optimization:
- Filename:
nike-air-max-270-black-mens.jpg(notIMG_4892.jpg) - Alt text:
Nike Air Max 270 in black, men's size 10, side view - Serve multiple angles - Google Images is a significant traffic source for e-commerce
- Use
ImageObjectschema for primary product image
Variant handling: When a product has variants (colors, sizes), consolidate all
variants under one canonical URL unless each variant has distinct search demand. Avoid
separate indexable URLs for product?color=red and product?color=blue unless "red
[product name]" is a real query with search volume.
Review integration: Display review count and average rating visibly on the page.
Implement AggregateRating schema. Reviews are a significant ranking signal and improve
click-through rate in search results.
See references/product-page-optimization.md for a full checklist.
Control faceted navigation crawling
Step 1: Audit current crawl waste Use a log file analysis tool or Google Search Console > Coverage to identify how many filter URLs Googlebot is crawling. Compare against your total page inventory.
Step 2: Choose a strategy per filter type
| Filter type | Search demand? | Recommended approach |
|---|---|---|
| Brand + category (e.g. "Nike running shoes") | Yes, often high | Allow indexing |
| Color + category (e.g. "black boots") | Sometimes | Selective indexing |
| Size filters | Rarely | noindex, follow or canonical |
| Sort order (?sort=price_asc) | Never | robots.txt Disallow or canonical |
| Page number beyond page 3 | Rarely | Canonical to page 1 if thin |
| Multiple combined filters | Rarely | Canonical to base category |
Step 3: Implement
For noindex, follow on filtered pages:
<!-- In <head> of filtered pages only -->
<meta name="robots" content="noindex, follow">For canonical control (filtered page points to base category):
<link rel="canonical" href="https://example.com/womens-boots">For high-value combinations that should rank:
<link rel="canonical" href="https://example.com/womens-boots/black">
<!-- Ensure this filtered page has unique copy, not just the same intro -->See references/faceted-navigation.md for deep coverage of URL parameter handling.
Implement Product schema with offers and ratings
Every product page must include Product schema with nested Offer and optionally
AggregateRating. Use JSON-LD in <head> or just before </body>:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Nike Air Max 270",
"description": "Men's running shoe with Air Max cushioning technology.",
"sku": "NK-AM270-BLK-10",
"mpn": "AH8050-001",
"brand": {
"@type": "Brand",
"name": "Nike"
},
"image": [
"https://example.com/images/nike-am270-black-front.jpg",
"https://example.com/images/nike-am270-black-side.jpg"
],
"offers": {
"@type": "Offer",
"url": "https://example.com/products/nike-air-max-270",
"priceCurrency": "USD",
"price": "129.99",
"priceValidUntil": "2025-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"seller": {
"@type": "Organization",
"name": "SportStore"
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "2341",
"bestRating": "5",
"worstRating": "1"
}
}
</script>Dynamic generation: Build this from your product data model. Key fields to map:
availability:InStock,OutOfStock,PreOrder,BackOrder(always prefix withhttps://schema.org/)price: Match exactly what's shown on page - Google cross-checkspriceValidUntil: Required for rich snippet eligibility - set to end of current year or sale end date
Structure category taxonomy for SEO
Design category hierarchy to match how searchers think about products, not how your merchandising team organizes inventory.
Taxonomy depth rule: 3 levels maximum for most stores. Deeper navigation buries pages from crawl and dilutes link equity.
/womens/ <- level 1 (broad)
/womens/shoes/ <- level 2 (department)
/womens/shoes/boots/ <- level 3 (category)Category page optimization checklist:
- Unique introductory copy (100-200 words) above the product grid - not duplicated from the meta description
- Subcategory links with descriptive anchor text near the top
- Breadcrumb navigation with
BreadcrumbListschema - Descriptive H1 matching the primary keyword ("Women's Boots")
- Curated "top picks" section linking to best-performing products
- Internal links to related categories in the footer copy
SEO-friendly breadcrumbs with schema:
<nav aria-label="breadcrumb">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/"><span itemprop="name">Home</span></a>
<meta itemprop="position" content="1">
</li>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/womens/"><span itemprop="name">Women's</span></a>
<meta itemprop="position" content="2">
</li>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/womens/shoes/boots/">
<span itemprop="name">Boots</span>
</a>
<meta itemprop="position" content="3">
</li>
</ol>
</nav>Handle pagination on category pages
See references/category-pagination.md for the full breakdown. Key decisions:
Choose your pagination model:
- Numbered pages (
/womens/boots?page=2): Best default for SEO. Allows indexing of all pages, distributes crawl across catalog. - View-all (
/womens/boots?view=all): Only use if page is fast to render (< 3s in Googlebot's simulated browser). Canonical all paginated URLs to this page. - Load more / infinite scroll: Requires URL fragments or history.pushState to be SEO crawlable. JavaScript-only implementation = page 1 gets all the credit.
Canonical rules for pagination:
- Page 1: canonical to itself (
/womens/boots/) - Page 2+: canonical to themselves (
/womens/boots?page=2) - not to page 1 - Paginated pages should NOT be canonicalled to page 1 unless you want only page 1 indexed
Manage out-of-stock and discontinued products
Decision tree:
Product unavailable - which case?
|
+-- Temporarily out of stock (will return)
| -> Keep page, set availability = OutOfStock in schema
| -> Add "notify me" widget (engagement signal, conversion value)
| -> Do NOT redirect or noindex
|
+-- Discontinued but has a direct replacement
| -> 301 redirect to the replacement product
| -> Keep redirect in place permanently
|
+-- Discontinued with no replacement
| -> Does the page have backlinks or significant traffic?
| YES: 301 redirect to the parent category
| NO: 410 Gone (tells Google the page is intentionally removed)
|
+-- Seasonal (returns next year)
-> Keep URL live year-round
-> Update schema availability to PreOrder before season
-> Update copy to reflect off-season statusBuild internal linking for e-commerce
E-commerce sites have fewer editorial backlinks per product than content sites. Internal linking compensates by distributing PageRank from high-authority pages (homepage, top categories) down to product pages.
Internal linking patterns:
- Breadcrumbs: Every product and category page. Schema-marked. Essential.
- Related products: 4-8 products. Link by category similarity or co-purchase data. Use descriptive anchor text (product name, not "you might also like").
- "Shop the look" or bundles: Cross-category internal links that create non-hierarchical paths through the catalog.
- Category crosslinks in copy: Introductory category copy should mention and link to complementary categories.
- Sitelinks: Homepage + top navigation links concentrate authority. Ensure your top 5-8 categories are in the main navigation.
Anti-patterns / common mistakes
| Mistake | Why it's wrong | What to do instead |
|---|---|---|
| Indexing every filter combination | Crawl budget wasted, thin/duplicate pages dilute quality signals | Use noindex or canonical for low-demand filter combinations |
| Thin or templated product descriptions | Triggers thin content signals, can't rank for long-tail queries | Write unique copy per product, include specs, use cases, reviews |
| Missing or invalid product schema | Ineligible for rich snippets, free listings, review stars | Validate with Google's Rich Results Test before launch |
| 404ing out-of-stock products | Destroys SEO equity and backlink value for popular products | Keep page, update schema availability to OutOfStock |
| Duplicate title tags across variants | Signals low quality, cannibalizes the same query | Unique titles per product; use canonical for truly duplicate variants |
| Canonicalling paginated pages to page 1 | Removes deep catalog pages from index, pages 2+ lose credit | Canonical each page to itself |
| Blocking CSS/JS from Googlebot | Googlebot can't render the page correctly, may see blank content | Verify rendering in Google Search Console > URL Inspection |
| Identical meta descriptions across hundreds of products | Missed opportunity; seen as low quality | Use a template with dynamic product data (name, price, attributes) |
Lazy-loading product images without noscript fallback |
Googlebot may not execute the lazy loader, misses images | Use native loading="lazy" (Googlebot supports it) or include noscript |
| No breadcrumbs | Weak internal linking, no BreadcrumbList schema for rich display |
Implement breadcrumbs on all product and category pages |
Gotchas
Canonicalling paginated category pages to page 1 removes them from the index - This is one of the most common e-commerce SEO mistakes. Each paginated page should canonical to itself, not to page 1. Canonical to page 1 tells Google "this is a duplicate of page 1" and Google drops pages 2+ from the index, hiding products from search.
Product schema
pricemust exactly match the on-page price - Google cross-validates the structured data price against the rendered page. A mismatch (e.g., schema shows$99but the page renders$99.99with taxes) causes rich snippet ineligibility. Ensure both values are sourced from the same data point.JavaScript-only facet filters create zero indexable URLs - If filtering updates the DOM without changing the URL (no
history.pushState, no query params), Googlebot sees only the base category page. All filter combinations are invisible to search. You need distinct URLs for any filter combination you want indexed.noindexon filtered pages doesn't prevent crawl waste -noindex, followtells Google not to index the page but still crawls it. For high-volume filter combinations with zero search demand (sort orders, page numbers beyond page 3),robots.txt Disallowstops the crawl entirely, preserving crawl budget.Out-of-stock products 404'd lose their backlinks permanently - Returning a 404 for a temporarily unavailable product destroys accumulated link equity and may take months to recover if the product returns to stock. Keep the page live, update the
availabilityschema toOutOfStock, and add a back-in-stock notification.
References
For deep-dive implementation guides, load the relevant file from references/:
references/product-page-optimization.md- Full product page SEO checklist: title formulas, image optimization, review integration, variant handling, cross-sell linking. Load when working on individual product page optimization.references/faceted-navigation.md- The faceted navigation crawl problem explained, robots.txt strategies, canonical vs noindex trade-offs, AJAX filtering, URL parameter handling in Google Search Console. Load when dealing with filter/facet URL management.references/category-pagination.md- Pagination strategy comparison (numbered vs infinite scroll vs view-all), SEO implications of each, canonical handling for paginated series, category page optimization patterns. Load when structuring category pages or choosing a pagination model.
Only load a references file if the current task requires it - they are detailed and will consume context.
References
category-pagination.md
Category Page Pagination Reference
Pagination on category pages determines how Googlebot discovers your catalog and how link equity flows to products on pages 2, 3, and beyond. Wrong choices here can cause large portions of your catalog to be invisible to search engines.
1. Pagination Models Compared
Model 1: Numbered Pages (Recommended Default)
Products split across numbered pages with URL-based navigation:
/womens/boots/ <- page 1
/womens/boots?page=2 <- page 2
/womens/boots?page=3 <- page 3SEO characteristics:
- All pages are crawlable and indexable
- Each page has a distinct URL - Googlebot can reach all products
- Link equity flows to page 1 most strongly, diminishing for deeper pages
- Products on page 10 receive very little direct PageRank
- Standard for most e-commerce stores
Canonical rules:
- Page 1 canonical:
<link rel="canonical" href="https://example.com/womens/boots/"> - Page 2+ canonical:
<link rel="canonical" href="https://example.com/womens/boots?page=2"> - Each page canonicals to itself - do NOT canonical all pages to page 1
Meta robots:
- All pages:
index, follow - Exception: If pages beyond 3-4 have fewer than 10 products, consider
noindex, follow
Title tag differentiation:
Page 1: Women's Boots | StyleStore
Page 2: Women's Boots - Page 2 | StyleStore
Page 3: Women's Boots - Page 3 | StyleStoreOptimal page size:
- 24-48 products per page is the standard range
- More products per page = fewer paginated pages = more link equity per product
- Balance against page load time (more product images = slower initial load)
Model 2: View-All Page
A single page displaying all products in the category:
/womens/boots/ <- view-all (the main URL)
/womens/boots?page=2 <- paginated versions (canonical to view-all)SEO characteristics:
- All products on one page - each product gets a direct link from the category
- No pagination dilution of link equity
- Risk: slow page load with hundreds of products
- Risk: Googlebot may not fully render/scroll through a very long page
When to use:
- Category has fewer than 100 products
- Products load fast (no heavy images, uses lazy loading correctly)
- Server-side render (not client-side) so Googlebot sees full content
Canonical implementation:
<!-- On /womens/boots?page=2 (and all paginated pages) -->
<link rel="canonical" href="https://example.com/womens/boots/">
<!-- On /womens/boots/ (the view-all, canonical to itself) -->
<link rel="canonical" href="https://example.com/womens/boots/">Testing view-all renderability: Use Google Search Console > URL Inspection > "Test Live URL" to see exactly what Googlebot renders. If products below the fold are missing from the rendered HTML, the view-all approach is not working for those products.
Model 3: Infinite Scroll
Products load dynamically as the user scrolls. No new URLs generated by default.
SEO characteristics (pure JavaScript implementation):
- Only page 1 content is indexed
- Googlebot renders the initial load but may not trigger scroll events
- All products below the initial viewport are invisible to search
Making infinite scroll SEO-compatible:
Use history.pushState to update the URL as the user scrolls, creating bookmarkable
URLs that Googlebot can crawl:
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const page = entry.target.dataset.page;
// Update URL without full page navigation
history.replaceState(null, '', `/womens/boots?page=${page}`);
}
});
});
// Observe each "page boundary" sentinel element in the DOM
document.querySelectorAll('[data-page-sentinel]').forEach(el => {
observer.observe(el);
});Then ensure each ?page=N URL is server-side renderable (returns full page N content
when fetched directly, not just the first page with JavaScript scroll position).
Alternative: Load More button
A "Load More" button is better for SEO than pure infinite scroll because:
- Products load in discrete chunks with explicit user intent
- URL can be updated when more is loaded
- Googlebot sees initial page content correctly without needing scroll simulation
<!-- Load More implementation with URL update -->
<div id="product-grid"><!-- initial products --></div>
<button id="load-more" data-next-page="2">Load More</button>
<script>
document.getElementById('load-more').addEventListener('click', async (e) => {
const nextPage = e.target.dataset.nextPage;
const res = await fetch(`/api/products?category=boots&page=${nextPage}`);
const products = await res.json();
appendProducts(products);
// Update URL to reflect loaded content
history.pushState(null, '', `/womens/boots?page=${nextPage}`);
e.target.dataset.nextPage = parseInt(nextPage) + 1;
});
</script>2. The rel="next" / rel="prev" Deprecation
Google deprecated support for rel="next" and rel="prev" pagination hints in
March 2019. These tags are now ignored by Google.
Do not use:
<!-- These do nothing for Google SEO in 2024 -->
<link rel="prev" href="https://example.com/womens/boots/">
<link rel="next" href="https://example.com/womens/boots?page=3">Bing still supports rel="next" / rel="prev". If Bing traffic is significant for
your store, you may include these tags without harm (they are ignored by Google, not
penalized).
The correct approach for Google is the canonical strategy described in Model 1 (each page canonical to itself).
3. Category Page Content Optimization
Beyond pagination mechanics, category pages need content to rank for head and mid-tail queries like "women's boots", "running shoes for men", "best laptop bags".
Introductory copy
Required: 100-250 words of unique introductory copy, placed above the product grid.
This copy should:
- Include the primary category keyword naturally in the first sentence
- Describe what the shopper will find (brands, styles, price ranges)
- Link to 2-3 important subcategories with descriptive anchor text
- Be unique - not shared with meta description or any other page
Example (good):
Women's Boots at StyleStore
Find the perfect pair of women's boots from our collection of over 300 styles.
Whether you're looking for everyday ankle boots, knee-high riding boots, or
waterproof hiking boots, we carry top brands including UGG, Timberland, Sam Edelman,
and Stuart Weitzman.
Browse by style: [Ankle Boots] | [Knee-High Boots] | [Over-the-Knee] | [Combat Boots]
Or shop by brand: [UGG Boots] | [Timberland Women's] | [Steve Madden]Example (bad):
Welcome to our boots section. We have many boots available for you to buy.
Shop our boots collection today.H1 tag
One H1 per category page, matching the primary keyword:
<h1>Women's Boots</h1>Do not use decorative copy like "The Best Women's Boots You'll Love". Be direct about what the page is.
Category page schema
Use CollectionPage or ItemList schema to mark up the product grid:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "Women's Boots",
"description": "Shop women's boots including ankle boots, knee-high boots, and hiking boots from top brands.",
"url": "https://example.com/womens/boots/",
"breadcrumb": {
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Women's",
"item": "https://example.com/womens/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Boots",
"item": "https://example.com/womens/boots/"
}
]
}
}
</script>4. Subcategory Architecture
Depth and hierarchy
Optimal hierarchy depth for e-commerce: 3 levels maximum.
Level 1: /womens/ <- "women's clothing"
Level 2: /womens/shoes/ <- "women's shoes"
Level 3: /womens/shoes/boots/ <- "women's boots"
Level 4: /womens/shoes/boots/ankle/ <- "women's ankle boots" (edge case)Level 4+ pages are typically:
- Harder to crawl (deeper from homepage)
- Lower authority (fewer internal links reach them)
- Often low volume enough to handle as filtered views of level 3 pages
Exception: Level 4 is justified when the subcategory has its own clear search demand and enough SKUs to warrant a full page (20+ products).
Subcategory link placement on category pages
Place subcategory links near the top of the category page, before the product grid. This ensures Googlebot follows them early in the crawl and that users can refine their browse path immediately.
<nav class="subcategory-nav" aria-label="Browse by type">
<ul>
<li><a href="/womens/shoes/ankle-boots/">Ankle Boots</a></li>
<li><a href="/womens/shoes/knee-high-boots/">Knee-High Boots</a></li>
<li><a href="/womens/shoes/hiking-boots/">Hiking Boots</a></li>
<li><a href="/womens/shoes/rain-boots/">Rain Boots</a></li>
</ul>
</nav>URL structure for subcategories
Use the full hierarchical path:
/womens/shoes/boots/ankle-boots/ <- GOOD: reflects taxonomy
/ankle-boots/ <- BAD: flat, loses context
/womens/shoes/boots/?type=ankle <- BAD: parameter-based, facet control neededFlat URL structures (/ankle-boots/) can be used but make breadcrumb and internal
linking harder to implement correctly.
5. Internal Linking on Category Pages
Links that matter for SEO
| Link type | Placement | SEO value |
|---|---|---|
| Subcategory links | Above product grid | High - flows equity to sub-categories |
| Product links in grid | Product cards | High - flows equity to product pages |
| Related category links | Footer or sidebar | Medium - cross-category discovery |
| Brand filter links | Facet sidebar | Medium (if selectively indexed) |
| "Editor's picks" | Above grid | High - concentrated link to featured products |
Footer copy with internal links
Adding a paragraph of copy at the bottom of category pages with links to related categories boosts internal linking depth:
<div class="category-footer-copy">
<p>
Looking for more footwear? Browse our full range of
<a href="/womens/shoes/">women's shoes</a> including
<a href="/womens/shoes/sneakers/">sneakers</a>,
<a href="/womens/shoes/sandals/">sandals</a>, and
<a href="/womens/shoes/heels/">heels</a>. For complementary styles,
check out our <a href="/womens/accessories/socks/">women's socks</a> and
<a href="/womens/accessories/shoe-care/">shoe care accessories</a>.
</p>
</div>This creates topical depth signals and distributes authority to related categories through in-copy anchor text.
6. Pagination Checklist
Before launching paginated category pages
- Page 1 has unique introductory copy (100-250 words)
- Each paginated page (
?page=N) is server-side rendered (not client-side only) - Canonical on each page points to itself, not page 1
- Title tags include "- Page N" for pages 2 and beyond
- Page 2+ are discoverable via next/previous links in the HTML
- URL structure is consistent (
?page=2, not?p=2on some,?page=2on others) - Product count per page is consistent (not 24 on page 1, 12 on page 6)
- No
noindexaccidentally applied to paginated pages (check with URL Inspection) -
rel="prev"/rel="next"omitted (deprecated, not needed) - Product images on all pages use
loading="lazy"with width/height attributes - Category page included in XML sitemap (page 1 only - paginated pages optional)
Validating pagination SEO health
- Submit page 1 URL to Google Search Console > URL Inspection, confirm indexed
- Submit
/category?page=5(a deep page) to URL Inspection, confirm it can be fetched and rendered - Check Crawl Stats in Search Console for crawl frequency of paginated URLs
- In a site: search (
site:example.com/womens/boots), verify both page 1 and deeper pages appear in results
faceted-navigation.md
Faceted Navigation Reference
Faceted navigation is the single largest technical SEO challenge in e-commerce. This reference explains the problem, quantifies the impact, and provides concrete solutions with implementation code for each approach.
1. The Faceted Navigation Problem
What is faceted navigation?
Faceted navigation lets users refine product listings by filtering on multiple attributes simultaneously. A typical clothing store might offer filters for:
- Brand (Nike, Adidas, Puma)
- Color (Black, White, Red, Blue, Green)
- Size (XS, S, M, L, XL, XXL)
- Price range ($0-50, $50-100, $100-200, $200+)
- Rating (4+ stars)
Each filter combination typically generates a unique URL. The combinatorial math is brutal:
3 brands x 5 colors x 6 sizes x 4 price ranges x 2 ratings
= 720 URL combinations from a single category pageA store with 50 categories, each with comparable filter dimensionality, could generate 36,000+ URLs from facets alone - for a catalog of 5,000 actual products.
Why this is an SEO problem
Crawl budget exhaustion: Googlebot allocates a crawl budget per domain based on site size, authority, and crawl health. If 80% of crawlable URLs are low-value filter pages, Googlebot never reaches new or updated product pages.
Duplicate content:
/womens/boots?color=black&size=8and/womens/boots?size=8&color=blackshow identical products. So do/womens/boots?sort=price_ascand/womens/boots?sort=price_descfor small categories.Thin pages: A filter for size 14 in a category with 3 products matching produces a page with very little content. Scaled across thousands of filter combinations, this generates a mass of thin pages.
Diluted PageRank: Internal links spread PageRank across all indexed URLs. Thousands of thin filter pages dilute the equity flowing to the high-value category and product pages.
2. Measuring the Problem
Before choosing a solution, measure the extent of crawl waste.
Using Google Search Console
- Go to Index Coverage > filter by "Crawled - currently not indexed"
- Look for URL patterns matching filter parameters (
?color=,?sort=,?size=) - Check Crawl Stats to see how many URLs Googlebot crawled in the last 90 days
Using log file analysis
If you have access to server access logs:
# Count crawl requests per URL pattern (simplified)
grep -i "googlebot" access.log | grep "GET" | \
awk '{print $7}' | \
grep -E "\?(color|size|sort|brand)=" | \
wc -lCompare filter page crawls against total crawls to quantify crawl budget waste.
Using a crawler (Screaming Frog, Sitebulb)
Crawl the site with "Follow all links" enabled. Export URL list and count URLs matching filter parameter patterns. Compare against number of unique product pages.
3. Solutions
Option A: robots.txt Disallow
Block Googlebot from crawling filter URLs entirely using robots.txt.
User-agent: Googlebot
Disallow: /*?color=
Disallow: /*?size=
Disallow: /*?sort=
Disallow: /*?brand=
Disallow: /*?page=When to use:
- All filtered combinations have zero organic search demand
- You want zero crawl budget spent on these URLs
- The filter combinations are pure UX features, not SEO assets
Trade-offs:
- No PageRank flows through these URLs to linked pages (since Googlebot never crawls them)
- Google cannot see the content of filtered pages (acceptable if you don't want them indexed)
- Must be combined with clean pagination strategy (see
category-pagination.md)
Wildcard syntax note: robots.txt supports * wildcards. Disallow: /*?color= blocks
any URL containing ?color= regardless of path prefix.
Option B: noindex, follow Meta Tag
Allow Googlebot to crawl filter pages (to follow links and pass PageRank) but instruct it not to index them.
<!-- Add to <head> on filtered pages only, not on base category pages -->
<meta name="robots" content="noindex, follow">When to use:
- Filter combinations have no search demand and should not appear in search results
- You want Googlebot to follow internal links on filtered pages (e.g., links to products)
- You need a softer approach than
robots.txtblocking
Implementation: dynamic insertion
// Pseudo-code: inject noindex on server-side render
function getMetaRobots(url) {
const params = new URL(url).searchParams;
const filterParams = ['color', 'size', 'sort', 'brand', 'rating'];
const hasFilters = filterParams.some(p => params.has(p));
if (hasFilters) {
return 'noindex, follow';
}
return 'index, follow'; // default for base category and paginated pages
}Trade-offs:
- Googlebot still crawls these pages (consuming crawl budget slightly)
- PageRank flows through links on the page
- More gradual deindexing - Google may continue showing these in index for weeks
Option C: Canonical Tag Consolidation
Use the rel="canonical" tag to tell Google which URL is the "master" version of a set
of near-duplicate filtered pages.
<!-- On /womens/boots?color=black&size=8 -->
<link rel="canonical" href="https://example.com/womens/boots">
<!-- On /womens/boots?sort=price_asc -->
<link rel="canonical" href="https://example.com/womens/boots">When to use:
- Filter combinations may have thin organic demand but you're unsure
- You want to consolidate PageRank into the base category URL
- You need a fallback for parameter combinations you didn't predict
Implementation: canonical should be absolute URL, not relative
<!-- GOOD -->
<link rel="canonical" href="https://www.example.com/womens/boots">
<!-- BAD - relative canonical can cause errors if crawled from a filtered URL -->
<link rel="canonical" href="/womens/boots">Trade-offs:
- Google treats canonical as a hint, not a directive - it may choose to ignore it
- Does not prevent crawling (Googlebot will still crawl canonicalled pages)
- Works well combined with
noindex, followfor belt-and-suspenders approach
Option D: AJAX/JavaScript-Only Filtering
Filter results without generating new URLs. The URL stays at /womens/boots regardless
of what filters are selected. Filter state is managed in JavaScript only.
// Filter updates product list via fetch/XHR, URL does not change
document.getElementById('filter-color').addEventListener('change', async (e) => {
const products = await fetch(`/api/products?category=boots&color=${e.target.value}`);
updateProductGrid(await products.json());
// URL is NOT updated - intentional
});When to use:
- All filtering is purely a UX feature with no SEO intent
- You have a large number of filter dimensions and all combinations are thin
- You're building a new store and can design the architecture from scratch
Trade-offs:
- Eliminates the crawl problem entirely - no filter URLs exist
- Users cannot share filtered results via URL (major UX trade-off)
- You give up any possibility of indexing filter combinations even if some have demand
Option E: Selective Indexing for High-Value Combinations
For filters that do have real organic search demand (e.g., "Nike running shoes", "black leather boots"), allow specific combinations to be indexed while blocking the rest.
Identifying high-value combinations:
- Export all filter combination URLs from your faceted nav log
- Run them through a keyword research tool or Google Keyword Planner
- Filter for combinations with >100 monthly searches
- These are candidates for selective indexing
Implementation:
For high-value combinations, create clean URLs (not parameter-based):
/womens/boots/black/ <- "black women's boots" - indexed
/womens/boots/leather/ <- "women's leather boots" - indexed
/brands/nike/running-shoes/ <- "Nike running shoes" - indexedFor all other filter combinations, apply noindex, follow or canonical.
Optimization of selectively indexed filter pages:
- Add unique introductory copy (100-150 words specific to the filter combination)
- Ensure title tag reflects the filtered query: "Black Women's Boots | Store"
- Do NOT just show the same category page intro with different products
4. URL Parameter Handling in Google Search Console
Google Search Console has a legacy "URL Parameters" tool (available via Settings > Crawl > URL Parameters in some accounts). However, Google has discouraged its use and it does not work for all sites.
Preferred approach in 2024: use robots.txt, noindex, or canonicals as described
above. Do not rely on the URL Parameters tool as a primary strategy.
Handling parameter order canonicalization
The same filter combination can appear in different parameter orders:
/boots?color=black&size=8
/boots?size=8&color=blackThese are technically different URLs but render identical content. Solutions:
- Normalize parameter order server-side before responding (alphabetical sort)
- Apply canonical on both pages pointing to the normalized version
- Use
robots.txtornoindexto prevent both from being indexed
# Server-side parameter normalization (Python/Django example)
from urllib.parse import urlencode, urlparse, parse_qs
def normalize_url_params(url):
parsed = urlparse(url)
params = parse_qs(parsed.query)
sorted_params = urlencode(sorted(params.items()), doseq=True)
return parsed._replace(query=sorted_params).geturl()5. Pre-rendered Filter Pages for High-Value Combinations
When a filtered combination has real search demand and enough products to justify a full page, create a pre-rendered landing page:
/womens/black-boots/ <- dedicated landing page, not a filter URLRequirements for this to work:
- At least 12-20 products matching the combination (otherwise thin)
- Unique introductory copy written specifically for this query
- Proper breadcrumb: Home > Women's > Boots > Black Boots
noindexon the original filter URL (/womens/boots?color=black)- Canonical on the landing page pointing to itself
This approach is most used for high-value attribute combinations that generate clear organic traffic patterns (verified in Search Console).
6. Decision Framework
For each filter dimension, ask:
|
+-- Does filtering by this attribute produce queries with search volume?
| (e.g., "red dresses", "Nike shoes", "waterproof jackets")
|
| YES -> Selective indexing (Option E) or dedicated landing pages
|
+-- Does Googlebot crawl these URLs frequently but never index them?
|
| YES -> robots.txt Disallow (Option A) to reclaim crawl budget
|
+-- Do filtered pages contain internal links to products you want indexed?
|
| YES -> noindex, follow (Option B) to allow PageRank flow
|
+-- Are you unsure and want a safe default?
|
YES -> Canonical to base category (Option C) + noindex, follow (Option B)7. Common Faceted Navigation Mistakes
| Mistake | Impact | Fix |
|---|---|---|
| No crawl control strategy at all | Millions of thin pages indexed, crawl budget wasted | Audit and implement noindex/canonical/robots.txt per dimension |
| Blocking with robots.txt then expecting PageRank flow | PageRank does not flow through Disallowed URLs | Use noindex+follow instead when internal link value matters |
| Canonical pointing to wrong URL (relative vs absolute) | Canonical may be misinterpreted by Googlebot | Always use absolute URLs in canonicals |
| Applying noindex to base category pages by mistake | Category page disappears from index | Verify that noindex logic only activates when params exist |
| Different filter orders creating duplicate content | Google may index both or neither | Normalize parameter order server-side |
| Inconsistent canonical (page sometimes canonical to self, sometimes to category) | Confuses Googlebot, may result in wrong URL being indexed | Make canonical logic deterministic and test with URL Inspection |
product-page-optimization.md
Product Page Optimization Reference
A complete checklist for making every product detail page (PDP) perform in organic search. Product pages target high-intent, specific queries. The goal is to match searcher intent, load fast, and earn rich snippets.
1. Title Tag
Formula
{Product Name} - {Key Differentiator} | {Brand or Store Name}Examples:
Nike Air Max 270 - Men's Running Shoes in Black | SportStore
Victorinox Swiss Army Knife - Classic SD 58mm Red | KnifeShop
Bose QuietComfort 45 - Wireless Noise Cancelling Headphones | AudioGearRules
- Keep under 60 characters (Google truncates at ~600px width, roughly 60 chars)
- Include the primary product keyword near the front
- Do NOT use the same title across variants -
Nike Air Max 270 BlackandNike Air Max 270 Redshould have different titles - Avoid keyword stuffing:
Nike Air Max 270 Running Shoes Best Running Shoe Buy Nikeis not a title, it's spam - For variants consolidated under one URL: use the base product name without the variant attribute in the canonical URL's title
Dynamic title template (CMS / server-side)
{product.name} - {product.type} in {product.primary_color} | {store.name}
// Output: "Levi's 501 Original - Men's Jeans in Dark Blue | DenimCo"2. Meta Description
Formula
{Action verb} the {Product Name}. {Price or deal}. {Key feature or benefit}.
{Shipping/returns info}. {CTA}Examples:
Shop the Nike Air Max 270 for $129. Max Air heel unit for all-day comfort.
Free 2-day shipping. Easy 30-day returns.
Buy the Bose QC45 Headphones for $279. 24-hour battery life and active noise
cancellation. Ships tomorrow with free Prime delivery.Rules
- 140-160 characters (longer gets truncated in mobile SERPs)
- Include price - it drives CTR for transactional queries
- Mention availability ("In stock", "Ships today") if it converts
- Dynamic generation: pull from
product.price,product.shipping_message - Never duplicate meta descriptions across products - even templated ones must have unique data (product name + price makes them unique)
3. Heading Structure
<h1>Nike Air Max 270</h1> <!-- One per page, matches primary keyword -->
<h2>Product Details</h2> <!-- Section breaks -->
<h2>Customer Reviews</h2>
<h2>You May Also Like</h2>- H1 must be the product name, matching the URL slug and title tag keyword
- Do not use H1 for taglines or promotional copy ("Our Best Seller!")
- H2s structure the page for both users and crawlers
4. Product Description Copy
What makes a description SEO-effective
- Unique: Never copy the manufacturer's description verbatim. Every major retailer receives the same manufacturer copy - you will never rank above the brand with duplicate content.
- Specific: Include dimensions, materials, use cases, compatibility
- Natural keyword inclusion: Write for the customer; keywords appear naturally
- Minimum length: 150-300 words for mid-range products, 300-500 for high-value items
- Structured: Use short paragraphs, bullet lists for specs, numbered lists for steps
Template structure for product descriptions
[Opening paragraph - what is it and who is it for? 2-3 sentences]
[Key features list - 4-6 bullets with specifics]
[Use case paragraph - when/how would someone use this? 2-3 sentences]
[Technical specs - table or bullets]
[Social proof mention - "Rated 4.6/5 by 2,300+ customers"]Example (good)
The Nike Air Max 270 is designed for all-day wear. The oversized Air Max unit
in the heel delivers 270 degrees of visible cushioning - the most Air Nike
has ever put in a lifestyle shoe. The lightweight mesh upper keeps feet cool
during long days on your feet.
Key features:
- Full-length Phylon midsole for lightweight cushioning
- 270-degree Max Air heel unit - tallest Air bag in Nike history
- Breathable mesh upper with molded overlays
- Rubber outsole with circular traction pattern
Ideal for: street style, casual wear, light gym use. Runs true to size.5. Product Images
Filename and alt text
| Field | Bad | Good |
|---|---|---|
| Filename | IMG_4892.jpg |
nike-air-max-270-black-mens-side.jpg |
| Alt text | shoe |
Nike Air Max 270 in black, men's, side view |
| Alt text | Nike Air Max 270 |
Nike Air Max 270 men's running shoe in black colorway |
Image SEO rules
- Multiple angles: Provide at minimum: front, side, back, top, on-model (if apparel). Google Images drives significant e-commerce traffic.
- High resolution: At least 800x800px. Google requires minimum 160x90px but larger images are preferred for rich results eligibility.
- WebP format with JPEG/PNG fallback: Reduces file size without quality loss
- Serve from CDN: Images must load fast. Use
widthandheightattributes to prevent layout shift (CLS). - Image sitemap: Include product images in your XML sitemap or use a dedicated image sitemap for large catalogs
ImageObject schema for primary image
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Nike Air Max 270",
"image": {
"@type": "ImageObject",
"url": "https://example.com/images/nike-am270-black-front-800x800.jpg",
"width": 800,
"height": 800
}
}
</script>6. Review Integration
Reviews serve dual purposes: ranking signal (freshness, engagement) and rich snippet eligibility (star ratings in search results).
Requirements for review rich snippets
Google's requirements for review rich snippets on product pages:
- Reviews must be written by real customers (editorial reviews from staff do not qualify)
AggregateRatingschema must reflect actual ratings shown on the page- Rating counts must be accurate - inflating rating count is a manual action risk
- Cannot show stars for reviews that are not genuinely about the specific product on the canonical URL
Schema implementation
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Nike Air Max 270",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"bestRating": "5",
"worstRating": "1",
"reviewCount": "2341"
},
"review": [
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"author": {
"@type": "Person",
"name": "Sarah M."
},
"reviewBody": "Extremely comfortable for all-day wear. True to size.",
"datePublished": "2024-11-15"
}
]
}
</script>UX recommendations that support SEO
- Display review count prominently near the product name (builds trust + schema signal)
- Show star distribution (1-5 star breakdown) - reduces bounce rate
- Allow filtering reviews by verified purchase, rating, recency
- Show most recent reviews first, not just "most helpful" - signals freshness to Google
7. Variant Handling
When to consolidate variants under one URL (recommended default)
Consolidate when variants differ only by color, size, material, or other minor attributes:
/products/nike-air-max-270with a color selector on the page- Canonical URL: always the base product URL
- Title tag: base product name (no specific color/size)
- All variants share one
Productschema block with multipleOfferitems
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Nike Air Max 270",
"offers": [
{
"@type": "Offer",
"name": "Black - Size 10",
"sku": "NK-AM270-BLK-10",
"availability": "https://schema.org/InStock",
"price": "129.99",
"priceCurrency": "USD"
},
{
"@type": "Offer",
"name": "White - Size 10",
"sku": "NK-AM270-WHT-10",
"availability": "https://schema.org/OutOfStock",
"price": "129.99",
"priceCurrency": "USD"
}
]
}
</script>When to give variants separate URLs (exception)
Give variants their own indexed URLs when:
- Each variant targets a distinct search query with meaningful volume (e.g., "red nike air max" vs "black nike air max" - check Search Console data)
- Variants are substantially different products (e.g., a hoodie vs a zip-up version)
For separate variant URLs:
- Each gets its own canonical, unique title, and unique description
- Include a
<link rel="canonical">pointing to the variant's own URL (not the parent) - Cross-link variants via a "Also available in:" section
URL parameter handling for variants
Avoid: /products/nike-air-max-270?color=black&size=10 as the canonical URL.
Prefer: /products/nike-air-max-270 with color/size passed via JavaScript state or
form submission.
If you must use URL parameters for variants, use the canonical tag to consolidate:
<!-- On /products/nike-air-max-270?color=black -->
<link rel="canonical" href="https://example.com/products/nike-air-max-270">8. Cross-selling and Related Products
SEO value of related products
Related product sections create internal links from product pages back to other product pages, distributing PageRank through the catalog and reducing dead-end pages.
Implementation rules
- Use the product name as anchor text ("Nike React Infinity Run"), not "Related Product 1"
- Link to products in the same category or complementary categories
- Include 4-8 related products - enough to be useful, not so many it dilutes the page
- Place above the fold if possible for crawl depth
Schema for related products
Use isRelatedTo on the Product schema to signal relationships:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Nike Air Max 270",
"isRelatedTo": [
{
"@type": "Product",
"name": "Nike React Infinity Run",
"url": "https://example.com/products/nike-react-infinity-run"
}
]
}
</script>9. Product Page Technical Checklist
Before launch
- Title tag: unique, under 60 chars, includes product name
- Meta description: unique, includes price or key feature, 140-160 chars
- H1: matches product name, one per page
- Description copy: unique (not manufacturer copy), 150+ words
- Images: descriptive filenames, alt text on all images
-
Productschema withOffer: valid, availability matches page state -
AggregateRatingschema (if reviews displayed): review count matches page - Canonical URL: points to itself (or base product for variants)
- Breadcrumbs: present with
BreadcrumbListschema - Internal links: at minimum 4 related products with product name anchor text
- Page speed: LCP < 2.5s on mobile (run via PageSpeed Insights)
- No duplicate title/meta across products - spot check 10 products
- Validate schema with Google's Rich Results Test
After launch
- Monitor Search Console > Enhancements > Products for schema errors
- Check Index Coverage for product pages - are they indexed within 2-3 weeks?
- Watch Crawl Stats for crawl frequency on product pages (indicates freshness signals)
- Track position for top product keywords (brand + product name queries)
Frequently Asked Questions
What is ecommerce-seo?
Use this skill when optimizing e-commerce sites for search engines - product page SEO, faceted navigation crawl control, category taxonomy, product schema markup, pagination handling, inventory-aware SEO (out-of-stock pages), and e-commerce site architecture. Triggers on any task involving online store search optimization, product listing pages, shopping search results, or e-commerce technical SEO challenges.
How do I install ecommerce-seo?
Run npx skills add AbsolutelySkilled/AbsolutelySkilled --skill ecommerce-seo in your terminal. The skill will be immediately available in your AI coding agent.
What AI agents support ecommerce-seo?
ecommerce-seo works with claude-code, gemini-cli, openai-codex, mcp. Install it once and use it across any supported AI coding agent.