SCRAWL
technical seoFysal Amin

Technical SEO audit checklist

Most technical audits start in the wrong place. Someone opens a crawler, exports 4,000 "issues," and the first ticket is a missing meta description on a tag page nobody visits.

Five-layer diagram of a technical SEO audit, from crawl access at the top through indexation, architecture, Core Web Vitals, and structured data.
Technical SEO audit checklist — crawl, index, architecture, speed, schema

Most technical audits start in the wrong place. Someone opens a crawler, exports 4,000 "issues," and the first ticket is a missing meta description on a tag page nobody visits.

That's a report. It is not an audit.

A technical SEO audit answers one question, in order: can a crawler find the URL, fetch it, render it, keep it, and can a person use the page once it ranks. You work that stack top to bottom because the later layers are wasted motion if the earlier ones are broken. There is no point polishing LCP on a URL that returns noindex.

This is the checklist we run. Search Console first, then the specific checks. You do not need a paid spider to get through it. You do need honesty about what a browser tool cannot see.

If you are mid-replatform, stop and use the site migration SEO checklist instead. That is a different job.

What you are not doing

You are not scoring the brand voice. You are not building a keyword map. You are not rewriting product copy.

You are looking for things that stop Google from using the pages you already have: blocked resources, leftover staging rules, canonicals that point at a 301, sitemaps full of junk, templates that fail Core Web Vitals, schema that describes a product the HTML does not show.

If a finding does not change crawl, index, or the rendered page, it goes to the bottom of the list or off it.

Start in Search Console, not in a crawler

Open the property you actually care about. Then look, before you generate a single CSV:

  • Pages. How many are indexed. Why the rest are not. "Crawled — currently not indexed," "Excluded by noindex," "Blocked by robots.txt," "Alternate page with proper canonical" — those rows tell you the shape of the problem before any third-party tool does.
  • Sitemaps. Submitted vs indexed. A wide gap is the most useful number in the whole audit. It usually means the sitemap is lying, or the site is.
  • Core Web Vitals. Field data, by template if you can see it. Lab scores can wait.
  • Experience / HTTPS. Mixed content, usability. Don't live here, just don't skip it.

Write down the money templates: homepage, category, product, article, whatever pays the bills. The rest of this checklist is those templates first, then a sample of the long tail. Auditing every faceted URL on an ecommerce site is how you spend a week describing a problem you already understood on Tuesday.

A first-pass score on a single money URL — indexability, on-page tags, schema, headers — is what the SEO Readiness Score Checker is for. Use it to see if the patient has a pulse. Then do the work below.

1. Can it be crawled

Read robots.txt like a person. A 404 on that file is fine. A 500 is not — Googlebot can get cautious about the whole host until the file comes back. Disallow: / left over from staging is still the classic "we launched and vanished" bug.

Check that CSS, JS, and images Google needs to render the page are not blocked. Then test the rules you think you have against the URLs you care about in the Robots.txt Tester.

XML sitemap next. It should contain canonical, indexable, 200-status URLs. Nothing else. No thank-you pages, no 301s, no search-result URLs, no staging leftovers. Run it through the XML Sitemap Validator for syntax, then the Sitemap Auditor for the URLs inside. If the file is valid XML and still full of redirects, the plugin that wrote it is the ticket, not "SEO."

Pull a list of important URLs — sitemap plus Search Console plus the nav — and hit them with the Bulk URL Checker. You want 200s on the live ones and a clean story for everything else. 1,000 URLs per run. Money pages first.

2. Can it be indexed

Crawl access is not indexation. Plenty of sites are fully crawlable and still keep their best pages out.

