Most online stores do not have a ranking problem. They have a “nobody ever checked” problem. Products get added, filters get switched on, the theme gets swapped, an app injects a script, and two years later nobody can explain why organic traffic flatlined. An ecommerce SEO audit is how you find out.
The scale of the problem is bigger than most store owners assume. Ahrefs studied roughly 14 billion pages and found that 96.55% of them get no traffic from Google at all. For stores, the reasons are usually boring and fixable: pages Google never indexed, thousands of near-duplicate filter URLs soaking up crawl activity, product pages with copied descriptions, and category pages that nothing links to.
This checklist walks through an ecommerce SEO audit in the order that surfaces the biggest problems first. You do not need an agency to run it. You need a few hours, Google Search Console, a crawler, and the discipline to write down what you find before you start fixing things.

What you need before you start
An audit is only as good as the data going into it, so set up your tools and capture a baseline before touching anything. The minimum kit:
- Google Search Console with the domain property verified and at least 28 days of data
- A site crawler such as Screaming Frog (free up to 500 URLs), Sitebulb, or the audit module in Ahrefs or Semrush
- A backlink tool, or at minimum the Links report inside Search Console
- PageSpeed Insights for real-user speed data on each page template
- A spreadsheet with columns for issue, affected URLs, severity, effort, and owner
If you already pay for one of the ecommerce SEO tools that cover crawling and backlinks, use it. The brand matters less than having one full crawl of the store and one export of Search Console data from before the audit.
Record the baseline too: organic sessions, organic revenue, number of indexed pages, and your top 20 queries by clicks. Without a “before”, you will never be able to prove the audit paid for itself.
Step 1: Confirm what Google has actually indexed
Open the Pages report in Search Console (Indexing, then Pages) and compare the indexed count to what you expect: live products plus categories plus content pages. There are three outcomes.
If the number is far lower than expected, you have an indexing problem. Look at the reasons Google lists: “Discovered, currently not indexed” usually means crawl waste or weak internal linking, “Crawled, currently not indexed” usually means thin or duplicate content, and “Excluded by noindex tag” on product URLs almost always traces back to a theme update or a plugin setting nobody remembers changing.
If the number is far higher than expected, you have index bloat. Filter combinations, sort orders, internal search results, and tag archives are getting indexed alongside real pages. That is covered in the next two steps.
If the number looks right, spot-check ten random products and five categories with the URL Inspection tool before moving on. “Indexed” and “indexed with the version you intended” are not the same thing.
Then check click depth in your crawler. Products that sit four or more clicks from the homepage get crawled less often and rank worse, and the fix is almost always navigation and category structure rather than anything on the product itself. If the depth report looks bad, our guide to ecommerce site architecture and crawl budget explains how to flatten it.
Step 2: Find crawl waste
Google’s own guidance on crawl budget says it is mainly a concern for sites with over a million pages, or over 10,000 pages that change daily. A 400-product store is not in that bracket. But Google lists a third group that stores fall into constantly: sites where a large share of URLs sit in “Discovered, currently not indexed”. That is the signature of a crawler spending its time on junk.
Go to Settings, then Crawl stats, in Search Console and look at the breakdown by response code and by purpose. Then filter your crawl export to every URL containing a question mark and sort by count. The usual suspects:
- Sort and view parameters such as ?sort=price-asc or ?view=list that create a copy of every category page
- Internal search result pages at /search?q=
- Cart and wishlist actions like ?add-to-cart=123, which generate one crawlable URL per product
- Tag and date archives on WordPress and WooCommerce stores
- Tracking parameters copied into internal links, usually a utm_ string someone pasted into a banner
- Legacy URLs still linked from footers and old blog posts, often with redirect chains behind them
The fix is a combination of canonical tags pointing to the clean URL, robots.txt rules for anything that should never be indexed, and removing internal links to those URLs. Keep in mind that a canonical tag alone does not stop Google from crawling a URL, it only tells Google which version to prefer once it has already spent the crawl.
Step 3: Faceted navigation and duplicate URLs
Filters for color, size, brand, and price are the single biggest source of duplicate URLs on any store. Google’s faceted navigation documentation is unusually direct about it: if you do not need filtered URLs in search results, prevent them from being crawled, either with robots.txt disallows on the filter parameters or by moving filters to URL fragments after a hash. Canonical tags and nofollow are described as less effective over time.
During the audit, make a decision for every filter type rather than treating them all the same:
- Index it when the filter matches a real search people make, such as “women’s waterproof running jackets”, and the resulting page has its own demand. Give it a clean URL, a unique title and H1, and a self-referencing canonical.
- Block it for everything else: price ranges, sort orders, and multi-select combinations that no one searches for.
- Fix pagination so page 2 and beyond are indexable with self-referencing canonicals, rather than canonicalized to page 1, which hides every product that is not on the first page.
Check as well whether a filter page and a category page are targeting the same keyword. When both exist, Google picks one and it is frequently the wrong one.
Step 4: Audit the product pages
Product pages are where most stores lose the most rankings, and the causes repeat from store to store: the manufacturer’s description pasted in alongside fifty competitors, a single line of text, no specifications, no alt text, and out-of-stock pages that quietly 404. We went through the full list in why most ecommerce product pages never rank, so for the audit itself, run these checks against your crawl export:
- Duplicate or near-duplicate descriptions, using the crawler’s duplicate content report plus a manual test of pasting one sentence into Google in quotes
- Very short pages, using anything under 150 words as a flag to review rather than a rule
- Missing or duplicate titles and H1s, especially where size and color variants generate separate URLs with the same title
- Out-of-stock handling, checking whether discontinued products 404, redirect to a parent category, or stay live with alternatives
- Variant URLs that are indexable with identical content and should be canonicalized to the main product
- Image alt text and file names that are still IMG_2041.jpg
- Reviews rendered in the HTML rather than loaded only inside a third-party widget Google may not index
Do not try to fix 3,000 products at once. Export your top 100 products by revenue and audit those by hand. Fixing the pages that already make money almost always beats polishing the long tail.
Step 5: Check structured data
Product rich results, meaning the price, availability, and star rating that show under a listing in search, are one of the few free click-through levers left. Google’s Product structured data documentation lists exactly which properties are required for merchant listings and product snippets, and the audit is a matter of testing one URL from each template (product, variant, category, blog post) against it.
The errors that turn up most often are missing price or priceCurrency inside the offer, availability values that do not match what the page shows, an aggregateRating with no actual reviews behind it, and two competing sets of schema output by the theme and a review app at the same time. Category pages that output Product schema for every item in the grid are another frequent one; those pages should carry no product markup at all, or an ItemList if you want to mark up the collection.
Search Console shows these at scale under Enhancements, in the Merchant listings and Product snippets reports. Fix at template level, then re-test the same URLs.
Step 6: Speed and Core Web Vitals
The 2025 Web Almanac ecommerce chapter measured real-user Core Web Vitals across hundreds of thousands of stores, and the pass rates on mobile vary enormously by platform: 76% of Shopify stores passed all three metrics, against 68% for OpenCart, 50% for PrestaShop, and 35% for both WooCommerce and Magento. Across every platform, Largest Contentful Paint was the metric that separated passing stores from failing ones.
For the audit, open the Core Web Vitals report in Search Console, which groups URLs by pattern, then run PageSpeed Insights on one URL per template: homepage, category, product, cart. The fixes that account for most of the gap:
- The main product or hero image, which is usually the LCP element: compress it, serve it at the displayed size, preload it, and never lazy-load it
- Third-party scripts, including review widgets, chat, heatmaps, and tracking pixels; remove every app you no longer use, because uninstalling from the admin often leaves the script in the theme
- Layout shift from cookie bars, promo banners, and image sliders that load without reserved space
- Render-blocking CSS and JavaScript shipped by the theme for features you never turned on
Use field data, not the Lighthouse score, to decide what is fixed. A lab score of 90 with failing real-user data is a failing page.
Step 7: Category pages, titles, and internal links
Category pages are the pages that should rank for your commercial keywords, and in most audits they are the weakest pages on the site: a grid of products, no text, and a title that reads “Shoes – Brand Name”. Each important category needs a unique title, an H1 that matches the keyword people use, a short block of useful text that helps someone choose (100 to 300 words is plenty), links to subcategories and top products, and breadcrumbs.
Titles deserve their own pass. Ahrefs’ data shows that Google rewrote title tags 76.04% of the time in the first quarter of 2025. Titles that are templated, overly long, or disconnected from the H1 are the ones most likely to get rewritten, so write titles that describe what is on the page and let the H1 and title agree.
Internal linking is the last check in this step. In your crawler, sort URLs by the number of internal links pointing to them, ascending. Look for products that are only linked from page 4 of a paginated category, categories with no links from blog content, orphan pages that exist in the sitemap but nowhere in the navigation, and the opposite problem: a mega menu that links to 400 URLs from every page, which flattens the signal for all of them.
Step 8: Backlinks
Compare your referring domains against the three stores that outrank you for your main category keywords. The gap is usually obvious, and the audit’s job is to document it, not to close it. Record these:
- Referring domain gap for the homepage and for each priority category page
- Links pointing to URLs that now 404, which you can reclaim with a redirect in an afternoon
- Anchor text distribution, flagging anything that looks manufactured
- Suspicious spikes, such as hundreds of new domains in a month from unrelated sites, which can signal a link scheme or a negative SEO attempt
Most stores discover that all of their links point to the homepage and none to the category pages they actually want to rank. Which tactics close that gap on a realistic budget is the subject of our ecommerce link building breakdown; for the audit, list the pages that deserve links and how far behind they are.
Step 9: AI search visibility
This step did not exist in audits a few years ago. Search for your main category terms in Google’s AI Mode, ChatGPT, and Perplexity and note whether your store is cited, whether a competitor is, and where the cited information comes from. Then open your robots.txt and check whether GPTBot, ClaudeBot, PerplexityBot, and similar crawlers are blocked. Blocking them can be a deliberate choice, but in many stores it was switched on by a security plugin and nobody decided anything.
Our guide to getting your store into AI search results covers what to do about it. For the audit, record the current state: which queries mention you, which bots are blocked, and whether your product data is complete enough for an assistant to answer a question about price, availability, and shipping without guessing.
Turning the audit into a plan
An audit that ends as a 40-page PDF changes nothing. Sort your spreadsheet by impact against effort and group the work into phases:
- Indexing blockers such as stray noindex tags, robots.txt rules, and broken canonicals. Days of work, and nothing else matters until they are gone.
- Crawl waste and faceted navigation, fixed at template level. Weeks, not days, because the rules need testing.
- Top 100 product pages and top 20 categories, rewriting descriptions, titles, and category text. Ongoing, in batches.
- Speed on the product template, done as one focused sprint rather than a permanent side project.
- Links to category pages, which is continuous and should start as soon as the pages are worth linking to.
Before shipping anything, make sure your conversion tracking is reliable, otherwise you will fix ten things and have no idea which one moved revenue. Our checklist for GA4 event implementation is the place to start. Then re-run the crawl 30 days after the first batch of fixes goes live, compare it to the baseline, and repeat the audit every quarter. Stores change faster than most owners realize, and the second audit is always shorter than the first.
About the Author
Matija Konjić is the founder of Link Inbound, working with B2B and B2C brands. He has built campaigns across 40+ industries and obsesses over the data behind what actually moves rankings.