Start with server logs, not with a crawler
A crawler shows what can be found on the site. Logs show what Googlebot actually does, and that is usually a different picture. We take 30 days of logs, filter to verified Google IP ranges, and group hits by path pattern: product pages, categories, categories with parameters, internal search, static assets.
Three numbers matter. The share of hits on parameterised URLs, where anything above 30 per cent means faceted navigation is eating the budget. The share of product pages crawled at least once in 30 days, because if 40 per cent of the live catalogue was never fetched, new products will take weeks to appear. And the response code distribution, where any noticeable share of 5xx errors or redirect chains is a direct loss.
Alongside that we read the Search Console crawl stats: average requests per day, average response time and the breakdown by crawl purpose. A jump in average response time above 800 ms usually precedes a drop of tens of per cent in pages crawled, which makes it an early warning indicator rather than a curiosity.
The indexation traps we see most often
Internal search results in the index are a classic and the easiest win in any audit. Query-parameter URLs create an infinite space, frequently with zero results, and they look to Google like low-quality pages. Blocking that path in robots.txt and removing links to popular searches from navigation modules usually removes a low double-digit percentage of bot hits within the first week.
The second common trap is out-of-stock products returning 200 with an empty body and an availability notice. Google classifies those as soft 404s and over time starts treating similar URLs with suspicion by default. The third is pagination with canonical tags pointing at page one, which leaves products on deeper pages with no path into the index at all.
It is also worth reading the indexing report for the discovered, currently not indexed state. If it covers more than 30 per cent of your sitemap URLs, this is not a patience problem, it is Google saying it sees no reason to fetch those pages. The cause is usually manufacturer-supplied duplicate descriptions or missing internal links into the deeper catalogue.
- Internal search out of the index and unlinked from navigation
- Out-of-stock handling: 200 with alternatives, 301 to a successor, 410 when discontinued for good
- Self-referencing canonicals on paginated pages, not canonicals to page one
- Sitemaps containing only indexable URLs that return 200
- Symmetric hreflang, with return links on every language version
The life cycle of a product URL
What happens to a product leaving the range has a direct traffic impact, because those pages often hold the most links and history. If the product returns within a few weeks, keep the URL at 200 with a clear availability message and a list of alternatives from the same category. Only the availability property in the structured data changes, so the search result does not lie about stock.
If there is a direct successor, a 301 to its page is correct and carries the link value across. Redirecting every discontinued product to its category en masse, on the other hand, is a fast route to soft 404s, because Google recognises redirects to unrelated pages. For a permanent withdrawal with no successor, 410 plus removal from the sitemap is the cleanest option.
All of this should follow rules encoded in the system rather than decisions made by whoever adds products. On a store rotating several hundred SKUs a month, managing the process by hand has no chance of working, and the errors accumulate for years before landing on our desk as an unexplained visibility decline.
Rendering and JavaScript
Google renders JavaScript, but it does so in a second pass, and on large sites the delay can stretch to days. If a category listing fetches products client-side, part of the catalogue will be indexed late or not at all. The test is straightforward: fetch the page with JavaScript disabled, or compare raw and rendered HTML in Screaming Frog's rendering mode.
On Next.js builds the problem usually appears where critical content sits in a client component loaded dynamically with server rendering disabled. Category copy, product data and internal links must be in the initial HTML; the rest can arrive later. Check this on the mobile version specifically, since mobile-first indexing means that is the version being evaluated.
Prioritising: what to fix first
An audit that ends in 120 observations is useless, because nobody knows where to start. We describe every task with three numbers: estimated traffic impact, confidence in that estimate, and implementation cost in days. Sorting on those three tends to push dull items to the top, such as internal search in the index or redirect chains, and push ambitious rebuilds down.
The second filter is revenue linkage. Fixing indexation in a category worth 2 per cent of turnover matters less than the same fix in a category worth 30 per cent, even when the technical work is identical. So we ask for the revenue split by category before the audit starts, and the report is written in that order rather than in the order of the tool's tabs.
Key takeaways
- Server logs show what Googlebot really does; a crawler only shows what it could do.
- Faceted navigation is the main consumer of crawl budget on retail sites.
- Never block URLs in robots.txt that you expect a canonical tag to consolidate.
- Product URL life-cycle rules belong in the system, not in an operator's head.
- Prioritise by category revenue share, not by technical difficulty.
Common questions
For a store with 10,000 to 50,000 URLs, usually two to three weeks, with about a week going into collecting and analysing server logs alongside the crawl. Writing the report is quick; validating hypotheses against data is what takes the time. Implementing the recommendations normally takes longer than the audit, and that is the part that determines the outcome.
Only the ones matching real user queries, which normally means a category plus a single attribute such as colour, size or brand. Those pages need their own title, description and copy, otherwise they will be treated as duplicates. Multi-filter combinations, sort orders and pagination should stay out of the index.
The fullest picture comes from 30 days of server logs restricted to verified Googlebot and grouped by URL pattern. The Search Console crawl stats report supplements it with requests per day, average response time and crawl purpose. The warning sign is more than 30 per cent of hits landing on parameterised URLs.