A technical SEO audit has one job: tell you what to fix first, and why. Most audits fail at that job because they stop at data collection — a 40,000-row crawl export with no interpretation. The checklist below is the one we run before and after every release, and it is the same model PruneSEO is built around. It is ordered by leverage: fix access before you chase content, and fix patterns before you fix individual URLs.
If a finding affects one URL, fix the URL. If it affects 4,000 URLs, fix the pattern.
1. Confirm crawl access and robots directives
Start at the front door. Fetch robots.txt and confirm it is not blocking the pages, CSS, or JavaScript the site depends on. A single stale Disallow: / line can undo months of content work. Check for host directives, conflicting rules between environments, and staging rules that leaked into production.
One nuance worth repeating: blocking a URL in robots.txt prevents crawling, not indexing. A disallowed URL can still appear in search results if something links to it. If the goal is removal from the index, you need noindex on a crawlable page — not a disallow.
2. Check indexability at scale
Indexability is not a single tag. Look for noindex in meta tags and X-Robots-Tag headers, canonical conflicts, and pages that return a 200 but render an error or empty template. Sample by template rather than URL: if one product page has a stray noindex, the whole product template probably does.
Watch for contradictory signals. A page that is both noindex and canonicalised elsewhere tells search engines two different things. Pick one intent per template and apply it consistently.
3. Build a URL inventory and group by pattern
The raw number of URLs matters less than the shape of the URL space. Group your crawl by path template, parameter set, and status family. A catalogue with 50,000 URLs might really be 400 product templates, 1,200 category pages, and 48,000 sort and filter combinations. That single reframing changes the entire conversation.
For each group, note the count, the status codes, the canonical target, and whether the group is linked from navigation. The groups with the highest count and the lowest value are your SEO waste candidates.
4. Find parameter and faceted navigation waste
Sort parameters, filters, tracking parameters, session IDs, and view modes are the usual suspects. Decide per pattern, not per URL: keep, canonicalise, noindex, or block. Blanket-blocking every parameter often removes legitimate landing pages and link equity along with the junk.
Ask of each pattern: can this URL rank for a query we care about? If yes, keep it crawlable and make it self-canonical. If no, stop it from consuming crawl attention.
5. Audit canonical signals across patterns
Canonicals should point to the preferred version of a page, and they should agree with the sitemap, internal links, and redirects. Common failures include self-referencing canonicals on paginated series, cross-domain canonicals left over from a migration, and canonical tags injected by a component that does not know the page context.
Do not treat canonical tags as a licence to publish duplicates. They are a hint. At scale, the cleanest fix is usually to stop generating the duplicate URL in the first place.
6. Reconcile sitemaps with the crawl inventory
A sitemap should contain canonical, indexable, 200-status URLs. If it contains noindex pages, redirects, or 404s, it is actively wasting attention. Compare sitemap URLs against your crawl inventory and look for drift — new templates missing from the sitemap, retired templates still listed, and URLs that only exist in the sitemap.
Internal linking and sitemaps should tell the same story about which pages matter.
7. Clean up redirects and status codes
Find chains, loops, and temporary redirects used as permanent moves. A three-hop chain is a bug; a loop is an outage for that URL. Also check for soft 404s — pages that return 200 but show no meaningful content — and for old URLs still receiving internal links.
When a page is gone for good, a 410 can be cleaner than a redirect to an unrelated category. Redirect to the closest genuinely equivalent page, or let it go.
8. Measure internal link depth and orphans
Important pages should be reachable within a few clicks of the homepage. Crawl depth exposes pages that are technically indexable but practically invisible. Orphan pages — reachable from no internal link — are the extreme case and often accumulate after migrations.
Link depth is also a prioritisation tool: the pages you want ranked should be the pages you link to most clearly.
9. Compare crawls over time
An audit is a baseline, not a one-off. Re-crawl after changes and compare the same patterns. Did the duplicate group shrink? Did the noindex count fall? Did the redirect chains disappear? Without a comparison, you are asserting progress rather than measuring it.
This is why PruneSEO includes four crawl runs per website per month and keeps crawl comparison at the pattern level.
How to run this audit in a week
- Monday: crawl the site and pull server logs for the last 30 days.
- Tuesday: classify URLs into patterns and rank groups by count and value.
- Wednesday: verify a sample of each finding manually in a browser.
- Thursday: write the action plan: pattern, evidence, impact, owner, fix.
- Friday: ship the top three fixes and schedule the re-crawl.
Frequently asked questions
How often should you run a technical SEO audit?
Run a full audit quarterly, and a focused crawl after any major release, migration, or template change. Large sites with frequent publishing benefit from a monthly crawl comparison.
Do you need Google Search Console for a technical SEO audit?
No. A crawl-first audit can find access, indexability, canonical, redirect, and internal-link issues without Search Console. Search Console adds useful coverage and impression data, but it should not be the only evidence source.
What should a technical SEO audit deliver?
A prioritized list of fixes grouped by URL pattern, each with observed evidence, the affected URL count, a severity, and a suggested action. A raw crawl export is not an audit.