Ecommerce SEO Audit

How I audit an online store — and why I start with Google Search Console and crawl data, not on-page tweaks. A prioritized, scale-first ecommerce SEO audit framework: crawlability, indexation, duplicate content, on-page at scale, technical, structured data, internal links, out-of-stock handling, and off-page — sorted by impact and effort.

First published: Jun 25, 2026 · Last updated: Jul 25, 2026 · Advanced
demand #4 in Ecommerce SEO#95 on the site

An ecommerce SEO audit isn't a 500-point checklist — it's the work of finding the small set of issues holding a store's rankings and revenue back, then prioritizing them by impact and effort. Because ecommerce sites hit problems at scale, I start the audit in Google Search Console (the Page Indexing report) and crawl data, not on-page tweaks: the biggest wins are usually crawling and indexation issues affecting thousands of URLs at once. Duplicate content from facets, collections, and variants is the #1 ecommerce-specific issue audits uncover; thin category pages are #2. The goal is to fix the stuff that matters most and skip the busywork.

TL;DR — I audit a store in roughly this order: crawlabilityCrawlability is how well search engine crawlers can discover, access, and fetch a site's pages. A crawlability issue is any technical condition — blocked access, broken links, server failures, or bloated URL inventory — that stops pages from reaching the index. → indexation → duplicate contentThe same or very similar primary content reachable at more than one URL. There's no general duplicate content penalty — the real costs are possible signal dilution, the wrong URL getting chosen, and less-efficient crawling. → on-page at scale → technical (CWVGoogle's three real-user UX metrics — LCP (loading), INP (responsiveness), and CLS (visual stability) — used by Google's ranking systems, with no official weight attached, measured on field data., HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.', canonicals) → structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding.internal linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them. → out-of-stock handling → off-page. I start in the GSCA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. and a fresh crawl, not on-page, because on a store the highest-leverage problems hit thousands of URLs at once: faceted-nav duplication, accidental sitewide noindex, “Discovered – currently not indexedStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed.” at scale, sitemapsA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. full of redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't.. The deliverable is a prioritized impact/effort list, not a 500-point report. Most stores never need to worry about crawl budgetThe number of URLs an engine will crawl in a timeframe. — but the ones that do really do.

Evidence for this claim Search Console's Page indexing report identifies indexed and non-indexed URLs and groups reasons pages are not indexed. Scope: Google Search Console audit data. Confidence: high · Verified: Search Console Help: Page indexing report Evidence for this claim Google's Rich Results Test and product structured-data requirements can be used to validate product markup eligibility. Scope: Google product structured-data validation. Confidence: high · Verified: Google Search Central: Product structured data

Audit philosophy: client-first, not issue-first

A crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index. will hand you 170+ issue types. If you dump all of them into a report, you’ve produced a document, not an audit. The job is to find the handful that move rankings and revenue and ignore the rest.

The starting point isn’t the tool — it’s the pain. As I’ve put it before: “If clients are coming to you asking for an audit, they already have a pain point. Talk to them. Solve that one thing and they’ll be happy with the audit.” On a store the pain is usually concrete: traffic dropped, a category stopped ranking, a migration went sideways, new products aren’t getting indexed. Anchor the audit to that, then expand.

And know when to stop. From our study of over a million domains: “Sometimes, the best course of action is to do nothing because the costs outweigh the benefits.” Not every flagged issue is worth a developer ticket.

Why I start with Search Console and crawl data, not on-page

TIP Start with a scoped crawl, then prioritize

A crawl is an evidence source, not the audit itself. Record how many discovered URLs were actually crawled and what the tool did not evaluate before turning any warning into a ticket.

Use my lightweight crawler for a fast raw-HTML baseline before you move into Search Console samples and rendered-page checks. Scout Site Audit Free Free

  1. Run the store or a representative section and note the discovered-versus-crawled scope.
  2. Group findings by template and business impact instead of copying every warning into the report.
  3. Verify high-priority patterns in Search Console and representative rendered pages.
The useful audit result includes its coverage and blind spots, not only a score.

The instinct to open the audit with title tagsThe title tag is the HTML title element in a page's head that specifies the document's title. It's the primary source for the SERP title link and a confirmed light ranking factor — but since August 2021 Google doesn't always show it verbatim. and headings is the most common mistake I see. On an ecommerce site the math is against it: tweaking a title helps one page; fixing an indexation pattern helps thousands. The biggest wins on a store are almost always crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor. and indexation problems at scale, and the stakes are highest exactly here — “one mistake can keep millions of pages out of the index or remove an entire site from search results.”

So the audit runs in priority order, top to bottom. Here’s the whole thing.


Step 1 — Crawlability

Can bots reach what matters, and are they wasting their time on what doesn’t?

The ecommerce-specific traps:

  • Faceted navigationFaceted navigation (faceted search, product filtering) lets visitors refine a list of products or content by attribute — price, color, size, brand, rating. The SEO problem: each filter combination can spawn a distinct crawlable URL, turning a small catalog into millions of near-duplicate pages that waste crawl budget and dilute ranking signals. URL explosion. Filters (color, size, price range) combine into thousands of unique URLs. Google is candid about the cost: “the crawlers will typically access a very large number of faceted navigation URLs before the crawlers’ processes determine the URLs are in fact useless.”
  • Parameter variants — session IDs, tracking codes (?utm_source=), sort orders — multiply the same content across URLs.
  • Crawl traps — internal search results, infinite calendars, unbounded filter stacking.
  • robots.txt over- or under-blocking — accidentally blocking CSS/JS needed to render, or a valid product path; or failing to block a junk parameter space.
  • JS-gated navigation. Google wants real links: “use <a href> tags when creating links to other content. Don’t use JavaScript events on other HTML DOM elements for navigation.”

Audit steps:

  • Fetch and read robots.txt; confirm nothing important is disallowed and that low-value parameter spaces are.
  • In the crawler, pull “Blocked by robots.txtA Google Search Console Page Indexing status: the URL was excluded from indexing because your robots.txt disallows crawling it. Usually intentional and benign — robots.txt blocks crawling, not indexing.” — any important pages caught?
  • GSC Crawl Stats: look for spikes in crawled URLs against a flat indexed count — that gap is crawl waste.
  • Export all crawled URLs and cluster by path/parameter pattern to size the faceted/parameter problem.

On crawl budget — de-escalate first. Most stores don’t have a crawl-budget problem, and I’ll say so in the audit rather than invent one: “Most sites don’t need to worry about crawl budget, but there are few cases where you may want to take a look.” It becomes real around Google’s thresholds — “Large sites (1 million+ unique pages)…” changing weekly, or 10,000+ pages changing daily — or when “Discovered – currently not indexedA Google Search Console Page Indexing status meaning Google knows the URL exists but hasn't crawled it yet — the Last Crawl date is empty. Often a crawl-capacity or crawl-demand (site-quality) signal.” is large. When it is real, you fix it by removing waste, not by asking Google to crawl more. (Deep dive: crawl budgetThe number of URLs an engine will crawl in a timeframe..)

Step 2 — Indexation

Crawlable isn’t indexed. The GSC Page Indexing reportThe Google Search Console report (formerly Index Coverage) showing how many of your URLs are indexed vs. not indexed, and grouping the not-indexed ones by reason. is the center of gravity for the whole audit — “see which pages Google can find and index on your site, and learn about any indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. problems encountered.”

The statuses that matter most on a store:

  • Duplicate without user-selected canonicalA Google Search Console Page Indexing status: Google found this page to be a duplicate, you didn't declare a canonical, so Google chose a different page as the canonical — and this URL isn't indexed. / Google chose a different canonical — the faceted/variant duplication problem, made visible.
  • Crawled – currently not indexedA Google Search Console Page Indexing status meaning Googlebot fetched the page but Google decided not to index it — usually a content- or site-quality signal, not a technical error. — usually thin product or near-duplicate filter pages.
  • Discovered – currently not indexed — Google knows the URL but hasn’t crawled it; on large catalogs this is a crawl-priority signal.
  • URL marked ‘noindexNoindex is a directive that tells search engines to keep a page out of their index, so it won't appear in search results. It works only on pages a crawler can actually fetch — a page blocked in robots.txt can never be noindexed. — verify it’s intentional. The accidental sitewide version is the “one mistake” scenario.
  • Soft 404A soft 404 is a URL that returns a success status code (usually 200 OK) even though the page is empty, missing, or shows a 'not found' message. It isn't a status code a server sends — it's a label search engines apply after comparing the response code against the rendered content, and they treat the page like a 404 for indexing. — a 200 response on a page that’s effectively empty (out-of-stock, zero-result search). Google warns these “will continue to be crawled, and waste your budget.”

Audit steps:

  • Export “Not indexed” URLs by reason; quantify each bucket.
  • Compare GSC indexed count against your known catalog size — a large gap means Google isn’t finding pages.
  • Run URL Inspection on a sample from each reason bucket.
  • Audit the XML sitemapAn XML sitemap is a UTF-8 file listing the canonical URLs on your site (with optional lastmod) so search engines can discover and prioritize them. It's a discovery and diagnostic aid, not a guarantee of indexing — and Google ignores its priority and changefreq tags.: it should list only canonical, indexable, 200-status URLs. Redirected, noindexed, or canonicalized-away URLs in a sitemap send conflicting signals — pull them.

Step 3 — Duplicate content (the #1 ecommerce issue)

This is the single most common thing an ecommerce audit uncovers, and it’s worth its own step. Google’s Gary Illyes has estimated that roughly 60% of the internet is duplicate contentThe same or very similar primary content reachable at more than one URL. There's no general duplicate content penalty — the real costs are possible signal dilution, the wrong URL getting chosen, and less-efficient crawling. — and stores are overrepresented.

Where it comes from:

  • Faceted navigation?color=blue, ?size=S&color=blue, ?size=S&color=blue&sort=price all serve near-identical content.
  • Parameter-order permutations?color=blue&size=S and ?size=S&color=blue are the same page twice.
  • Product variants as separate URLs?variant=… without a self-referencing canonical or a canonical to the parent.
  • A product living under multiple category paths, both indexable.
  • HTTP/HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.', www/non-www, trailing-slash inconsistency that doesn’t 301 to one canonical.

The Shopify gotcha worth calling out by name. Shopify does canonicalize /collections/{collection}/products/{product} to the clean /products/{product} URL — so people assume it’s handled. It isn’t fully: the internal linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them. from collection pages still point at the non-canonical /collections/... version, so the canonical product URL receives no internal link equity through normal navigation, and it can show up as an orphan. Fixes: add an “All products” page that links the canonical /products/ URLs, or edit collection templates to link the canonical URL directly.

Audit steps:

  • GSC: pull both “Duplicate” buckets from Page Indexing.
  • Crawler Content Quality / duplicate-cluster report: find clusters with no canonical specified.
  • Confirm faceted parameter URLs are handled — Google’s recommended prevention is robots.txt blocking of filter parameters, or fragment-based (#) filtering, which “will have no impact on crawling.” Don’t reach for noindex here (see Myths).
  • Spot-check that Shopify /collections/*/products/* URLs canonicalize to /products/* — and that something links the canonical version.

(Background: duplicate contentThe same or very similar primary content reachable at more than one URL. There's no general duplicate content penalty — the real costs are possible signal dilution, the wrong URL getting chosen, and less-efficient crawling. and canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it..)

Step 4 — On-page at scale

On a store, on-page is a templating problem, not a copywriting one — you’re auditing patterns, not pages.

The recurring issues:

  • Thin category pages (the #2 ecommerce issue). John Mueller is direct about it: “When the ecommerce category pages don’t have any other content at all, other than links to the products, then it’s really hard for us to rank those pages.” But don’t overcorrect into a wall of text — “maybe 90%, 95% of that text is unnecessary,” and “our algorithms sometimes get confused when they have a list of products on top and essentially a giant article on the bottom.” The target is a short, useful block (sourcing, materials, sizing, popularity) near the top — not filler that buries the grid.
  • Templated title collisionsBuy {Product} | Store patterns that go near-identical across products, or two products sharing a name.
  • Missing/empty H1s and titles at the template level.
  • Meta descriptionsThe meta description is an HTML head tag — `<meta name=\"description\" content=\"…\">` — that suggests a short summary of the page for the search snippet. It's not a Google ranking factor, and Google rewrites it the majority of the time, but a good one can still lift click-through. — worth doing on your top category and product pages, less worth it on the long tail (Google rewrites them most of the time anyway).

Audit steps:

  • Crawler On-Page report: filter for missing title, missing H1, missing meta description, duplicate titles, duplicate H1s.
  • Flag category pages with little to no unique body copy (thin-content candidates) and cross-reference against “Crawled – currently not indexed.”
  • Export titles and check for template collisions.

A note on what not to spend audit time on: multiple H1s. They’re valid HTML5 and near-irrelevant to ranking — 51.3% of sites have them somewhere, per my own million-domain study. Skip it.

Step 5 — Technical (CWV, HTTPS, canonicals, mobile)

Core Web VitalsGoogle's three real-user UX metrics — LCP (loading), INP (responsiveness), and CLS (visual stability) — used by Google's ranking systems, with no official weight attached, measured on field data.. Google’s passing thresholds: LCPLargest Contentful Paint — render time of the largest visible image or text block, relative to when the page started loading. ≤2.5 s (at the 75th percentile) is good. < 2.5s, INPInteraction to Next Paint — the input-to-paint latency at the 75th percentile of a page's interactions. ≤200 ms is good. < 200ms, CLSCumulative Layout Shift — a unitless score for unexpected visual movement, taken from the largest burst (session window) of layout shifts, not the lifetime sum. ≤0.1 is good. < 0.1. Ecommerce failure modes are predictable — unoptimized hero images and third-party scripts (chat, A/B, pixels) hurt LCP; add-to-cart and checkout JS hurt INP; images without explicit dimensions and injected promo bars hurt CLS. Audit by URL group in the GSC CWV report so you can see whether it’s product, category, or checkout templates failing, then confirm on representative templates in PageSpeed InsightsPageSpeed Insights (PSI) is a free Google tool at pagespeed.web.dev that reports two kinds of data for a URL: real-user field data from the Chrome UX Report and a single Lighthouse lab run with the 0–100 Performance score. Only the field Core Web Vitals are what Google uses for ranking.. (See Core Web VitalsGoogle's three real-user UX metrics — LCP (loading), INP (responsiveness), and CLS (visual stability) — used by Google's ranking systems, with no official weight attached, measured on field data..)

HTTPS. Everything — product, cart, checkout — on HTTPS, no mixed contentMixed content is when a page served over HTTPS loads a sub-resource — a script, stylesheet, image, iframe, or similar — over insecure HTTP. Browsers' current taxonomy is upgradable versus blockable; active mixed content (scripts, styles, iframes) is blocked, and passive mixed content (images, audio, video) is warned about or increasingly auto-upgraded, with exceptions like CORS-enabled images and srcset/picture candidates that are blockable, not upgradable. (HTTP images/resources on HTTPS pages), and canonicals/redirects pointing at the HTTPS version.

Canonicals. The common ecommerce errors: canonicals pointing at 4XX pages; non-canonical URLs in the sitemap; paginated pages canonicalized to page one (don’t); and — the quiet one — internal links pointing at non-canonical versions so the canonical never accumulates link equity. Multiple rel=canonical tags on one page get ignored.

Mobile-first. Google indexes the mobile version. Make sure the mobile product page isn’t a stripped-down one missing the description, the structured data, or full-size images.

Step 6 — Structured data

For a store, the priority types are Product / ProductGroup, BreadcrumbList, Organization (with return policy), and Review / AggregateRating. Adding more valid properties widens eligibility — Google: “adding the more properties you can add, the more enhancements your page can be eligible for.” (The one myth to keep in your head: schema makes you eligible for rich resultsRich results (formerly 'rich snippets') are enhanced search listings — stars, images, prices, breadcrumbs, video thumbnails, and more — that Google and Bing build from structured data. They're a display feature, not a ranking factor, and eligibility never guarantees they'll show.; it doesn’t make you rank.)

Audit steps:

  • Run the Rich Results Test on a representative product and category page.
  • GSC Enhancements: check Product Snippets and Merchant Listings for errors/warnings.
  • Check required vs. recommended separately per feature — don’t collapse them. For merchant listings, Google’s required set is name, image, and offers (an Offer, with price, priceCurrency, and availability). For product snippets, name is required and you need at least one of review, aggregateRating, or offers to be eligible — Google lists aggregateRating, offers, and review as recommended, not required, on that feature.
  • Common faults: missing image, missing offers, missing availability, schema prices that don’t match the visible price (a policy violation), breadcrumb schema that doesn’t match the visible trail.

Step 7 — Internal linking

The issues: orphan product pages (classic Shopify symptom, above); important category/product pages buried 5+ clicks deep; internal links pointing at redirects or 404s; best sellers not linked from high-authority hubs. Google: “add links from menus to category pages, from category pages to sub-category pages, and finally from sub-category pages to all product pages.”

Audit steps:

  • Crawler Links report: pull orphan pagesAn orphan page is a page on your site that no other page links to internally. Because crawlers discover pages by following links, an orphan page is effectively invisible to search engines unless it's in an XML sitemap or linked from an external site. and crawl depthCrawl depth usually means click depth — how many clicks it takes to reach a page from the homepage by following internal links. It can also mean a crawler setting that limits how many levels deep a crawl goes before it stops.; confirm key pages sit within ~3 clicks of the homepage.
  • Pull links to redirects and broken links.
  • Check that your highest-revenue products are linked from the main nav and editorial/hub pages.

Step 8 — Out-of-stock and discontinued products

A genuinely ecommerce-only section. My honest answer here is the SEO cliché for a reason: “though it’s a joke in the SEO community, ‘it depends’ is really the answer when dealing with out-of-stock products.” And “ultimately, there’s no perfect solution.” The decision turns on whether it’s temporary vs. permanent and whether the page has traffic or links:

ScenarioWhat I doWhy
Temporarily OOSKeep the page liveAdd restock dates, waitlist, notify-me; don’t throw away ranking
Permanently discontinued, close replacement301 to the similar productPreserves link equity if they’re genuinely similar
Discontinued, no match, has links/trafficKeep live with “related products”Retains ranking potential; route users onward
Discontinued, no links/traffic404 or 410Clean it up; fix internal links pointing at it

Watch for soft 404s: out-of-stock pages, zero-result searches, or empty cart/account pages returning 200. Pull the Soft 404 bucket in GSC and resolve by pattern. (See out-of-stock productsAn out-of-stock product page is a product URL whose item can't currently be bought. The right SEO treatment depends on whether the stockout is temporary, indefinite, or permanent — keep temporary stockouts live at 200 with OutOfStock schema; 301 permanently discontinued products to a relevant replacement. for the full framework.)

Step 9 — Off-page

Lighter for most stores, but worth a pass:

  • GSC Performance: branded vs. non-branded click share — heavy branded reliance means weak non-branded discovery.
  • Backlink profile by page type — are category/product pages earning links, or only the homepage and blog?
  • Find 404 pages that have backlinks and 301 them to the closest live page (reclaim the equity).
  • Competitor link gap on category pages.

How to prioritize the findings

Everything above produces a list. The list is not the deliverable — the sorted list is. I score each finding on an impact/effort matrix: “anything high-impact and low-effort is a quick win, so those tasks should be tackled first.” For a store:

  • High impact / low effort — do first: a stray sitewide noindex; a sitemap full of redirect/noindex URLs; missing canonicals on variant URLs; internal links pointing at redirects; out-of-stock soft 404s.
  • High impact / high effort — plan and schedule: faceted-nav architecture; Core Web VitalsWeb Vitals is Google's initiative (launched May 2020) for unified page-experience quality signals. Core Web Vitals — LCP, INP, and CLS — are the subset used in ranking; the rest (TTFB, FCP, TBT, Speed Index) are diagnostic, not ranking factors. work; rolling Product schemaProduct schema (schema.org/Product) is structured data that tells search engines a page's product name, price, availability, and reviews so it can appear in Shopping-style rich results. It's separate from a Google Merchant Center feed, though Google reconciles the two. across templates; crawl-depth / architecture fixes.
  • Low impact / low effort — when time allows: meta descriptions on long-tail products; minor title-template tidy-ups.
  • Low impact / high effort — skip: redirect-chain cleanup on zero-traffic pages; Open GraphOpen Graph (OG) tags are `<meta>` elements in a page's head, defined by the Open Graph protocol (ogp.me, created by Facebook), that describe a page as a shareable object — its title, description, image, URL, and type. They control how a link preview card looks when the page is shared on Facebook, LinkedIn, Slack, Discord, WhatsApp, and iMessage. They are not a direct Google ranking factor, though Google reads og:title, og:image, and og:site_name as inputs to how a result appears. tags (social, not ranking).

The whole point of the matrix is permission to not do things.

Common myths to clear up in the report

  • “More indexed pages = better SEO.” No — Google’s own advice is to “eliminate duplicate content to focus crawling on unique content rather than unique URLs.” Inflating the index with thin variant pages usually hurts.
  • “Use noindex to save crawl budget on facets.” No: “don’t use noindex, as Google will still request, but then drop the page… wasting crawling time.” Block the fetch (robots.txt) or use fragment filtering instead.
  • “Shopify handles all canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it..” It sets the canonical tagA rel=\"canonical\" annotation — in the HTML <head> or an HTTP Link header — that tells search engines which URL is the preferred version of duplicate or near-duplicate content., but it doesn’t fix the internal-linking-to-non-canonical problem. See Step 3.
  • “Crawl budget affects every store.” It doesn’t — most stores never need to think about it.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.