Ecommerce SEO Audit: 20-Step Checklist for Online Stores (2026)
Run an ecommerce SEO audit in 20 steps: crawl, index status, templates, schema, Core Web Vitals, content and links. Each step names the tool and the fail rule.
TL;DR. An ecommerce SEO audit is 20 checks run in a fixed order: crawl the store, read index status, test the product, category and filter templates, validate product markup, measure speed, then review content and links. Each step below names the tool, the report to read and the condition that counts as a fail. Most failures on a store come from three templates, so one fix in step 9 or 10 can change thousands of URLs. The template at the end records the result of each step.
An ecommerce SEO audit answers one question per step: can crawlers reach the page, is it indexed, does the template send the right signals, and does the page say enough to rank. The order matters. A crawl problem hides every problem after it, so the steps go crawl, then index status, then templates, then schema, then speed, then content, then links. Each step takes one tool and ends in a pass or a fail you can write down.
You need four things open: Google Search Console for the store, Google Merchant Center if you run Shopping, a site crawler, and a browser with view source. The steps use the Encited site audit as the crawler because it groups findings by issue across every crawled page. What a passing store looks like, check by check, is in the ecommerce SEO checklist. The strategy behind the checks is in the full guide to ecommerce SEO.
1. Crawl the whole store
Tool. The Encited site audit in discover mode, which starts at the homepage and follows internal links, or a desktop crawler such as Screaming Frog.
Run. Let the crawl finish, then write down two numbers: the URLs the crawl reached, and the products, categories and guides in your catalog. Steps 4, 6 and 10 compare against them.
Fail if. The crawl reached several times more URLs than the catalog holds, which means filter, sort or parameter URLs are linked (step 10). Or it reached far fewer, which means categories or product grids are built by JavaScript after load or are unlinked (steps 13 and 20).
2. Check that crawlers can fetch product, category and guide pages
Tool. The Googlebot simulator and the robots.txt analyzer.
Run. Fetch one product, one category and one guide URL as Googlebot and read the status code and the body. Repeat as GPTBot. Then paste yourstore.com/robots.txt into the analyzer and read what each crawler may fetch.
Fail if. Any of the three URLs returns 403, a 5xx, or a challenge page from your CDN or firewall. A Disallow line matches a product or category path. A crawler you want is blocked in robots.txt or in the CDN's bot rules. Cart, checkout, account and internal search paths are open to crawlers.
3. Sort status codes and redirect chains
Tool. The site audit's Error Status, Redirect Chain/Loop, Broken Internal Links and Broken External Links issues. In a desktop crawler, sort by status code and by redirect hops.
Run. Read every URL that returned 4xx or 5xx and where it is linked from. Then fetch three old product URLs from a year-old email or a backlink and count the hops to the final page.
Fail if. Any internal link points at a 404 or a 5xx. Any redirect takes more than one hop, or loops. Old product URLs reach a 404 when a successor or category exists.
4. Compare the sitemap with the crawl
Tool. Search Console, Indexing, then Sitemaps. The site audit's Sitemap vs Crawled Gap and Sitemap URL Returns Error issues, or a desktop crawler run in sitemap mode.
Run. Read "Discovered pages" per sitemap file and compare it with the indexed count from step 6. Then list the sitemap URLs the crawl never reached, and the crawled product URLs the sitemap does not list.
Fail if. A sitemap URL returns anything other than 200, carries noindex, or canonicalizes to a different URL. Filter and sort URLs are in the sitemap. Products reachable by crawl are missing from it.
5. Find where Googlebot spends its requests
Tool. Search Console, Settings, then Crawl stats. If the store runs through Encited, the crawl log lists each request from Googlebot, Bingbot and AI crawlers with the full URL and the status code.
Run. Under "By file type", open HTML and read the example URLs. Under "By response", read the share of 5xx and redirect responses. Read the average response time chart.
Fail if. Most example URLs carry filter or sort parameters. Any share of responses is 5xx. Response time trends up. Google's crawl budget guide says the crawl limit rises while response times stay stable or improve, and falls when the server slows or returns errors, so a slow store gets fewer product crawls. The fix for parameter URLs is in step 10.
6. Compare the indexed count with the canonical count
Tool. Search Console, Indexing, then Pages. Index Rush shows the same status per URL, so you can filter to the product URLs that are missing.
Run. Read the indexed count and compare it with the catalog count from step 1. Then open "View data about indexed pages" and sample the URLs.
Fail if. The indexed count is well below the number of canonical products and categories. Or it is well above, and the sample shows filter URLs, variant URLs or internal search pages.
7. Read why pages are excluded
Tool. The same Page indexing report, under "Why pages aren't indexed".
Run. Open each reason and read the sample URLs. Reasons you chose are fine: "Excluded by noindex tag" on filter pages, "Alternate page with proper canonical tag" on variant URLs, "Blocked by robots.txt" on internal search.
Fail if. Product or category URLs sit under "Discovered - currently not indexed", which means Google knows the URL and has not crawled it, usually because crawl capacity went to parameter URLs. Or under "Crawled - currently not indexed", which means Google read the page and left it out, usually because the content is thin or duplicated. The first two have their own guides: Discovered - currently not indexed and Crawled - currently not indexed.
New products arrive every week and each one starts unindexed, so steps 6 and 7 repeat. Index Rush keeps the index status of every URL in one list, points to the indexed pages that already link to a new product so you can get those recrawled, and requests indexing for the new URL in one click. Run it after every collection launch.
8. Catch soft 404s and stray noindex tags
Tool. The site audit's Soft 404 and Noindex Tag issues. URL Inspection in Search Console for single URLs.
Run. Fetch a URL that does not exist, an empty filter combination (a size nobody stocks in a color nobody makes), and a sold-out product. Read the status code and the body of each. Then read the Noindex Tag list.
Fail if. A missing page or an empty filter returns 200 with "no products found" in the body; Google treats that as a soft 404. A noindex sits on a product or category template. A URL is blocked in robots.txt and marked noindex at the same time, because Google cannot read the tag on a page it cannot fetch.
9. Test canonicals on product, variant and collection-path URLs
Tool. The site audit's Canonical Missing/Mismatch issue, then view source on a handful of products.
Run. Open one product from a category, from site search, from a variant selector and from a marketing email. Read the address bar and the rel="canonical" tag each time.
Fail if. A product URL has no canonical or one that points at a redirect or a 404. Collection-path URLs on Shopify (/collections/shoes/products/trail-runner-2) carry no canonical to /products/trail-runner-2. Variant URLs carry a self-referencing canonical while showing the same description as the parent. The url in the structured data or the feed differs from the canonical. Which variants deserve their own page is in product page SEO.
10. Count the URLs your filters create
Tool. The crawl export from step 1, filtered to URLs with a ?. A Google search for site:yourstore.com inurl:?. The Page indexing report from step 7.
Run. On a category page, apply three filters and a sort, and read the URL. Count how many crawled URLs carry parameters, how many of those are indexed, and how many sit under "Crawled - currently not indexed".
Fail if. Parameter URLs with no search demand are indexed. Filter URLs are in the sitemap. Google's faceted navigation guidance says parameter-based filters "can generate infinite URL spaces"; the decision rules for which facet pages to index, and the Shopify, Magento, WooCommerce and BigCommerce settings, are in faceted navigation SEO.
11. Check how category pagination exposes products
Tool. View source on page 2 of a large category. The crawl export, filtered to that category's products.
Run. Scroll to the bottom of a category with more products than one page shows. Note whether the next products arrive through a page link, a "load more" button or infinite scroll. Open page 2 and read its canonical.
Fail if. Page 2 canonicalizes to page 1; Google's pagination guide says each page should carry its own canonical. The next page loads only on a click or a scroll, with no <a href> under the button, because Google's crawlers do not click.
12. Read titles, meta descriptions and H1s across templates
Tool. The site audit's Duplicate Title, Title Length, Missing Meta Description, Duplicate Meta Description, Missing H1, Multiple H1s and Multiple Head Tags issues. In a desktop crawler, sort by title and by H1.
Run. Read the duplicate groups. Then open the top ten categories by impressions and check that each has one H1 and an intro in the HTML.
Fail if. Duplicate titles or meta descriptions across products or categories. A template with no H1 or with two. Two <head> blocks on one page, which an app can inject and which makes Google pick tags from the wrong one. A title that is the product name alone, with no attribute or brand, when many stores sell the same product.
13. Check what crawlers receive from a JavaScript storefront
Tool. The Googlebot simulator, the ChatGPT crawler simulator, and URL Inspection with "Test live URL" and "View tested page".
Run. Fetch a product page with each simulator and search the HTML for the product name, the price and the stock status. Then compare the rendered HTML from URL Inspection with the raw response.
Fail if. The price, name or stock is missing from the server HTML and appears only after JavaScript runs. Google can render it in a second pass; Vercel and MERJ measured that pass on nextjs.org in April 2024 and found a median wait of 10 seconds, with the slowest 1% waiting about 18 hours. AI crawlers such as GPTBot, ClaudeBot and PerplexityBot do not run JavaScript, so for them the product does not exist. The fixes are server-side rendering, static generation, or a pre-render layer that serves crawlers a rendered snapshot. The rendering decision for a storefront sits with crawl budget and canonicals in technical SEO for ecommerce.
14. Validate Product and ProductGroup markup
Tool. Google's Rich Results Test. The site audit's Missing Structured Data and Invalid Structured Data issues across the crawl. Search Console's Merchant listings report for store-wide errors.
Run. Paste a product URL into the Rich Results Test and read the detected items. Then view source and search for "@type": "Product" to confirm the block is in the HTML the server sends.
Fail if. A product page has no Product or ProductGroup block, or has two, which happens when the theme and a review app each print one. The Offer lacks price or priceCurrency, or image or name is missing; Google's merchant listing documentation lists these as required. Variants are separate Product blocks on one page with no ProductGroup; Google's variant markup covers that case. The markup appears only after JavaScript runs; Google says markup generated by JavaScript "can make Shopping crawls less frequent and less reliable".
15. Match price and availability with Merchant Center
Tool. Google Merchant Center, Products, then the item issues list.
Run. Read the "Mismatched value (price)" and "Mismatched value (availability)" counts. Open one flagged product and compare the price in the server HTML, the Offer in the markup and the feed row.
Fail if. Any mismatch issue is open. The feed's product URL is a non-canonical URL. The price in the HTML is set by JavaScript after load, so Googlebot can read a different value from the one shoppers see. Sold-out products are missing availability or still say InStock.
16. Pass Core Web Vitals on product and category templates
Tool. Search Console, Experience, then Core Web Vitals, mobile. PageSpeed Insights for one product and one category URL.
Run. Read the URL groups marked Poor and Needs improvement, and open the example URLs to see which template they share. Then read the field data at the top of the PageSpeed Insights report for each template.
Fail if. A product or category URL group is Poor or Needs improvement on mobile. Google's thresholds, at the 75th percentile of real visits, are Largest Contentful Paint 2.5 seconds or less, Interaction to Next Paint 200 milliseconds or less, and Cumulative Layout Shift 0.1 or less. On a store the usual causes are app scripts for reviews, upsells and chat, hero sliders, and theme bundles that load before anything paints.
17. Check the main product image
Tool. PageSpeed Insights, which names the Largest Contentful Paint element. The site audit's Image Alt Text Missing/Weak and Low Image Alt Coverage issues.
Run. Open the LCP element on a product page and read its markup: format, size, loading attribute, width and height, and alt.
Fail if. The main image is lazy-loaded, has no explicit width and height, or is served larger than the template displays it. The alt text is empty or the file name. The image is a JPEG or PNG when your platform can serve WebP or AVIF.
18. Find thin, duplicate and manufacturer product copy
Tool. The site audit's Thin Content, Duplicate Content and Placeholder Text issues. Google itself, for a quoted search.
Run. Take your top 20 products by impressions. Search one sentence from each description in Google, in quotes. Then read the Thin Content list and sort it by impressions.
Fail if. The quoted search returns the manufacturer's site and other retailers, because the description is the one every store got. A product has a few words and a spec table only. Placeholder text is live. The specs and sizing are an image or load in a tab after a click. A description that says what the product is, who it fits and what it is like to use answers both the shopper and the search, so SEO copy and conversion copy are one text. How to write it at scale is in product page SEO.
What shoppers ask an AI assistant is the other half of the content check. Ask ChatGPT, Perplexity and Gemini the questions your category gets ("best trail running shoes under $150") and note which stores and products they name and which pages they cite. The AI visibility tracker runs those prompts across ChatGPT, Perplexity, Gemini, Claude, Google AI Overviews and Grok on a schedule and lists the cited sources per answer, so you can see whether your products are in the answers.
19. Find pages competing for the same search
Tool. Search Console, Performance, filtered to one query, then the Pages tab. The site audit's Keyword Cannibalization issue lists the pairs across the crawl.
Run. Export your top 100 queries for the last three months and read which URLs get impressions for each. Group them: category searches ("trail running shoes"), product searches ("trail runner 2 review"), questions ("how to choose trail running shoes").
Fail if. Two URLs share impressions for one query and swap positions week to week. A category search lands on a product page or a blog post, or a question lands on a category. A search you want has no page assigned to it.
20. Measure internal links, depth and orphans
Tool. The site audit's Orphan Page, Deep Page Depth, Low Incoming Internal Links and Non-Descriptive Anchor Text issues. View source on a category page and a product page.
Run. Read the crawl depth of your products. Count the <a href> product links in a category page's HTML with JavaScript off. On a product page, look for the breadcrumb, the link back to the category and the related-product links in the HTML.
Fail if. Products sit more than three or four clicks from the homepage. Products in the sitemap have no incoming internal link. The category grid or the related-product carousel is built by JavaScript after load, so the links are absent from the server HTML. The breadcrumb has no BreadcrumbList markup.
Ecommerce SEO audit template
Copy the table into a sheet and fill the last column with pass, fail or the finding. Each row is one step above, and the step holds the fail condition and the fix.
| Step | Tool | Result |
|---|---|---|
| 1. Crawl | Site audit or desktop crawler | |
| 2. Crawler access | Googlebot simulator, robots.txt analyzer | |
| 3. Status codes | Site audit error and redirect issues | |
| 4. Sitemap | Search Console Sitemaps, site audit gap issue | |
| 5. Crawl stats | Search Console Crawl stats, crawl log | |
| 6. Indexed count | Page indexing report, Index Rush | |
| 7. Excluded reasons | Page indexing report | |
| 8. Soft 404s, noindex | Site audit, URL Inspection | |
| 9. Canonicals | Site audit, view source | |
| 10. Facets | Crawl export, site: search | |
| 11. Pagination | View source on page 2 | |
| 12. Head tags | Site audit title and H1 issues | |
| 13. Rendering | Crawler simulators, URL Inspection | |
| 14. Product markup | Rich Results Test, Merchant listings report | |
| 15. Merchant Center | Merchant Center item issues | |
| 16. Core Web Vitals | Search Console CWV, PageSpeed Insights | |
| 17. Main image | PageSpeed Insights LCP element | |
| 18. Product copy | Site audit content issues, quoted search | |
| 19. Cannibalization | Search Console Performance | |
| 20. Internal links | Site audit link issues, view source |
FAQ
What is an ecommerce SEO audit? A run through a fixed set of checks on an online store, in order, that ends with a list of findings and the template each one lives on. The checks cover crawling, index status, the product, category and filter templates, product markup, speed, content and internal links.
Which ecommerce website audit tool should I use? Three tools cover the 20 steps. Search Console gives you index status, crawl stats and Core Web Vitals, and nothing else does. A crawler gives you status codes, canonicals, duplicates and links across every URL; the Encited site audit groups those by issue with the fix. The Rich Results Test and Merchant Center cover product markup and feeds.
How often should I run an ecommerce SEO audit? Run steps 1 to 17 after every theme, app or platform change and at least once a quarter. Run steps 6 and 7 whenever a collection or a batch of products launches. Run steps 18 to 20 as part of normal content work.
Does the audit cover AI search? Steps 2 and 13 do. AI crawlers read the HTML your server sends and do not run JavaScript, so step 13 decides whether your product facts exist for ChatGPT, Perplexity and the others at all. Step 2 confirms they are allowed in. The prompt check under step 18 tells you whether your products appear in their answers and which sources those answers cite.
Does this audit work on Shopify and WooCommerce?
Yes. Shopify generates the sitemap and canonical tags, so steps 4 and 9 mostly pass; the steps that fail most on Shopify are collection-path links (step 9), filter and sort URLs (step 10), app scripts (step 16) and two Product blocks from a theme and a review app (step 14). On WooCommerce the sitemap and canonicals come from your SEO plugin, so steps 4 and 9 need a real read, and ?s= search URLs need a robots.txt rule.
What does an ecommerce SEO audit cost? Search Console, Merchant Center, the Rich Results Test, PageSpeed Insights and the crawler simulators are free. Encited plans start at $19 a month and every account gets one 14-day free trial. Agencies quote by scope.
