Technical SEO for Ecommerce: Facets, Pagination and Crawl Budget in the Right Order
Google's ecommerce docs say which crawl problems matter. I ordered facets, pagination, canonicals and crawl budget by URLs touched, and each platform's default.

Technical SEO for ecommerce is seven jobs, and the order matters more than the list. I sorted them by how many URLs each one touches, using Google's own ecommerce documentation as the source for every rule:
- Facets: Parameter filters create what Google calls infinite URL spaces. Index a few single facets on purpose and disallow the rest in robots.txt.
- Pagination: One unique URL and one self-referencing canonical per page. Google no longer reads rel=next and rel=prev and says not to canonicalise to page one.
- Canonicals and variants: Variants get their own URL; the parameter-free URL is the canonical. Same URL in links, sitemap and the tag.
- Crawl budget: Google's guide is for 1 million+ pages, or 10,000+ that change daily. Facets push small stores over that line, which is why they come first.
- Schema, out-of-stock, speed: Merchant listing markup on every product, honest availability and 404s for gone products, then server health so the crawl capacity limit rises.
Shopify, BigCommerce and Magento each handle a different slice of this by default, WooCommerce handles almost none, and headless handles nothing. The platform table below says which.
Every page ranking for this keyword lists the same ten issues in no particular order. This one orders them by Google's own ecommerce documentation and by how many URLs each touches, then records what Shopify, WooCommerce, BigCommerce, Magento and headless stores do about each by default. Try CrawlRaven free: 1 site, no credit card →
The short answer: fix the problems in the order of URLs they touch
Technical SEO for ecommerce is the work of keeping a catalog-generated site crawlable, and the order matters more than the list. Facets first, because they create the most URLs. Then pagination, canonicals and variants, crawl budget, schema, out-of-stock handling and speed. That order comes from Google's ecommerce documentation, not from a tool's severity colours.
I read the eight Google documents that cover stores end to end and sorted their rules by how many URLs each touches. A facet rule touches an infinite space; a pagination rule touches every category times its pages; a speed fix touches every fetch but changes no URL.
Key Takeaways
- →Facets before everything: Google's faceted navigation guide says parameter filters can generate infinite URL spaces. Index a few single facets on purpose; disallow the rest in robots.txt.
- →Pagination is not a facet: Each page gets a unique URL and its own canonical. Google no longer reads rel=next and rel=prev, and says not to canonicalise the sequence to page one.
- →Crawl budget is a symptom: Google's guide targets 1 million+ pages, or 10,000+ that change daily. Steps 1 to 3 are the fix; step 4 is where you check it worked.
- →Platforms differ more than the guides admit: Shopify blocks stacked filters by default. BigCommerce canonicalises them. Magento ships with canonicals off. WooCommerce core writes none on archives. Headless does nothing.
- →The audit runs in the same order: Facets, pagination, canonicals, crawl stats, schema, stock, speed. Each step clears the noise the next one would otherwise report.
The order of operations for ecommerce technical SEO
Here is the sequence and the Google document each step rests on, sorted by how many URLs it touches. The rest of the article expands one step at a time.
Seven ecommerce technical SEO jobs, sorted by how many URLs each one touches
- Faceted navigation (faceted navigation guide): an unbounded URL space.
- Pagination (pagination guide): every category times its pages.
- Canonicals and variants (URL structure guide): every product times its copies.
- Crawl budget (crawl budget guide): the whole hostname.
- Product structured data (Product structured data guide): every product page.
- Out-of-stock handling (crawl budget guide again): a rotating subset of products.
- Speed and server health (the crawl capacity limit): every fetch, no URL.
Practitioners learn this order the expensive way. One r/TechSEO post from September 2026 describes months of flat traffic before the author "found Googlebot burning most of its budget on faceted navigation URLs nobody needed indexed". The fix was steps 1 and 3.
Step 1: Faceted navigation, the infinite URL space
Google's faceted navigation guide is blunt about the cost. Parameter filters "can generate infinite URL spaces", which hurts two ways: overcrawling, because crawlers "can't determine whether the URLs are going to be useful without crawling first", and "slower discovery crawls".
The guide offers exactly two paths. If you do not need the filtered URLs indexed, prevent crawling. If you do, follow a short list of URL rules and accept that "crawling faceted URLs tends to cost sites large amounts of computing resources".
- robots.txt. Google's preferred tool: "Oftentimes there's no good reason to allow crawling of filtered items".
- URL fragments. Put filters after a #. Google "generally doesn't support URL fragments in crawling and indexing", so no URLs are created.
- rel=canonical and rel=nofollow. Listed as options, then described as "generally less effective in the long term".
- If you index facets anyway. Use the & separator, keep path filters in one fixed order, and "Return an HTTP 404 status code when a filter combination doesn't return results".
Every filtered URL a store can emit, and what Google's own guidance says to do with it
The facet rule to implement
The rule is per facet, not per site. Most stores have two or three single facets with real search demand (a brand, a material) and hundreds of combinations with none:
- List every parameter the template can emit. Filters, sorts, price ranges, stock and rating toggles, view modes, page size. On Magento that includes product_list_order and product_list_limit; on BigCommerce it starts with _bc_fsnf.
- Pick the indexable single facets. Pull the queries from Search Console, keep the facets with their own demand, and give each a fixed URL, its own copy and a self-referencing canonical tag.
- Disallow everything else. Stacked facets, sorts, price brackets and toggles go into robots.txt. Test the patterns with the free robots.txt tester before you deploy.
- 404 the empty combinations. No green fish in stock means a real 404 at that URL, not a redirect to a generic not-found page and not an empty 200.
A robots.txt shape that matches the matrix, for a store whose facets use key=value parameters:
# Block stacked facets, sorts and toggles; leave single facets crawlable
User-agent: *
Disallow: /*?*sort=
Disallow: /*?*price=
Disallow: /*?*in_stock=
Disallow: /*?*&*=
Disallow: /searchThe rule has to outlive the sprint. A September 2026 r/TechSEO thread on problems that come back puts it in one line: "Parameter URLs are blocked, and a new filter creates another set." So write the default into the template: a new parameter is disallowed until someone argues it into the index.
Step 2: Pagination SEO, one URL and one canonical per page
Google's pagination guide lists three practices: link pages sequentially, use URLs correctly, and avoid indexing filtered or re-sorted versions of the list. The URL structure guide adds the line that explains why this is step 2: "We see the most URL mistakes in pagination URL structures."
- Unique URL per page. "Give each page a unique URL. For example, include a ?page=n query parameter, as URLs in a paginated sequence are treated as separate pages by Google."
- No canonical to page one. "Don't use the first page of a paginated sequence as the canonical page. Instead, give each page its own canonical URL."
- rel=next and rel=prev are retired. "Google no longer uses these tags, although these links may still be used by other search engines."
- No fragments. Google ignores text after a #, so a next link that differs only there may not be followed.
- Titles may repeat. Pages in a sequence "don't need to follow" the distinct-title rule.
- Link back to page one. Google calls it "a hint that the first page of a collection might be a better landing page".
Load more and infinite scroll get one paragraph in the guide, and it is the one that matters. Google's crawlers "don't 'click' buttons and generally don't trigger JavaScript functions that require user actions". A load-more button with no paginated URL behind it hides every product past the first screen.
The site structure guide closes the loop: "If category pages don't include direct links to all products in a category, Googlebot might not find all of your products by crawling alone." The head of a page-2 URL should look like this:
<!-- /shoes?page=2 -->
<link rel="canonical" href="https://example.com/shoes?page=2">
<a href="/shoes?page=1">Previous</a>
<a href="/shoes?page=3">Next</a>
<!-- No rel="next" or rel="prev" needed: Google no longer uses them -->Step 3: Canonicals and product variants
Google's canonicalization guide ranks the signals plainly: a redirect is "A strong signal", a rel=canonical annotation is "A strong signal", and sitemap inclusion is "A weak signal". On a store the tag does most of the work, because the duplicates are meant to stay live.
Variants are the ecommerce-specific part. The URL structure guide asks that "each variant can be identified by a separate URL", a path segment like /t-shirt/green or a parameter like /t-shirt?color=green. Then the rule most platforms apply for free: "use the URL with the query parameter omitted as the canonical URL".
- Collection-path copies. /collections/sale/products/x and /products/x are one page; the canonical points at the plain product URL. The Shopify canonical guide records what live stores emit.
- Variant parameters. ?variant=, ?color=, ?size= canonicalise to the bare product URL unless the variant is really a different product.
- Sort and filter parameters. Canonical to the unfiltered category, and blocked in robots.txt per step 1.
- Market and domain copies. A second currency or language is a separate page with hreflang. A second domain serving the same catalog is a redirect.
The rule that ties it together is consistency: "Use the same URL in internal links, sitemap files, and <link rel="canonical"> tags." Self-referencing canonical on every indexable page, only those URLs in the sitemap, and one product checked four ways with the free canonical checker; duplicate content covers the general case.
Step 4: Crawl budget, and whether you actually have a crawl budget problem
Google's crawl budget guide opens by telling most sites to close it. It is for "Large sites (1 million+ unique pages)" that change weekly, "Medium or larger sites (10,000+ unique pages)" that change daily, and sites with a large share of URLs sitting in "Discovered - currently not indexed".
A 3,000-product store does not sound like that. With four facets and three sort orders on every collection it is, which is the argument for doing facets first. Crawl budget is the symptom; the URL space is the disease. The lever you own is perceived inventory, "the factor that you can positively control the most".
- Consolidate duplicates so crawling goes to "unique content rather than unique URLs". That is step 3.
- Block with robots.txt the pages you never want processed, including "differently sorted versions of the same page". That is step 1.
- Do not use noindex for this. "Google will still request, but then drop the page when it sees a noindex meta tag or header in the HTTP response, wasting crawling time."
- 404 or 410 removed pages. "A 404 status code is a strong signal not to crawl that URL again." Blocked URLs, by contrast, stay in the queue.
- Kill soft 404s, keep sitemaps current with lastmod, avoid redirect chains, support 304. Each is a line in the guide's best-practice list.
One expectation to reset. Google "won't shift this newly available crawl budget to other pages unless Google is already hitting your site's crawl capacity limit". Blocking facets buys faster discovery and less server load, not a bigger crawl by itself.
To check where you stand: Crawl Stats in Search Console for the share of fetches going to parameter URLs, then the Pages report for Discovered - currently not indexed. Run a product URL and a facet URL through the free page indexability checker to confirm the signals agree with what you intended.
Step 5: Product structured data on every product page
Google's Product structured data guide draws one line first: product snippets are "For product pages where people can't directly purchase the product", merchant listings "For pages where customers can purchase products from you". A store wants merchant listing markup.
- One entity per page. A Product, or a ProductGroup with one Product per variant. A reviews app that injects a second Product block is the usual fault.
- An honest Offer. price, priceCurrency and availability that match what the page shows. Availability is also how step 6 gets communicated.
- Variants as variants. Variant markup "can help Google better understand which products are variations of the same parent product".
- Policies once, at Organization level. Merchant return policy and loyalty program markup nest under Organization, not on every product.
- Feed plus markup. "Providing both structured data on web pages and a Merchant Center feed maximizes your eligibility to experiences."
Validate the rendered page, not the template, because apps and tag managers inject markup after the theme runs. Schema is step 5 because it changes how an already-crawled page is understood, not which pages get crawled. Rich result experiences are shown at Google's discretion, so treat eligibility as the goal and the stars as a bonus.
Step 6: Out-of-stock and discontinued products
Stock changes touch a rotating subset of product URLs, which is why this sits after the store-wide rules. Three states, three answers:
- Temporarily out of stock. Keep the page live with a 200, set the Offer availability to OutOfStock, keep it in the sitemap and category links. Rankings and links survive the restock.
- Permanently gone. "Return a 404 or 410 status code for permanently removed pages." If a direct replacement exists, redirect to it; never to the category or home page, which Google treats as a soft 404.
- Empty category. The URL structure guide: "If a category has no items, use a noindex robots meta tag", and if the site removes the category from navigation, "consider returning a 404".
The failure mode to watch is the soft 404: a discontinued product still answering 200 with an empty template. The crawl budget guide says soft 404 pages "will continue to be crawled, and waste your budget". The Pages report lists them under Soft 404.
Step 7: Speed, which Google files under crawl capacity
Speed is last because it changes no URL, only how many fetches Google is willing to make. The crawl budget guide's crawl capacity limit rises when "response times (including latency and Time-to-First Byte) remain stable or improve" and falls on slower responses, "server errors (5xx HTTP status codes)" or "rate-limiting signals (such as HTTP 429)".
- Measure time to first byte on category templates. Google fetches those most, and a slow facet query behind a 200 is a capacity leak.
- Support 304 Not Modified. "If a page hasn't changed since Google last crawled it, returning a 304 code tells Google to reuse the cached version."
- Never rate-limit Googlebot with 429. Google reads it as a signal to crawl less, and the reduced limit takes time to recover.
- Only then look at Core Web Vitals, a page-experience question covered in the technical SEO audit checklist.
What each platform does by default: Shopify, WooCommerce, BigCommerce, Magento, headless
Google's URL structure guide says that on a platform "you can most likely skip this section, as the platform has most likely already considered these issues for you". That is true in different amounts. I checked each platform's documentation, core source or live demo store in September 2026.
Where facets and pagination live on each platform, and what it does with them before you touch anything
| Platform | Facet URL | Pagination URL | What it does by default | How I checked |
|---|---|---|---|---|
| Shopify | ?filter.v.option.color=red | ?page=2 (self-canonical) | robots.txt disallows sort_by, multi-tag and multi-filter URLs; single filter canonicalises to the bare collection | Verified on the Dawn demo store |
| WooCommerce | ?filter_color=blue&query_type_color=or | /page/2/ | No canonical on filtered or paginated archives from WordPress core; no robots.txt rule for filters | Verified in core source |
| BigCommerce | ?_bc_fsnf=1&Color=Black | ?page=2 (self-canonical) | Facet and sort URLs canonicalise to the category; robots.txt blocks search.php, cart, checkout, not facets | Verified on the Cornerstone demo store |
| Magento | ?color=52 (layered navigation) | ?p=2 | Canonical tags off by default for categories and products; category path excluded from product URLs by default | Verified in core config.xml and Adobe docs |
| Headless | Whatever you build | Whatever you build | Nothing by default | By construction |
- Shopify. Filters come from the Search & Discovery app as filter.v and filter.p parameters; the default robots.txt disallows sort_by, multi-tag and multi-filter URLs, and the paginate tag allows 1 to 250 items per page. See the Shopify robots.txt guide.
- WooCommerce. Layered navigation writes filter_ and query_type_ parameters, sorting uses orderby, WordPress paginates at /page/2/, and core rel_canonical() returns early on anything not singular, so archives carry no canonical until an SEO plugin adds one.
- BigCommerce. Stencil's product filtering emits ?_bc_fsnf=1 plus the facet, and the canonical on facet and sort URLs points at the bare category. The default robots.txt does not touch facets, so the canonical is the only guard.
- Magento and Adobe Commerce. Layered navigation appends attribute parameters like ?style_general=135 (the example in Adobe's catalog URL documentation) and the toolbar paginates with ?p=2. In core config.xml, category_canonical_tag and product_canonical_tag both default to 0. Turn both on first.
- Headless. Hydrogen, Next.js Commerce and Vue Storefront give you components, not defaults. Canonical, robots.txt, the 404 on empty combinations and real <a href> pagination are yours to write.
Two things I could not verify from a fetchable source: the admin menu path for Magento's canonical settings (the config keys are verified), and whether BigCommerce's product filtering is on every plan. Confirm both in your own admin.
How to audit an ecommerce site in this order
The order above is the audit order too, because each step clears the noise the next one would otherwise report. Seven checks, one per step:
- Facets. Crawl one collection and count URLs with two or more parameters, then confirm a stacked-facet URL is blocked in the robots.txt tester.
- Pagination. Fetch ?page=2 and read the canonical. It should be ?page=2, and the next link should be a plain anchor.
- Canonicals. Run one product through the canonical checker four ways: plain, collection path, variant parameter, second domain.
- Crawl budget. Crawl Stats, then the Pages report for Discovered - currently not indexed and Soft 404. Check the sitemap with the sitemap validator so only canonical URLs are listed.
- Schema. The Rich Results Test on a rendered product URL. Count the Product entities; the answer is one.
- Out of stock. Fetch ten discontinued products. Any 200 with an empty template is a soft 404.
- Speed. Average response time in Crawl Stats, then TTFB on the slowest category.
Doing this for one collection proves the template. Doing it for the whole store, and knowing which finding to fix first, is what the audit is for. CrawlRaven joins Search Console, GA4 and a 200-point crawl into one ranked plan.
Because Search Console and GA4 are built in, the ecommerce SEO audit and the technical SEO audit rank each finding by ranking impact. So the facet rule that frees crawl on your best-earning collection outranks the schema warning on a product nobody visits.
Free plan: 1 site, no credit card. Lifetime licences launched at $49 for 3 sites. Lifetime pricing steps up as licenses sell, so check the pricing page for the current batch. See pricing.
Every crawler I have used paints missing schema and duplicate titles red and lists parameter URLs as a count. On a store the count is the problem and the red rows are noise until it is fixed. Sort by URLs touched, then by the collections that earn clicks, and the plan writes itself.
For the rest of the store review: the ecommerce SEO checklist covers the on-page and category work, SaaS SEO vs ecommerce SEO explains why crawl problems are an ecommerce problem first, and how to perform a technical SEO audit is the platform-agnostic walkthrough. Indexation covers the vocabulary.
Technical SEO for ecommerce FAQs
Facets and crawl budget
Should facet pages be noindexed or blocked? Blocked, if the goal is crawl budget. Google says noindex still costs the fetch, and calls canonical and nofollow "generally less effective in the long term" than robots.txt or fragments.
How do I know facets are wasting crawl budget? Crawl Stats shows which URLs Google samples; the Pages report shows how many products sit in Discovered - currently not indexed. Parameter URLs in the first and products in the second is the signature.
Pagination and canonicals
Does Google still use rel=next and rel=prev? No. The pagination guide says Google no longer uses them, though other engines may. Sequential <a href> links and a unique, self-canonical URL per page are what it relies on.
Should product variants have their own URLs? Yes, as a path segment or a query parameter, per Google's URL structure guide. When the parameter is optional, the URL without it is the canonical on every variant page.
Platforms and troubleshooting
My facet URLs are blocked but still indexed. Why? Robots.txt stops crawling, not indexing. URLs Google already knew stay indexed until it recrawls them, which it now cannot; blocked URLs "will stay part of your crawl queue much longer". Remove the links to them and wait.
Does blocking facets make Google crawl more products? Not by itself. Google says it will not shift the freed budget to other pages unless it was already hitting your crawl capacity limit. What you gain is faster discovery of new URLs and less server load.
Sources
- Google: best practices for ecommerce sites in Google Search (hub), managing crawling of faceted navigation URLs, pagination and incremental page loading, designing a URL structure for ecommerce websites.
- Google: optimize your crawl budget, help Google understand your ecommerce website structure, how to specify a canonical URL, introduction to Product structured data.
- Shopify: editing robots.txt, storefront filtering URL parameters, paginate tag; live canonicals on theme-dawn-demo.myshopify.com, September 2026.
- WooCommerce core: class-wc-widget-layered-nav.php and WordPress: paginate_links().
- BigCommerce: live canonicals and robots.txt on cornerstone-light-demo.mybigcommerce.com, September 2026.
- Magento core: Catalog config.xml, Adobe Commerce: catalog URLs, layered navigation.
- Reddit r/TechSEO threads quoted above, September 2026.
- Keyword volumes: DataForSEO, US, September 2026. "Technical seo for ecommerce" 110 searches a month, up 189% year on year; "pagination seo" 210; "faceted navigation seo" 110; "crawl budget seo" 70; "crawl budget optimization" 70; "ecommerce technical seo" 50; "ecommerce site structure" 30.
Frequently asked questions
What is technical SEO for ecommerce?
Technical SEO for ecommerce is the work of keeping a catalog-generated site crawlable and indexable: faceted navigation, pagination, canonical tags for product variants, crawl budget, Product structured data, out-of-stock handling and server speed. Google publishes dedicated ecommerce guides for URL structure, site structure and pagination; this article orders their rules by how many URLs each touches.
What does Google recommend for faceted navigation?
Google's faceted navigation guide says parameter-based filters can generate infinite URL spaces. If the filtered URLs do not need indexing, prevent crawling with robots.txt or move filters into URL fragments. If they do, use the standard ampersand separator, keep path filters in one fixed order, and return a 404 when a combination has no results.
Should facet pages be noindexed or blocked in robots.txt?
Blocked, if the goal is crawl budget. Google's crawl budget guide says not to use noindex for this, because Google still requests the page and only drops it after seeing the tag, which wastes the fetch. It also calls rel=canonical and rel=nofollow on facet URLs generally less effective long term than robots.txt or fragments.
How do I know whether faceted navigation is wasting crawl budget?
Open Crawl Stats in Search Console and look at the sampled URLs, then filter the Pages report for Discovered - currently not indexed. Parameter URLs dominating the samples while product URLs sit in Discovered is the signature. Google lists a large share of Discovered URLs as one of three signs a site needs its crawl budget guide.
What is the correct pagination setup for ecommerce SEO?
Give every page a unique URL such as ?page=2, a self-referencing canonical, and a plain a href link from the previous page. Google's pagination guide says not to use the first page as the canonical, that page titles may repeat across the sequence, and that its crawlers do not click load-more buttons or trigger JavaScript to reveal content.
Does Google still use rel=next and rel=prev?
No. Google's pagination and incremental page loading documentation states that it no longer uses link rel=next and rel=prev to identify page relationships, although other search engines may still read them. Sequential a href links between pages and a unique, self-canonical URL per page are what Google relies on now.
Should product variants have their own URLs?
Yes, so Google can identify each one. Google's ecommerce URL structure guide recommends a path segment such as /t-shirt/green or a query parameter such as ?color=green per variant. If the parameter is optional, the URL without it should be the canonical on every variant page, which is what Shopify's ?variant= handling already does.
What should happen to out-of-stock product pages?
Keep a temporarily unavailable product live with a 200 status and OutOfStock availability in its Offer markup, so links and rankings survive the restock. For a product that will not return, Google's crawl budget guide says to return a 404 or 410, a strong signal not to recrawl, or redirect to a direct replacement.
Which ecommerce platform handles facets and pagination best by default?
Shopify does the most: its default robots.txt disallows sorted, multi-tag and multi-filter collection URLs, single filters canonicalise to the bare collection, and ?page=2 self-canonicalises. BigCommerce canonicalises facets and sorts to the category. Magento ships with canonical tags off for categories and products. WooCommerce core writes no canonical on filtered archives at all.
15+ years of growing SaaS websites through SEO | Author, 200-Point Audit Checklist
Aditi has spent 15+ years helping SaaS companies scale organic traffic through technical SEO and content strategy. She is the author of the CrawlRaven 200-Point Audit checklist used by agencies and in-house teams to systematically improve search performance.