SEO for e-commerce is very different from blog SEO: thousands of products, duplicate content from faceted navigation (filters), stock statuses, variants, category pages. This guide covers the fundamental tactics every store owner needs to win traffic from Google Shopping and organic search.
Product Page Optimization
<!-- Title: product name + brand + variant + category -->
<title>Nike Air Max 90 Black Sneakers — Size 9 | MyStore</title>
<!-- Meta description: benefits, price range, shipping info -->
<meta name="description" content="Nike Air Max 90 black men's sneakers, size 9. $129, free shipping. Same-day dispatch. 30-day return guarantee.">
<!-- One specific H1 -->
<h1>Nike Air Max 90 Men's Sneakers — Black</h1>
<!-- Content: original description (don't copy the manufacturer's!) -->
<div class="product-desc">
<p>The Air Max 90 has been a Nike icon since 1990...</p>
<ul>
<li>Mesh and synthetic leather upper</li>
<li>Visible Max Air unit</li>
<li>Rubber waffle outsole</li>
</ul>
</div>
Product Schema
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Nike Air Max 90 Black Men's Sneakers",
"image": [
"https://example.com/nike-airmax90-1.jpg",
"https://example.com/nike-airmax90-2.jpg"
],
"description": "Since 1990...",
"sku": "NKAM90-BLK-09",
"gtin13": "0194954123456",
"brand": { "@type": "Brand", "name": "Nike" },
"offers": {
"@type": "Offer",
"url": "https://example.com/nike-air-max-90-black",
"priceCurrency": "USD",
"price": "129.00",
"priceValidUntil": "2026-12-31",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": "0", "currency": "USD" },
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" },
"transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "DAY" }
}
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "342"
}
}
Category Pages
Category pages are your ranking target for head keywords (men's sneakers, women's winter coats). A bare category page (just a product grid) is not enough; add an H1 plus 200-400 words of original intro content above the grid.
<h1>Men's Sneakers</h1>
<div class="category-intro">
<p>Men's sneakers from the latest Nike, Adidas, New Balance and Puma collections...</p>
<h2>How to Choose</h2>
<p>Go light and cushioned for running, comfortable for daily wear...</p>
<h2>Brands and Prices</h2>
<p>Styles starting at $40...</p>
</div>
<div class="product-grid"><!-- products --></div>
Faceted Navigation and Duplicate Content
Filter combinations (color, size, price) produce infinite URLs: ?color=black&size=9&price=50-100. Googlebot crawls them all and burns your crawl budget. Strategies:
- Canonical: point every faceted URL to the main category page
- robots.txt with
Disallow: /*?color= - noindex meta tag on filtered pages
- Static URLs for high-value filters:
/mens-black-boots— a real ranking target - rel="prev"/"next" is deprecated — pagination pages should be self-canonical
<!-- /mens-sneakers?color=black -->
<link rel="canonical" href="https://example.com/mens-sneakers">
<!-- If 'black' is an SEO target, create a separate static page: -->
<!-- /mens-black-sneakers — its own canonical -->
<link rel="canonical" href="https://example.com/mens-black-sneakers">
URL Structure
# GOOD — clean, hierarchical
/men/shoes/sneakers
/men/shoes/sneakers/nike-air-max-90-black
# BAD
/category.php?id=4567&sub=89&product=12345
/products/p123456789
/nike-air-max-90-black-running-shoes-size-9-special-edition-2026
Pagination
- Each pagination page gets its own canonical (
?page=2canonical =?page=2) - Don't put noindex on pagination pages — you want Googlebot to reach deep pages
rel="prev"/"next"isn't used by Google anymore but you can still emit it- For secondary sortings (popular, newest, cheapest) don't create separate URLs — canonical back to the base category
Out of Stock Products
- Never delete them: 404 = lost backlinks
- Mark
availability: OutOfStockin schema - Add a "Notify me when available" form
- Surface alternative products
- If out of stock for the long haul 301 redirect to a similar product
Speed (Core Web Vitals)
In e-commerce, speed is conversion. Amazon has shown a 100ms slowdown = 1% in lost sales. Priorities: image optimization (WebP + lazy load), shrinking the JavaScript bundle, CDN, HTTP/2, inlining critical CSS. For details see our Core Web Vitals guide.
Internal Linking
- Keep a clear category → subcategory → product hierarchy
- On product pages, show "Related products" and "Frequently bought together"
- Breadcrumbs on every page
- Popular category links in the footer
- Blog → product links (funnel from guide articles to purchase)
Google Merchant Center + Shopping
Submit a product feed to get free listings on Google Shopping — via XML feed or Google Sheet. Shopping traffic can account for up to a third of organic sales.
Conclusion
E-commerce SEO is a trifecta of content + technical + structured data. Small optimizations across thousands of pages add up to big wins. Focus on category pages in the first 3 months, then shift to product pages. Definitely try the free side of Google Shopping.
Reach out to KEYDAL for a technical SEO audit of your store and category strategy. Explore our SEO services