For the money URL list:

  • No accidental noindex. Check the meta tag and X-Robots-Tag. The header is the one View Source will not show you. The Bulk Meta Robots Checker reads both.
  • Canonicals point where you mean. Self-referencing on unique pages. Never at a redirect, a 404, a noindex, or a parameter variant you do not want indexed. Canonical Checker on a sample of each template. Canonicals are a hint. Google ignores the dumb ones and picks its own, which is why Search Console's "Google chose different canonical" row exists.
  • One host, one protocol. http, https, www, non-www: three of the four should 301 to the one you declared. Request each variant and read the status. Don't assume the CDN is doing what the ticket said.
  • Then ask the only question clients actually care about: is this URL in Google or not, and if not, is it because of something we did. That is the Google Index Checker, plus URL Inspection on the same pages. They disagree sometimes. The disagreement is useful.

If the Pages report is a wall of "Crawled — currently not indexed," do not start rewriting titles. Look at quality, duplication, and whether you are asking Google to keep 40,000 near-identical filtered URLs. That is an architecture problem, which is the next section, not a meta-tag problem.

3. Can a person — and a bot — reach it from the homepage

Crawl depth is a proxy for "did anyone bother to link this." Pages buried five clicks down in a tag soup will get crawled last and forgotten first. The Crawl Depth Checker is the fast read. Important templates should be close to the homepage. If a category used to sit in the main nav and now lives in a footer accordion, that is the finding.

Orphans are the other half. In the sitemap, not in the internal graph. A desktop crawler is better at a full orphan pass. For a working audit you can still spot-check: if Search Console shows impressions on a URL that nothing in the nav or HTML links to, you found one.

Broken internal links waste crawl and trust. Run a money template through the 404 Checker. For a WordPress site, the WordPress Broken Link Checker will walk posts and pages through the REST API without installing a plugin you will forget to turn off.

Redirect chains belong here, not in a "nice to have" appendix. Extra hops are slow and sloppy. Redirect Chain Checker on the old campaign URLs, the www/apex pair, and anything marketing still pastes into ads. Googlebot will follow up to 10 hops. Do not use that as a budget.

Hreflang, if you have more than one locale: every URL in the cluster should point at the others, including itself, and none of those targets should 404 or redirect. The Hreflang Checker is the pass/fail. One stale locale keeps the old host alive after a move. We wrote about that in the migration checklist because it keeps happening.

4. Is the page the page you think it is

Duplicates. Same title and description on 80 products because the theme reprints the category name. Parameter URLs that render the same product. HTTP and HTTPS both 200.

The Duplicate Title & Meta Finder is the blunt instrument. Then look at a pair of URLs yourself. If the H1, the body, and the intent are the same, pick a canonical and make the other one leave. If they are different products with a lazy template, that is a title problem, not a duplicate-content sermon.

Pagination: rel=next/prev is no longer how Google does this, but the paginated URLs still need to be crawlable, not noindex plus a canonical back to page 1 if you actually want page 7 in the index. Most ecommerce sites should not want page 7 in the index. Decide, then check. Pagination Checker.

Titles and descriptions are technical only when they are missing, duplicated, or so truncated they stop working as a SERP. Don't turn this section into a copy workshop. Title Tag Checker and Meta Description Checker on the money templates, then stop.

5. Core Web Vitals, by template

Google's current Core Web Vitals — measured at the 75th percentile, mobile and desktop separately — are:

  • LCP within 2.5 seconds
  • INP at 200 milliseconds or under
  • CLS at 0.1 or under

That is from web.dev and Google Search Central. Field data in Search Console is the score that matters. A Lighthouse run on your office wifi is a debug tool.

Check the templates that fail in the field, not a random blog post that happens to be green. The Core Web Vitals Checker and PageSpeed Checker both sit on PageSpeed Insights, so the numbers match what Google already showed you.

Fix in this order, because it is usually the order of impact: the LCP image (size, compression, preload, not sitting behind a carousel script), then layout shift (set width and height, stop injecting banners above the title), then INP (third-party tags, main-thread work). Images: Image Size Checker, Image Alt Checker, Lazy Load Checker. Alt text is accessibility and image search. It will not save a 6-second LCP.

If a template is red in the field and green in the lab, believe the field. Different devices, different networks, real users clicking things Lighthouse never clicks.

