A Technical SEO Audit You Can Do in an Afternoon

By Faaiz Mahmood · Updated 11 September 2026 · 11 min read

The short version

  • Work in order. Access problems make everything below them meaningless.
  • Free tools are enough: Search Console, a browser, curl, and a crawler on its free tier.
  • Most sites have two or three real problems, not forty.
  • Write findings down as you go. Fix afterwards, worst first.

A technical audit is not a 200-point checklist. It is a sequence of questions asked in the right order, because the answers depend on each other. There is no point investigating why a page ranks poorly if a robots.txt rule means Google has never read it.

This is the order that works, on one site, in an afternoon. Open a document and note what you find rather than fixing as you go; fixing mid-audit is how people lose their place and stop halfway.

Step 1: Can crawlers get in at all?

Everything else is downstream of this. Four checks.

Read your robots.txt. Open yourdomain.com/robots.txt in a private window. Look for a bare Disallow: /, which blocks the entire site and is the single most expensive line on the web. It usually arrives when a staging configuration goes live. On WordPress, check Settings, Reading for the "Discourage search engines" box, which produces the same result.

Check nothing important is blocked. Assets in particular. If /wp-content/ or your CSS and JS directories are disallowed, Google renders your site unstyled and judges it accordingly.

Check for stray noindex tags. View source on your home page and a few key pages, search for name="robots". A noindex left over from a rebuild is common and invisible from the front end.

Confirm the site resolves on one hostname. Try all four combinations and watch what happens:

curl -sIL http://example.com | grep -i "^HTTP\|^location"
curl -sIL http://www.example.com | grep -i "^HTTP\|^location"
curl -sIL https://www.example.com | grep -i "^HTTP\|^location"

Each should reach your canonical version in one hop. Two hops means a chain worth flattening, covered in redirects.

Step 2: What does Google actually have?

Open Search Console. If it is not set up, stop and do that first, because the rest of this is guesswork without it. Setting it up takes ten minutes.

Go to the Pages report. Compare the indexed count against how many pages you believe you have. A rough match is healthy. Far fewer means pages are being excluded. Far more means something is generating URLs you do not know about, usually parameters or pagination.

Then read the not-indexed reasons in order of volume. Crawled - currently not indexed in quantity is a content verdict rather than a technical fault. Duplicate reasons point at canonical tags. Indexed, though blocked by robots.txt points at the mix-up in noindex vs disallow.

Also run site:yourdomain.com in Google. It is imprecise, but it surfaces things you forgot existed: staging subdomains, old language folders, test pages.

Step 3: Is the sitemap honest?

Open your sitemap in a browser. Confirm it loads, is valid XML, and lists roughly the URLs you expect.

Then spot-check five URLs from it at random. Each should return 200, carry a self-referencing canonical, and have no noindex. Any that redirect, 404, or point elsewhere via canonical should not be in the file. Check the Sitemaps report in Search Console for the discovered count and any parse errors. Details in the sitemap guide.

Step 4: Crawl the site

Run a crawler over the site. Screaming Frog is free up to 500 URLs, which covers most small sites completely. You are looking for five things:

Sort by status code first. That column finds the real problems fastest.

Step 5: Status codes and error volume

In Search Console, Settings, then Crawl stats. Look at the breakdown by response code. Mostly 200 with some 301 and 304 is healthy. Meaningful shares of 404, 403 or 5xx mean crawl effort spent on nothing.

Watch two specifically. Any 5xx is urgent, because sustained server errors make Google reduce crawling across the whole site. And soft 404s, missing or empty pages returning 200, keep getting crawled forever because nothing tells the crawler to stop. Both are covered in HTTP status codes.

Check your 404 page returns an actual 404, not a 200:

curl -I https://example.com/this-page-does-not-exist

Step 6: Rendering

Take your most important page and run URL Inspection, Test live URL in Search Console. Look at the rendered HTML and the screenshot.

The question is simple: does Google see the same page a visitor sees? If the screenshot is unstyled, you have blocked an asset directory. If the main content is missing, it is arriving via JavaScript in a way Google is not picking up. If a security plugin is interfering, you will see that here too, and nowhere else.

This one check catches a category of problem that is completely invisible in a normal browser.

Step 7: Mobile and speed

Google indexes the mobile version of your site, so test on mobile first. Open key pages on a phone, or use your browser's device mode. Look for text too small to read, buttons too close together, and anything that scrolls sideways.

Then run PageSpeed Insights on your home page and one inner page. Read the field data at the top if it is available, because that is real visitors rather than a lab simulation. Largest Contentful Paint is the metric with the most headroom on most sites, and the usual causes are an oversized hero image, render-blocking scripts, or a slow server.

Do not chase a perfect score. Moving LCP from four seconds to two is worth real money; moving 92 to 97 is not.

Step 8: Titles, descriptions and headings

Back to the crawl export. For your twenty most important pages, check each has a unique title that describes the page and reads like something a person would click. Check the meta description is present and not truncated boilerplate. Check there is exactly one H1 and it matches what the page is about.

Then cross-reference with the Performance report. Pages with high impressions and low click-through are telling you the title and description are underselling a ranking you already have. That is the cheapest win available in the whole audit.

Step 9: HTTPS and mixed content

Confirm the certificate is valid and not near expiry. Confirm http redirects to https in one hop. Then open a few pages with the browser console open and look for mixed-content warnings, which are https pages loading an image or script over http. They usually appear after a migration where hardcoded URLs were missed in old content.

Step 10: Write the list

You should now have a page of findings. Sort them into three groups and work top down:

  1. Blocking. Anything stopping crawling or indexing. A stray disallow, a leftover noindex, 5xx errors. Fix today.
  2. Leaking. Redirect chains, broken internal links, duplicate canonicals, soft 404s. Fix this month.
  3. Polishing. Titles, descriptions, speed improvements, heading structure. Ongoing.

Most sites turn out to have two or three items in the first group and a long tail in the third. Resist the urge to start with the long tail because it is easier.

A note on what an audit cannot do

Technical SEO removes obstacles. It does not create demand. If everything above is clean and traffic is still flat, the site is working correctly and the limitation is the content, or the fact that nobody is searching for what you publish. That is a harder problem and no crawler will find it for you.

Working through robots.txt as part of this? The robots.txt generator builds a correctly formatted file in your browser, and nothing you type is sent anywhere.

Who writes this

Faaiz Mahmood is a software engineer with a bachelor's degree in computer science. He works on full-stack projects and as an AWS cloud engineer, and builds and maintains everything on crawlkit.online.

That is the relevant qualification here rather than an SEO one. The rules these tools apply are written down in public specifications: RFC 9309 for robots.txt, the sitemaps protocol, Google's own published documentation. Plenty of free tools built on them implement the details incorrectly. These are written against the specification, and each page sets out the rules it follows so you can check the reasoning instead of trusting the output.

Found something wrong? Tell me and I will fix it.