The Complete Guide to Ecommerce SEO in 2026
Ecommerce SEO in 2026: keyword mapping, site architecture, faceted navigation, canonicals, variants, product markup, Core Web Vitals, rendering and AI search.
TL;DR. Ecommerce SEO gets your category and product pages crawled, indexed and ranked, and gets your products into AI shopping answers. Map each search to one page: broad searches to categories, model searches to products. Give each product one URL and make internal links, canonical tags, sitemaps, markup and feeds agree on it. Index the few filter pages with search demand and block crawling of the rest. Put Product markup, prices, stock and reviews in the server HTML, because Merchant Center and AI crawlers read nothing else.
You want shoppers to find your products in Google and in ChatGPT's answers without paying for every click. Ecommerce SEO is the work that gets your category and product pages crawled, indexed and ranked for the searches people make right before they buy, whether you run a small Shopify store or a large catalog on Magento.
On a store, most of that work comes from scale and templates. Filters, sorting, variants and tracking parameters turn a few thousand products into far more URLs than you have products, and one template mistake repeats on every product page. Google, Merchant Center and AI crawlers also judge the HTML your server sends, so prices, stock and reviews that load with JavaScript can be missing from the version that counts.
What is ecommerce SEO?
Ecommerce SEO is the process of getting an online store's pages to rank in search engines and appear in AI shopping answers. It covers the same three areas as any SEO work: technical setup, page content, and authority from links and mentions. The difference is the site itself. A store's pages are generated from a product database, and that changes where the work goes.
| Content site | Online store | |
|---|---|---|
| Page count | Set by what you publish | Set by the catalog, then multiplied by filters, sorting and variants |
| Templates | A few, each used on some pages | One product template used on every product |
| Content | Written for each page | Often a title, a price and a description shared with other retailers |
| Page state | Mostly stable | Prices change, stock runs out, products get discontinued |
| Search results | Links and AI answers | Merchant listings, product grids, Shopping and AI shopping answers |
Good ecommerce site SEO handles each row: it limits the URL count, fixes problems once in the template, adds content other retailers don't have, answers stock changes with the right status codes, and gives the page, the structured data and the product feeds the same product facts.
Why ecommerce SEO matters for online stores
A paid click costs the same next month as it did this month. A category page that ranks for "women's trail running shoes" keeps bringing in shoppers for as long as it holds the position, and people searching that phrase already know what they want to buy.
To put a number on your organic traffic, open the Performance report in Search Console, filter to your category and product URLs, and multiply the clicks by your average cost per click in Google Ads for the same searches. That's what you'd pay to replace it.
Ecommerce SEO matters most when stores tend to lose traffic: a platform migration, a move to a headless storefront, a change of URL format, or a theme update that moves content into JavaScript. Old URLs left without redirects and product content that crawlers can no longer see are common causes of a traffic drop after a relaunch.
Shoppers also ask ChatGPT, Gemini and Perplexity what to buy. Those answers come from pages and product data that crawlers can read, so the same groundwork decides whether your products show up there.
Core pillars and best practices of ecommerce SEO
| Pillar | What it covers | Where stores usually fail |
|---|---|---|
| Keyword research | Which search each category, product and guide targets | Two pages chasing the same search |
| Site architecture | Category tree, internal links, URL structure | Products many clicks deep, products in no collection |
| Page content | Category intros, product copy, specs, reviews, images | Manufacturer text shared with every other retailer |
| Technical SEO | Canonicals, filters, pagination, stock status, speed, hreflang | Filter and sort URLs using up crawling |
| Structured data and feeds | Product markup, Merchant Center, AI product feeds | Price in the markup differs from the page |
| Rendering | What crawlers get in the HTML | Prices and reviews loaded by JavaScript |
| Authority | Links and mentions from brands, press and roundups | Nobody links to category pages |
Start with whatever caps the rest. A product description can't rank from a URL Google hasn't indexed, and a category page with no matching search has nothing to rank for.
Keyword research: the base of your ecommerce SEO strategy
An ecommerce SEO strategy starts by deciding which page should rank for which search. Store searches fall into four types, and each belongs to a different page.
| Search type | Example | Page that should rank |
|---|---|---|
| Product type | trail running shoes | Category page |
| Product type with an attribute | waterproof trail running shoes women | Subcategory, or a filter page you've chosen to index |
| Brand or model | a brand and model name | Product page |
| Question or comparison | best trail shoes for wide feet | Buying guide that links to categories and products |
Where to find the searches:
- Search Console. The Performance report shows the queries you already get impressions for, by page. Product and category pages with impressions and few clicks are the quickest wins.
- Your own site search. The terms shoppers type into your search box are their words for your products.
- Google and Amazon. Autocomplete, related searches and People Also Ask show how people phrase product searches.
- Competitors. The category names and filters of stores that rank show how they've organized the same products.
- A keyword tool for volume. Google Keyword Planner is free. Semrush, Ahrefs and similar tools add difficulty scores and competitor keywords.
Three rules keep the map useful:
- One search, one page. When a category, a filter page and a blog post all target "linen bedding", they split the signals and usually all rank worse. Pick the owner and link the others to it.
- Name categories the way people search. Use the words from your keyword map, such as "Trail running shoes", in category names, titles and menus.
- Count the long tail. Each product page might get a handful of searches a month. Across thousands of products, those searches add up.
If your collection pages rank and your product pages don't, that's often how it should be. Broad searches want a range to compare, so Google ranks the category. Product pages win the searches that name the product, the model or a specific combination of attributes.
Site architecture and internal links
Your category tree is your site architecture. It decides how crawlers find products and how link value flows from the homepage down to them.
- Keep it shallow. Homepage, category, subcategory, product. Products buried behind long pagination or several levels of subcategories get crawled less often.
- Link with real
<a href>links. Menus, "related products" carousels and "load more" buttons that only work through JavaScript give crawlers nothing to follow. - Add breadcrumbs on category and product pages, with
BreadcrumbListstructured data. They link every product back up the tree. - Cross-link sideways. Related categories, "complete the look" blocks and buying guides that link to the categories they discuss.
- Decide which filter pages exist. Filters are part of the architecture. The few combinations with search demand get clean URLs and links from their category; every other combination is crawl waste. The rules are under faceted navigation below and in faceted navigation SEO.
- Keep product URLs out of the category path.
/products/trail-runner-2stays the same when the product moves between categories or sits in three at once. - Use short, lowercase, hyphenated URLs and keep them stable. Google's ecommerce URL guidance asks for persistent URLs and no internal links to temporary parameters such as session IDs and tracking codes.
- Find orphan products. A product that's in the sitemap but no longer in any collection gets no internal links.
- Keep sitemaps clean. List only canonical URLs that return 200 and should be indexed, and split them by type (products, categories, guides) so you can compare indexing per type in Search Console.
Category pages that rank
Category pages usually target the biggest searches in a store, and they're often the thinnest pages on it: a heading and a grid.
- Match the title tag and H1 to the search, such as "Women's Trail Running Shoes" for the search "women's trail running shoes".
- Add a short intro that helps someone choose: what separates the products, sizing notes, which one suits which use. Skip blocks of keyword text at the bottom of the page.
- Put the product grid in the HTML with a link to each product, and paginate with real URLs (see pagination below).
- Answer the common buying questions in a short FAQ on the page.
- Merge categories with one or two products into their parent, and take empty categories out of navigation. An empty category that returns 200 looks like a soft 404.
- Turn filter combinations with real demand, such as "black leather boots", into indexable landing pages with their own title, intro and links.
Buying guides and comparison pages catch the question searches from your keyword map. Link each guide to the categories and products it recommends, so its rankings pass value to the pages that sell.
Ecommerce product page SEO
Other retailers sell the same product with the same manufacturer text, so a product page ranks on what you add to it. The template work at catalog scale, from title patterns and description rules to images and conversion copy, is in product page SEO. The short version:
- Title tag. Product name, main attribute and brand, unique for every product. The H1 is the product name.
- Description. Write your own for products with search demand. Google doesn't penalize a store for using the manufacturer's text, but when the same description sits on dozens of sites, Google shows one or two of them for a search and filters the rest. Start with the products that already get impressions in Search Console.
- What other retailers don't have. Your own photos, fit and sizing notes, a specs table, comparisons with the products next to it in the range, questions and answers, and reviews.
- Specs as text. A spec sheet in an image or a linked PDF doesn't count as text on the product page. Put it in an HTML table.
- Reviews in the HTML. Reviews that a widget loads after the page are often missing from what crawlers get.
- Images. Descriptive file names and alt text, several angles, compressed WebP or AVIF files, and width and height set so the layout doesn't shift while images load.
- Variants. One product page with a variant selector usually ranks better than a thin page per color, and
ProductGroupmarkup ties each variant URL to it. When a color or size has searches of its own, give it its own page; the variant blueprint below says what the canonical, the markup and the feed carry in each case. - Copy and conversion. Shoppers decide from the top of the page and Google reads all of it. Keep the price, variant selector, stock and delivery at the top, and put the description, specs, questions and reviews below the buy box; Google indexes them there.
Technical SEO for ecommerce
Technical SEO for ecommerce comes down to two jobs: limit the URLs your store exposes to the ones worth crawling, and make each of those return the right status and the full content.
Google's crawl budget guide is written for sites with more than 10,000 pages that change daily, or more than a million that change weekly. A store whose prices and stock change every day can fit the first group. The same guide lists differently sorted versions of the same page as wasted crawling.
A shorter version of this section, with the crawl budget, canonical, pagination and sitemap checks in the order you run them on a store, is in technical SEO for ecommerce.
Duplicate product URLs and canonicals
One product often answers on several URLs:
/products/trail-runner-2and/collections/shoes/products/trail-runner-2on Shopify- category-path URLs such as
/shoes/trail/trail-runner-2.htmlon Magento, when a product sits in several categories - variant, sort and tracking parameters:
?variant=,?sort_by=,?utm_source=,?gclid= - http and https, trailing-slash and uppercase versions
Pick one URL per product and make everything agree with it: a self-referencing canonical tag, every internal link, the XML sitemap, the url in your structured data and the link in your product feeds. A canonical tag is a hint, and Google follows it more reliably when internal links and sitemaps point to the same URL.
On Shopify, a collection-path product URL returns a 200 with a canonical tag pointing to /products/, and you can't redirect it. The fix is in the theme: link products with {{ product.url }} and remove the within: collection filter, which Shopify's documentation warns puts the same content on separate URLs.
Encited's site audit crawls the store and flags duplicate titles, near-duplicate pages and missing or mismatched canonical tags, which is where duplicate product URLs show up first.
Variant URLs: when a color or size gets its own page
Search demand decides whether a variant gets its own URL. If "trail runner 2 black" has searches of its own, a black variant page can rank for them. If people search the product name only, a page per color splits one product into ten thin pages that compete with each other. Decide per product line, then keep the URL, the canonical, the markup and the feed consistent with the decision.
| Variants on the parent page | Each variant on its own page | |
|---|---|---|
| URL | /products/trail-runner-2, with ?variant=tr2-blk-42 to preselect a variant |
/products/trail-runner-2-black, /products/trail-runner-2-blue |
| Canonical | Every variant URL points to the parent; the parent points to itself | Each variant page points to itself |
| Title and H1 | The product name | The product name and the variant: "Trail Runner 2, black" |
| Content | One description and one image set for the group | Images and some text specific to that variant; without them the pages read as duplicates |
| Markup | One ProductGroup on the parent, with each variant as a Product in hasVariant |
The full ProductGroup repeated on each variant page: the page's own variant as a full Product, the others as url-only entries |
| Merchant Center feed | One item per variant, all with the same item_group_id, each linking to the parent URL with its variant parameter |
One item per variant, all with the same item_group_id, each linking to its own page |
| Sitemap | The parent URL only | Every variant URL |
| Internal links | The category grid links the parent | The category grid, or swatches on the parent, link each variant page with a real <a href> |
Google's variant markup documentation backs both columns. On a single-page product there "must be only one distinct canonical URL for the overall ProductGroup that all variants belong to", usually "the base URL that leads to a page without a variant pre-selected". When variants sit on separate pages, "the full ProductGroup definition needs to be repeated on each of the variant pages", and each page carries complete markup for the entities on it. In the feed, Google's product data specification says to "Submit each variant as a separate product" with the same item_group_id, and to give each variant a different landing page URL, which is why the parent-page column passes the variant parameter in the feed link.
Shopify and WooCommerce select a variant with a parameter on the parent URL and canonicalize it to the parent, so the left column is their default. Magento configurable products can expose each simple product on its own URL; set simple products without their own demand to "Not Visible Individually" so only the parent gets a page.
Faceted navigation
Every filter (color, size, brand, price, sort order) adds a URL parameter, and combinations multiply: Google's faceted navigation documentation says the common parameter-based setup "can generate infinite URL spaces". Give the few filter pages with real search demand clean URLs, unique titles and internal links, and disallow crawling of the rest in robots.txt.
The full method, with examples for each platform, is in faceted navigation SEO. Your crawl log shows which URLs Googlebot requested and what it got back, so you can see how much of its crawling goes to filter and sort URLs before and after a robots.txt change.
Pagination and infinite scroll
- Give each page of a category its own URL, such as
?page=2, and link the pages with<a href>links. - Give each page its own canonical tag. Google's pagination guide says not to use the first page as the canonical for the rest of the sequence.
- Google no longer uses
rel="next"andrel="prev". Other search engines may still read them, so they're harmless to keep. - Put paginated URLs behind "load more" buttons and infinite scroll. Google's crawlers don't click buttons, so products that only appear after a click or a scroll never get found from the category.
Out-of-stock and discontinued products
| Situation | What to do |
|---|---|
| Out of stock for now | Keep the page live and indexable with a 200. Show a restock date or alternatives, and set availability to https://schema.org/OutOfStock in the markup and the feed. |
| Discontinued, with a successor | 301 redirect to the successor product. |
| Discontinued, no successor, still gets traffic or links | Keep the page, mark it discontinued and link to the closest alternatives, or 301 to the closest category. |
| Gone, nothing relevant to send people to | Return a 404 or 410. |
Don't noindex a product that's only out of stock for a while. It loses its rankings and has to earn them back when stock returns. A page that says "unavailable" with no product content and a 200 status gets treated as a soft 404, and Google keeps recrawling it. Seasonal products should keep the same URL every year.
To check a sold-out product, open it in the Googlebot simulator. It should return a 200 with the product name, specs and alternatives still in the HTML.
Internal search pages
Your store's search results (/search?q= on Shopify, /catalogsearch/result/ on Magento, ?s= with post_type=product on WooCommerce) can produce a URL for anything anyone types. Disallow them in robots.txt. On Shopify, check your robots.txt.liquid for a /search rule, because current default files don't include one. When a search term has real demand, build a category or landing page for it, and use the terms themselves in your keyword research.
Products stuck in "Discovered" or "Crawled - currently not indexed"
Large catalogs often have many product URLs in two Search Console statuses. "Discovered - currently not indexed" means Google knows the URL and hasn't crawled it yet, which usually points to crawl capacity: cut wasted URLs, speed up the server and link the products from pages Google already crawls. "Crawled - currently not indexed" means Google read the page and didn't index it, which usually points to thin or duplicate content. Both have their own guides: Discovered - currently not indexed and Crawled - currently not indexed.
New products and collections have the same problem on a schedule. Index Rush shows the index status of every URL, points to already-indexed pages that link to a new product or collection so you can get those recrawled, and requests indexing in one click.
International stores and hreflang
- Give each market its own URLs, in subfolders such as
/en-gb/or on country domains, with hreflang tags that list every version, including the page itself. Each version must link back. Addx-defaultfor the fallback. - Add a market only when its pages differ. Markets that share a language and differ only by currency look like duplicates, and Google may index one version for all of them.
- Don't redirect by IP. Google says Googlebot's default IP addresses "appear to be based in the USA", so IP redirects can keep Google from seeing your other markets. Show a banner that suggests the local store.
- Shopify Markets creates hreflang tags for every international domain or subfolder automatically, and you can turn them off in your online store preferences.
The site audit flags hreflang sets with a missing self-reference, a missing return link or a target that doesn't return 200.
Site speed and Core Web Vitals
Google's Core Web Vitals pass when, at the 75th percentile of real visits, Largest Contentful Paint is 2.5 seconds or less, Interaction to Next Paint is 200 milliseconds or less, and Cumulative Layout Shift is 0.1 or less. Check product and category templates in Search Console's Core Web Vitals report and in PageSpeed Insights.
Common causes on stores:
- App and plugin scripts for reviews, upsells, chat and tracking. Remove apps you don't use, and the code they leave behind in the theme.
- Large hero images and sliders. Serve WebP or AVIF, set width and height, and don't lazy-load the main product image.
- Heavy themes and PWA bundles that must download and run before anything shows.
Speed also sets how much Google crawls. Its crawl budget guide says the crawl limit goes up while response times stay stable or improve, and goes down when the server slows or returns errors.
Product structured data and merchant listings
Google reads product structured data for two kinds of results. Product snippets are for pages where people can't buy, such as review pages. Merchant listings are for pages where customers can buy from you, and they take more detail, such as sizes, shipping and returns.
Merchant listing markup needs name, image and an Offer with price and priceCurrency. Add availability, gtin, brand, sku, aggregateRating and review where you have them. Google recommends setting shipping and return policies once in your Organization markup, and overriding them per product only when they differ.
For products with variants, Google's variant markup wraps them in a ProductGroup:
{"@context": "https://schema.org","@type": "ProductGroup","name": "Trail Runner 2","url": "https://yourstore.com/products/trail-runner-2","brand": { "@type": "Brand", "name": "YourBrand" },"productGroupID": "TR2","variesBy": ["https://schema.org/color", "https://schema.org/size"],"hasVariant": [{"@type": "Product","sku": "TR2-BLK-42","gtin13": "0012345678905","name": "Trail Runner 2, black, EU 42","color": "Black","size": "42","image": "https://yourstore.com/images/tr2-black.jpg","url": "https://yourstore.com/products/trail-runner-2?variant=tr2-blk-42","offers": {"@type": "Offer","price": "129.00","priceCurrency": "USD","availability": "https://schema.org/InStock"}}]}
productGroupID is the parent SKU, variesBy lists what changes between variants, and hasVariant holds each variant as a Product. Each variant needs its own URL that preselects it, usually with a query parameter. When all variants sit on one page, the whole group has one canonical URL.
Before you call the markup done:
- One product block per page. A theme and a review app can each print their own
Product, which leaves Google two conflicting products. Check with the Rich Results Test. - One price everywhere. The price and availability in the markup must match the page and your Merchant Center feed. Google says providing both structured data and a Merchant Center feed maximizes your eligibility for its shopping results.
- Markup in the initial HTML. Google recommends this for Product markup and warns that dynamically generated markup "can make Shopping crawls less frequent and less reliable".
The site audit flags missing and invalid structured data on each page it crawls.
JavaScript storefronts: prices, reviews and stock crawlers never see
Most store themes send the product name and description in the HTML. The parts that change most often tend to load later, with JavaScript:
- Review stars, review text and
AggregateRatingmarkup added by review apps - Prices from currency converters, customer-group pricing or sale scripts
- Stock status from an inventory API
- "Related products" and "recently viewed" carousels, which carry internal links
- On headless and PWA storefronts, often most of the page, as on Magento's PWA Studio
| Reader | Runs JavaScript? | What it uses |
|---|---|---|
| Googlebot | Yes, in a later rendering pass | The rendered page, after a delay |
| Merchant Center price checks | Treats JavaScript-loaded data as an error | The server HTML |
| OAI-SearchBot, GPTBot, ClaudeBot, PerplexityBot | No | The server HTML |
| Link previews in Slack, LinkedIn, X and Facebook | No | The server HTML |
Merchant Center's mismatched price guide says "Googlebot crawls the data present in the HTML returned from your web server", and that data passed with JavaScript after the page loads triggers an error. The AI crawler rows come from Vercel and MERJ's crawl study, which found that none of the major AI crawlers render JavaScript. More on the general problem in JavaScript SEO.
To check a product page:
- View the page source and search for the price and a sentence from one review.
- Run
curl -A "OAI-SearchBot" https://yourstore.com/products/your-productand look for the same text. - In Search Console, run URL Inspection and open the crawled page's HTML.
- Compare what Google and ChatGPT get with the Googlebot simulator and the ChatGPT crawler simulator.
There are two ways to fix it. You can move the data into the server response: some review apps have a server-rendered option, and headless storefronts can fetch price, stock and reviews on the server. Or you can pre-render with Encited: crawlers get a snapshot of each page taken after its scripts have run, with the prices, reviews and stock shoppers see, while shoppers keep getting the live store.
- Setup. Shopify and BigCommerce stores add a Cloudflare Worker in front of the store, so checkout keeps running on the platform. The guides are pre-rendering for Shopify and pre-rendering for BigCommerce. Other storefronts use a DNS change or a middleware snippet for their host. Your theme code doesn't change.
- Fresh prices. Set refresh rules per path: daily for product pages whose prices change, weekly or monthly for guides. Re-cache manually when a sale starts, so the snapshot price matches your feed. Broken pages are never cached or served.
- Slow data. Set
window.prerenderReady = trueonce prices and reviews have loaded, and the renderer waits for it. - Removed products. On a client-rendered storefront,
<meta name="prerender-status-code" content="404">gives crawlers a real 404.
Google's documentation says dynamic rendering "was a workaround and not a long-term solution", and still doesn't treat it as cloaking when crawlers and shoppers get the same content. The details are in dynamic rendering SEO.
Headless and single-page storefronts
A headless storefront that renders in the browser, as a custom React or Vue app does by default and as a Next.js, Hydrogen or Vue Storefront build does when server rendering is off, sends one HTML shell and builds every page from API calls. The product pages above have a few JavaScript-loaded parts; a client-rendered storefront has nothing else in its HTML. Google renders it in a second pass. Vercel and MERJ measured that pass on nextjs.org in April 2024 and published the results on July 31, 2024: the median wait from crawl to render was 10 seconds, the slowest 1% waited about 18 hours, and every valid HTML page got rendered. AI crawlers run no JavaScript at all, so a client-rendered product page has no name, price or stock for them.
Three fixes, in order of effort. Serve crawlers a pre-rendered snapshot of each page through dynamic rendering, which needs no change to the storefront code. Use static generation for category and guide pages that change rarely. Move to server-side rendering, which Hydrogen, Next.js and Nuxt support, so every request gets full HTML. Before any of them, fix the things that break a single-page app whatever the rendering: hash routing, links that are click handlers with no href, a title and canonical set after load, and unknown routes that return 200. Each one, with how to test it, is in SPA SEO.
Links and mentions for an online store
Category and product pages rarely earn links on their own. Stores build authority from:
- Brands you stock. Many have "where to buy" or stockist pages that link to retailers.
- Unlinked mentions. Press, gift guides and reviews that name your store without a link. Ask for the link.
- Roundups in your category. "Best X" lists, review sites and forum threads. AI answers to shopping questions lean on the same sources, so a mention there helps in both places. More in how to rank in LLMs.
- Pages people link to. Size guides, care guides and comparison tables.
AI search in 2026: ChatGPT, Perplexity and product feeds
ChatGPT answers shopping questions with product results that link to stores. OpenAI's crawler documentation says OAI-SearchBot is used to surface websites in ChatGPT's search features and recommends allowing it in robots.txt. Changes take about 24 hours to apply. GPTBot is the training crawler, and blocking it doesn't remove you from ChatGPT search. ChatGPT-User fetches pages when a person asks for them.
User-agent: OAI-SearchBotAllow: /
Check your CDN or firewall bot settings as well. Some block AI crawlers even when robots.txt allows them.
Perplexity answers the same shopping questions. Its crawler, PerplexityBot, fetches pages for its index, and the Vercel and MERJ study found it runs no JavaScript either, so the same HTML rule applies. Allow it next to OAI-SearchBot.
OpenAI's commerce documentation describes a product feed that merchants share with OpenAI, with fields such as the price (in the form 79.99 USD), availability and the product page URL. It asks merchants to update the feed when a sale starts or ends and when an item sells out.
OAI-SearchBot doesn't run JavaScript, so the product page has to carry the facts in its HTML: specs, materials, sizing, use cases, reviews, and a price that matches the feed and the markup. Google's AI Overviews and AI Mode link to pages from Google Search, so the Google work above carries over. The JavaScript side of this is in do AI crawlers render JavaScript, and getting pages into ChatGPT is in how to get indexed by ChatGPT.
To see whether it's working, add the questions your buyers ask, such as "best trail running shoes for wide feet", to the AI visibility tracker. It shows whether ChatGPT, Perplexity, Gemini and Claude name your brand, which competitors they name, and which pages each answer cites, so you know which roundups and review sites to get into.
Best ecommerce platform for SEO
Every major platform can rank. The differences are the defaults you inherit and how much of them you can change. The platform-by-platform comparison of URL control, speed, markup and rendering, with the cases where a platform's own SEO settings are enough, is in best ecommerce platform for SEO.
| Platform | Helpful defaults | Watch for |
|---|---|---|
| Shopify | Canonical product URLs, automatic sitemap, robots.txt that blocks sort and multi-filter URLs | Collection-path URLs, fixed URL prefixes, review and app content loaded with JavaScript |
| Magento / Adobe Commerce | Full control of URLs, canonicals and robots.txt | Layered navigation URLs, indexed search pages, category-path product URLs, client-rendered PWA storefronts |
| BigCommerce | URL format options, 301 redirect manager, robots.txt covering account, cart, checkout, search and filtered pages | Changing the URL format after launch, headless builds |
| WooCommerce | WordPress control and SEO plugins | Filter, price and sort parameters, plugin weight, hosting speed |
| Headless | Control of everything | You build sitemaps, robots.txt, redirects, 404s and markup; prices and reviews fetched in the browser |
Shopify
Product URLs live at /products/ with canonical tags, and variant URLs (?variant=) point their canonical at the same product URL. Shopify's default robots.txt blocks sorted URLs, combined tag URLs and URLs with two or more filters. A URL with a single filter stays crawlable, so decide which of those you want indexed, and check whether your file disallows /search. The exact rules, and how to change them with a robots.txt.liquid template, are in faceted navigation SEO. The URL prefixes (/products/, /collections/, /pages/) are fixed. Review and upsell apps often add their content with JavaScript; the Shopify pre-rendering guide covers serving crawlers the finished page.
After you publish a robots.txt.liquid change, run your store through the robots.txt analyzer and check that Googlebot, Bingbot and the AI crawlers don't show as blocked.
Magento and Adobe Commerce
Magento gives you full control and a lot to configure. The usual problems are layered navigation creating a URL for every filter combination, /catalogsearch/ result pages getting indexed, products that get a URL under each category path, and PWA storefronts that render product data in the browser. Each one is covered in Magento SEO.
BigCommerce
BigCommerce offers several URL formats for products and categories. Choose one before launch, and if you change it later, check the 301 redirects list for every old URL. The default robots.txt covers account, cart, checkout and search pages, and BigCommerce adds its own rules for filtered listing pages, listed in faceted navigation SEO. A headless build on Catalyst, its Next.js storefront, moves rendering onto your own frontend, along with the work listed under headless storefronts. The BigCommerce pre-rendering guide works for stores served on www or a subdomain.
WooCommerce
WooCommerce runs on WordPress, so SEO plugins handle titles, canonicals and sitemaps. The crawl problems come from its parameters: filter_ attributes, min_price and max_price, orderby and add-to-cart. Filter plugins that update the grid with AJAX either create no URL to index or create crawlable parameter URLs, depending on the plugin. The robots.txt rules for WooCommerce's built-in filters are in faceted navigation SEO. Speed depends on your hosting and on how many plugins load scripts on product pages.
Headless storefronts
Shopify Hydrogen, Next.js commerce builds, BigCommerce Catalyst and custom React or Vue storefronts give you control of everything the platform used to decide. You build the sitemaps, robots.txt, canonicals, redirects, real 404 status codes, structured data and hreflang that a hosted theme gave you. Streamed server rendering sends slow sections later in the response, and data fetched after hydration (reviews, live prices, stock, recommendations) isn't in the first response at all. Edge caches can also serve a price that differs from your feed. Before a migration, map every old URL to its new one with a 301.
If you're choosing a platform for a new store, pick the one your team can run, then check four things against your catalog: how filter URLs are built, whether product URLs can stay independent of categories, whether you can edit robots.txt and redirects, and whether product content and reviews arrive in the server HTML.
Tools to monitor your ecommerce site's SEO
| What you need to know | Where to look |
|---|---|
| Which searches and pages bring clicks | Search Console Performance report |
| Which product URLs are indexed, and why the others aren't | Search Console Page indexing report and URL Inspection |
| Whether product markup is valid | Search Console Merchant listings and Product snippets reports, Rich Results Test |
| Price and availability mismatches | Google Merchant Center diagnostics |
| Duplicate URLs, canonical problems, status codes and orphan pages | A site crawler such as Encited's site audit |
| What Googlebot and AI crawlers actually request | Server logs or a crawl log |
| Search volume and competitor keywords | Google Keyword Planner (free), Semrush, Ahrefs |
| Whether AI assistants recommend you | AI visibility tracking |
| Revenue from organic search | GA4 or your platform's analytics, by landing page |
A fuller list by job, covering crawlers, rank trackers, markup validators, speed tools and AI visibility tools, is in ecommerce SEO tools.
What to measure
- Organic revenue and conversion rate by landing page type: category, product, guide.
- Clicks and impressions by page type in Search Console, using URL filters such as
/products/and/collections/. - The share of submitted product URLs that are indexed, from the Page indexing report filtered by sitemap.
- The share of Googlebot requests that go to parameter URLs, from your logs.
- How often AI assistants mention your brand for your main shopping questions.
What ecommerce SEO costs, and doing it yourself
The cost has three parts:
- Time for keyword mapping, category and product copy, and fixing issues.
- Developer work for template changes, redirects, structured data and rendering fixes. On custom and headless stores this is usually the largest part.
- Tools. Search Console, Merchant Center, Keyword Planner, PageSpeed Insights and the Rich Results Test are free. Paid SEO tools are monthly subscriptions. Encited's plans start at $19 a month, with a 14-day free trial that needs a card and can be cancelled before it ends at no charge.
Agencies price by scope, as a monthly retainer or a project. Compare proposals by what they deliver: an audit, a redirect map, template changes, pages written per month, and how results get reported.
You can do ecommerce SEO yourself when the platform handles the basics and the main work is research and content. Bring in specialist help for a platform migration, a headless rebuild, a large catalog with crawl problems, or an international rollout, where one wrong redirect map or robots.txt rule affects every URL at once.
Ecommerce SEO audit checklist
The full version, with how to run each check and what a passing store looks like, is the ecommerce SEO checklist. The step-by-step run on a real store, in crawl-to-content order with a pass or fail condition per step, is the ecommerce SEO audit. The list below is the pass conditions in short form.
Run this checklist on your product, category and filter templates first, then on a sample of real URLs for each. Encited's site audit covers many of the crawl-based checks across the whole store and groups the results by issue, each with its fix.
Crawling and indexing
- robots.txt blocks sort, unwanted filter, internal search, cart and account URLs, and nothing you want indexed.
- No URL is blocked in robots.txt and marked
noindexat the same time. - XML sitemaps list only canonical, indexable URLs that return 200, split by page type.
- The Page indexing report shows why excluded product and category URLs are excluded.
- Your logs show what share of Googlebot's requests go to parameter URLs.
URLs and duplicates
- Each product has one URL, and internal links, canonicals, sitemaps, markup and feeds all use it.
- Collection-path, variant and tracking-parameter URLs carry a canonical to the product URL.
- Category pagination uses
?page=nURLs with<a href>links and self-referencing canonicals. - Empty filter combinations and removed products return 404 or 410, and discontinued products with a successor return a 301.
- Old URLs from past migrations redirect in one hop.
Content
- Every category has a unique title, H1 and a short intro.
- Your top products by impressions have descriptions you wrote.
- No duplicate titles or meta descriptions across products.
- Specs and sizing are HTML text.
Structured data and feeds
- Each product page has one valid
ProductorProductGroupblock, in the initial HTML. - Price and availability match across the page, the markup, Merchant Center and other product feeds.
- Out-of-stock products stay live and indexable, marked
OutOfStock. - Category and product pages carry
BreadcrumbListmarkup.
Rendering
- Product name, price, stock, reviews and related-product links are in the server HTML.
- URL Inspection shows Googlebot rendered the same content shoppers see.
- OAI-SearchBot and other AI crawlers are allowed in robots.txt and in your CDN's bot settings.
Speed and international
- Product and category templates pass Core Web Vitals on mobile.
- Unused apps and their leftover scripts are gone.
- hreflang sets include self-references and return links, and nothing redirects by IP.
AI visibility
- Your main shopping questions are tracked across ChatGPT, Perplexity, Gemini and Claude.
FAQ
What is ecommerce SEO and how does it work? Ecommerce SEO is the process of getting an online store's category, product and guide pages to rank in search engines and appear in AI shopping answers. It works by mapping searches to the right pages, making sure crawlers can reach and read those pages, and giving each page content and product data that answer the search better than other stores do.
Why is SEO important for ecommerce websites? Organic clicks have no per-click cost, and a ranking category page keeps bringing in shoppers who are ready to buy. You can estimate the value by multiplying your organic clicks to category and product pages by your average cost per click for the same searches.
How do you do SEO for an ecommerce website? Map searches to categories, products and guides. Build a shallow category tree with real links. Write category intros and your own product descriptions. Give each product one URL, control filter URLs, handle stock changes with the right status codes, add Product markup in the HTML, and make sure prices and reviews are in the HTML crawlers receive.
How do you optimize product and category pages to rank higher? Match each page's title and H1 to its search, add content other retailers don't have (your own descriptions, photos, sizing notes, specs as text, reviews), link categories to products with real links, and add valid Product or ProductGroup markup with the same price as the page and your feed.
How much does ecommerce SEO cost? It depends on who does the work. The main costs are time for research and content, developer time for template and rendering fixes, and tools. Google's tools are free, paid SEO tools are monthly subscriptions, and Encited's plans start at $19 a month with a 14-day free trial. Agencies quote by scope.
How does AI search change ecommerce SEO in 2026? Shoppers ask AI assistants what to buy, and those answers come from pages, feeds and reviews that crawlers can read. Most AI crawlers don't run JavaScript, so product facts need to be in the HTML. Allow OAI-SearchBot, keep product feeds current, and get mentioned in the roundups and review sites AI answers cite.
Should out-of-stock product pages be noindexed?
Not when the product is coming back. Keep the page live, mark it OutOfStock in the markup and feed, and show alternatives. Redirect discontinued products to a successor or the closest category, and return 404 or 410 when nothing fits.
How do I fix duplicate product URLs on Shopify?
Shopify serves collection-path product URLs with a canonical tag pointing to /products/, and they can't be redirected. Change your theme to link products with {{ product.url }} and remove the within: collection filter, so internal links point only to the canonical URL.
How do I fix "Mismatched product price" in Merchant Center? Make the price in your page's server HTML, your structured data and your feed identical. If the price is set by JavaScript after the page loads, Googlebot reads a different value. Put the price in the server response, or serve crawlers a pre-rendered page that's refreshed whenever prices change.
Why do my collection pages rank but my product pages don't? That's usually expected. Broad searches want a range of products, so Google ranks categories. Product pages win searches for a specific product or model, and they rank better with unique descriptions, internal links from categories and valid Product markup.
What is the best ecommerce platform for SEO? Shopify, BigCommerce, Magento and WooCommerce can all rank. Choose by the limits: how filter URLs are built, whether product URLs stay independent of categories, whether you can edit robots.txt and redirects, and whether product content and reviews arrive in the server HTML.
Is BigCommerce good for SEO? Yes. It's a hosted platform with URL format options, a 301 redirect manager and a default robots.txt that covers account, cart, checkout, search and filtered listing pages. Pick the URL format before launch, and check that review apps and headless builds put product content in the HTML.
Does JavaScript hurt ecommerce SEO? It does when prices, stock, reviews or links only appear after scripts run. Googlebot renders them later, Merchant Center flags JavaScript-set prices, and AI crawlers don't render them at all. Put that content in the server HTML, or serve crawlers a pre-rendered snapshot.
