SEO and AI search
Web
AI
Resources
WorkAboutStart a project

Audit method

How to conduct a technical SEO site audit

An audit is a repeatable method for turning raw crawl data into a short, ranked list of fixes. The method below is the part that most checklists leave out.

In short

To conduct a technical SEO audit, define the scope, export data from Search Console, crawl the whole site, compare the lists, review a sample of each page template, score every finding by reach and effort, and deliver a ranked report with a ticket-ready fix for each item. The skill is in the scoring and write-up.

Step 1 to 3: scope, data and crawl

  1. Fix the scope in writingName the domain, subdomains, languages and page types. State what is out of scope, such as the checkout or a separate blog platform. Agree who owns each part, because findings need an owner.
  2. Collect first-party dataExport the Pages report, the Sitemaps report, the Core Web Vitals report and the Crawl stats from Search Console. Pull the last 90 days of organic landing pages from your analytics tool. If server logs are available, request 30 days.
  3. Crawl the siteRun a crawler with JavaScript rendering on for at least a sample, set the user agent to Googlebot smartphone, and respect the real robots.txt. Save the crawl so you can compare it with a later one.

Do the crawl twice for sites that depend on scripts: once with rendering off, once on. The difference between the two crawls is your rendering risk.

Step 4: compare the lists

Most findings come from disagreements between data sources. Build one sheet with a row for every URL and a column for each source.

Source disagreementWhat it usually means
In sitemap, not found by the crawlerOrphan page with no internal links
Found by the crawler, not in sitemapFilters, tags or pages the sitemap generator skips
In sitemap, not indexedQuality, canonical, noindex or crawl problem. Open the reason in the Pages report
Indexed, not in sitemapOld URLs, parameters or staging leftovers still stored
Requested by Googlebot in logs, not in the crawlHidden URL patterns, old redirects or wasted crawl
Receives organic visits, returns an error to the crawlerA page that works for some users but fails for bots

Step 5: review a sample of every template

A site of 5,000 URLs usually has fewer than 15 templates. Open one or two examples of each in a browser, in view-source, and in URL Inspection live test. A defect in a template appears on every page that uses it, so each template review covers hundreds of URLs.

  • Home, category, product or service, article, tag or archive, search results, pagination, contact, 404.
  • For each, record the status code, canonical, robots meta, title and heading patterns, structured data type, and whether main content appears without scripts.
  • Check the mobile version. Google indexes the mobile rendering first, so content hidden on mobile is easy to lose.

Step 6: score findings so the list is useful

An audit with 140 findings and no order gets filed away. Give each finding three numbers and sort by the result.

  • Reach: share of important URLs affected, scored 1 to 5.
  • Severity: how directly it blocks crawling, indexing or understanding, scored 1 to 5.
  • Effort: developer time, scored 1 (a setting) to 5 (a rebuild).

Priority score = (reach x severity) / effort. Here is an illustrative result for an invented ecommerce site.

FindingReachSeverityEffortScore
Canonical on product pages points to the category55125.0
Redirect chains on 300 old product URLs3324.5
Images lack width and height, causing layout shift4224.0
Duplicate titles on paginated archives2214.0
Hreflang return tags missing on three language folders3434.0

The canonical error scores 25 and goes first even though it is a one-line change. Sorting by score exposes cheap, high-impact fixes that a flat list buries.

Step 7: write the report

A report should be usable by a developer who has never met you. For each finding include the issue in one sentence, three example URLs, why it matters, the exact fix, how to test it and who owns it. Put the ten highest-scoring findings on page one.

  • Executive summary: five lines, in plain language.
  • Top ten fixes, with owners and effort.
  • Full findings table, sorted by score.
  • Appendix: crawl settings, date, tools and data sources, so the audit can be repeated.

Pitfalls in audits

  • Auditing only what the crawler finds. Compare with Search Console and logs or you miss orphan and hidden URLs.
  • Reporting tool warnings as findings. A crawler flags every missing meta description, which rarely matters as much as one noindex tag.
  • No before and after. Save the crawl and the Search Console export so you can prove what changed.
  • Skipping the fix test. Mark a finding done only after a recrawl confirms it.

You can use our SEO audit checklist as the sample-review sheet, or see how an SEO audit service is run with a client.

Updated 30 October 2026

Questions, answered

How long does a technical SEO audit take?
A site under 500 URLs usually takes a few days to audit properly. A site with tens of thousands of URLs and rendering issues can take two to three weeks, mostly spent on log analysis and template review.
What tools do I need for an audit?
Search Console is essential. Add a desktop crawler, a speed tool such as PageSpeed Insights, and a spreadsheet. Server logs are optional but valuable for large sites.
Should I audit the whole site or a sample?
Crawl the whole site, then review a sample of each template by hand. The crawl finds scale, and the template review finds causes.
How often should I repeat an audit?
Run a full audit once or twice a year, and a lighter check after each major release or migration. Watching Search Console monthly catches drift between audits.
Can I do my own audit, or do I need an agency?
You can do a solid first audit yourself with the method above. An outside review helps when the site is large, when you cannot find the cause of a traffic drop, or when you need a developer-ready write-up.

Prefer a ranked fix list?

We work from your own Search Console data. After a short call you get a fixed quote, and you can [ask for a proposal](/contact/).