6. Structured data that matches the visible page

Schema is not a ranking lever you sprinkle on. It is a claim. If the HTML does not support the claim, you get ignored or you get a rich-result warning.

Check the types you actually use — Article, Product, FAQ, Organization, BreadcrumbList — on a live URL with the Schema Checker. Then, if you have more than a handful of templates, the Bulk Schema Checker. Look for missing required fields, leftover types from a plugin you disabled, and Product markup on a page that is not a product.

Validate against what you can see. A rating star in JSON-LD and no rating on the page is how reviews get dropped.

7. HTTPS and the boring headers

SSL expiry, the right hostname on the cert, TLS that is not a museum piece: SSL Certificate Checker. Then Security Headers Checker and HTTP Header Checker for HSTS, X-Robots-Tag surprises, cache headers that are serving a stale noindex to Googlebot, and mixed-content leftovers after an HTTPS move.

This section is short because it should be. If the cert is dying on Thursday, that is the whole finding.

8. AI crawlers, after the foundation

Do this last on purpose. A pretty llms.txt will not help a site that is noindex.

Decide, as a person, whether you want GPTBot, ClaudeBot, PerplexityBot, and Google-Extended on the site. Then check that robots.txt matches the decision. The AI Crawler Accessibility Checker is the URL-level pass. If you have logs, the AI Bot Log Analyzer shows who actually showed up and who got a 403.

llms.txt is optional documentation for machines. It is not a ranking switch. The GEO Score Checker is a readiness score for being cited in answer engines — useful as a punch list, not as a vanity number to put in a slide.

If you sell the story that "we are ready for AI search" while money pages are blocked, you will deserve the follow-up email.

How to turn this into tickets

An audit nobody ships is a PDF.

Split what you found:

  • P0 — cannot be indexed or crawled as intended. Disallow on a live section. noindex on money pages. Canonicals to a 404. Homepage 302. Fix this week.
  • P1 — the template is in the index and still losing. Failed LCP on product. Redirect chains on the old blog. Sitemap full of 301s. This sprint or next.
  • P2 — hygiene. Missing alts on the about page. One extra hop on a campaign URL from 2019. A header you should add. Backlog.

One ticket, one URL pattern, one expected response. "Improve SEO" is not a ticket. "noindex on /products/* coming from the X-Robots-Tag on the CDN, remove it, confirm with a header check" is a ticket.

Re-check the same URLs after deploy. Audits that do not re-hit the live page are how the same noindex survives three sprints.

What this checklist does not replace

A browser toolkit will not render every JavaScript route on a 400k-URL catalog, and it will not replay a quarter of Googlebot hits from disk. For that you still want a desktop crawler and log sampling.

Search Console remains the source of truth for what Google did. These checks are how you find out why, without waiting for a crawl to finish or paying for a seat.

Run the full pass when the site changes shape — redesign, CMS move, new template, new locale. In between, look at the Pages report and CWV once a month. If a "not indexed" reason grows, or a template flips from Good to Needs improvement, that is the next audit. You already know which section to open.

Tools used in this workflow

technical SEO audit checklistindexabilityCore Web Vitals

Related Articles

Frequently Asked Questions

How often should I run a technical SEO audit?

After any launch that touches templates, redirects, or robots. Otherwise a real pass quarterly is plenty for most sites. Weekly is for watching CWV and the Pages report, not for re-crawling the universe.

Do I need Screaming Frog?

Not for this checklist. You need it when you want the full internal graph, JS-rendered discovery at scale, or a crawl-to-crawl diff. We have a comparison if you are deciding.

What's the first thing to fix?

Whatever stops money pages being crawled or indexed. Everything else is optional until that is done.

Is Core Web Vitals a ranking factor?

Google says page experience is part of what the core systems reward, and Core Web Vitals are how they measure a chunk of that. They are not a substitute for a page that should not exist. Fix indexation first.

Where do titles and content fit?

After the URL can be fetched and kept. A brilliant title on a `noindex` URL is a draft.