Technical SEO Audit: What to Check, in What Order
Indexation, canonicals, hreflang, redirects, URL structure, JavaScript rendering. An audit order that surfaces expensive problems before cosmetic ones.
Half the "technical audits" that land on our desk for a second opinion are 400-row crawler exports where a missing alt attribute sits next to the fact that an entire catalogue is blocked from indexing. The document is formally correct and practically useless, because it never says what to fix first. What follows is the order we run on client projects: everything that removes pages from search first, and the things worth a couple of percent last.
80%
of the value sits in level one — indexation
3–5
days to audit a site under 10,000 URLs
10k
URLs — where crawl budget starts to matter
0
value from edits to a page outside the index
The order that saves weeks
Technical problems form a hierarchy, and a fault at the top invalidates every fix below it. Rewriting title tags is pointless if the page returns a 404 to the crawler, and shaving tenths of a second off LCP is pointless if half the catalogue is canonicalised into the homepage.
- 1
Level 1 — can the crawler see the site at all
robots.txt, the robots meta tag, the X-Robots-Tag header, response codes, availability from different IP ranges. One stray directive here costs more than every other finding combined.
- 2
Level 2 — has the site multiplied itself
Canonicals, filter parameters, www variants, trailing slashes, pagination, language versions. Duplicates do not "lower rankings" — they force Google to choose for you, and it picks the wrong page.
- 3
Level 3 — does the structure lead anywhere
Redirect chains, broken internal links, orphan pages, click depth, and the sitemap measured against the site as it actually exists.
- 4
Level 4 — rendering and speed
JavaScript rendering, lazily injected content, Core Web Vitals, the mobile experience. It matters, but fixing it before levels 1–3 is money on the wrong problem.
Indexation: where sites disappear most quietly
The standard disaster runs like this. Developers stand up staging with indexing disabled, then ship that config to production. The site works, customers browse, forms submit — and for two months nobody notices organic traffic decaying. That is why every audit starts here.
First pass on indexation
/robots.txtresolves, returns 200, and has noDisallow: /underUser-agent: *- No production page carries
<meta name="robots" content="noindex"> - No
X-Robots-Tagheader arrives from the server or CDN — invisible in view-source, visible only in the HTTP response - The Page Indexing report in Search Console shows no spike in "Discovered — currently not indexed"
- The sitemap contains only canonical URLs returning 200, and is referenced from robots.txt
- The server does not return 5xx under crawler load — verified in logs, not in a browser
# Common mistake: trying to "hide" pages from the index via robots.txt
User-agent: *
Disallow: /catalog/
# This only blocks crawling. Pages that are linked from anywhere will stay
# in the index with no description — and Google never sees your noindex,
# because it is not allowed to fetch the page.
# Correct: allow crawling and set noindex in the meta tag
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xmlThat distinction deserves its own paragraph, because experienced teams still trip over it. Disallow controls crawling. noindex controls the index. Blocking a page that is already indexed is the fastest way to leave it in there permanently as an empty snippet.
Duplicates, canonicals and language versions
Duplication is rarely deliberate. It emerges from filters, sort orders, tracking parameters, print views and translated copies. The symptom is always the same: search shows a different page from the one you have been building links to.
| Symptom | Likely cause | Fix |
|---|---|---|
A ?sort=price URL appears in results | Parameters crawlable with no canonical | Canonical to the clean URL, filter links via rel="nofollow" or POST |
| Both www and non-www versions live | No 301 to a canonical host | One server-level 301, then update sitemap and Search Console |
| Category dropped, pagination remains | Canonical pointing from page 1 onto all others | Self-referencing canonical on every paginated page |
| Wrong language served to visitors | Missing hreflang, or one-directional tags | Reciprocal hreflang across all versions plus x-default |
| Fifty pages share one title | Template without unique variable substitution | Title formula using product, category and location |
- A canonical is a hint, not an instruction. If the pages differ meaningfully, Google ignores it and indexes both; if they are genuinely identical, it is honoured.
- Hreflang must be reciprocal: if page A points to B, B is obliged to point back. One-directional tags are discarded entirely — the most common fault on multilingual sites.
- Canonical and hreflang do not conflict: canonicals work inside one language version, hreflang between versions. A canonical from the German page to the English one breaks both at once.
- Tracking parameters create no duplicates as long as pages carry a self-referencing canonical. Five lines in a template close an entire class of problems.
Redirects and URL structure
Redirect chains accumulate over years: an HTTPS migration, then a catalogue restructure, then someone removes trailing slashes. The result is one external link travelling four hops, with the crawler losing interest around the third.
- 1Find every chain longer than one hop and rewrite the rules so the old URL lands on the final destination directly. One rule instead of three also removes 300–600 ms of time to first byte.
- 2Check that your 301s have not quietly become 302s. A temporary redirect left in place for a year means lost link signals, because equity transfers less reliably through it.
- 3Remove internal links pointing at redirects. Linking to old URLs from inside your own site burns crawl budget daily for no reason.
- 4Settle on one URL form: lowercase, with or without a trailing slash — applied identically everywhere, including sitemap, canonicals and internal links.
JavaScript rendering and speed
Google renders JavaScript, but does it in a second pass with no guaranteed timing. On a client-rendered site the typical gap between crawl and content appearing in the index runs from several days to several weeks. For a news project that is fatal; for a corporate site it is tolerable. How to read the specific indexing statuses and what to do about each is covered in our piece on indexing problems.
- Test with URL Inspection in Search Console, not your browser — it shows the HTML the renderer received. Any difference from your dev tools is the diagnosis.
- Content injected after a click or scroll does not exist for search. A product description behind a tab must still be in the HTML, even if visually collapsed.
- Internal links have to be real
<a href>elements. Navigation built ononClickwith no href is a dead end — the crawler simply stops there. - Server rendering or static generation eliminates this whole category. That is an argument about your stack, not micro-optimisation; the trade-offs are in our piece on website loading speed.
A technical audit is not a hunt for every error. It is a hunt for the three that are stopping everything else from working.
Speed is checked last, not because it is unimportant but because it is the one category where fixes are measurable yet gradual. Thresholds and the order of work are covered in the Core Web Vitals guide; everything that should be closed before launch is in the SEO checklist for 2026.
Frequently asked questions about technical SEO audits
How often does a site need a technical SEO audit?
A full audit makes sense once a year, and is mandatory after a redesign, a CMS change, a domain move or a large release. In between, monthly monitoring of three reports is enough: page indexing, sitemap coverage and server response codes. That takes about an hour and catches most regressions before traffic feels them.
Can I run a technical audit myself?
Level one, yes — anyone attentive can check robots.txt, the robots meta tag, response codes and Search Console reports in a few hours. It gets harder at canonicals, hreflang and rendering, where you need to know how conflicting signals resolve. Clear the obvious yourself and bring in a specialist for whatever remains.
How long after a fix does traffic recover?
If the problem was indexation, pages return within a few days to three weeks depending on crawl frequency. Duplicate and canonical fixes surface more slowly — four to six weeks — because Google has to re-evaluate which page to show. Speed work is slowest and almost never visible in isolation from other changes.
What if the audit surfaces hundreds of issues at once?
Sort them by impact rather than by count. The practical rule: first everything that removes pages from the index, then everything that forces search to choose between duplicates, then structural faults, and cosmetics such as title length last. On most projects the first two groups are five or ten tasks that deliver the bulk of the result.
Does hosting affect technical SEO?
It does, more than people assume. Slow server response is added directly to every speed metric, and intermittent 5xx errors during crawler visits drop pages out of the index temporarily. Before optimising the front end, confirm time to first byte stays within 200–500 ms under real traffic.
In short
- Audit top-down: indexation, duplicates, structure, rendering. Lower-level fixes do nothing while an upper level is broken.
Disallowin robots.txt blocks crawling, not indexing. Removing a page from search requiresnoindexplus permission to crawl it.- Hreflang only works reciprocally. One-directional tags are ignored and language versions end up competing with each other.
- Redirect chains and internal links pointing at old URLs burn crawl budget daily — and both are an hour of work to fix.
- A good audit ends with ten prioritised tasks, not a crawler export.
Related reading
SEO Checklist 2026: 60 Checks a Site Needs Before It Ranks
Not theory — the checklist we run every project through before launch. 60 items across six blocks.
Core Web Vitals Explained: LCP, INP and CLS in Plain English
The three metrics Google uses as a ranking signal. Each one explained, plus what breaks them most often.
Site Migration Without Losing Rankings: The Checklist
The biggest traffic collapses are not caused by Google updates. They are caused by launching a new site.