Skip to content
SEOWofSEOWof
Browse the standard
Technical SEO13 min read

The technical SEO checklist that decides pass or fail

Most technical SEO checklists are inventories. This one is a diagnostic sequence — ordered so that each check is only worth running if the previous one passed.

Published Updated

Most technical SEO checklists are inventories: every conceivable thing you could check, in no particular order, with no indication of which ones matter. They are exhaustive and useless in roughly equal measure.

This one is ordered as a diagnostic sequence. Each check is only worth running if the previous one passed, because a failure at any level makes everything below it irrelevant. That ordering is the entire value — it is why a mechanic checks whether the engine turns over before investigating the fuel mixture.

Level 1 — Can a crawler reach the site at all?

If any of these fail, nothing else on this page matters.

1.1 robots.txt does not block indexable paths

Test: Fetch /robots.txt. Test every important URL against the applicable Disallow rules using longest-match precedence.

Pass: No URL returning 200 with an indexable directive matches a Disallow rule.

The classic failure is a staging robots.txt deployed to production. It contains Disallow: /, it is four characters, and it will remove an entire site from search. Put the file in version control and add a build test that fails if Disallow: / appears in a production artefact.

1.2 Host and protocol variants converge

Test: Request http://, https://, www. and apex versions of the homepage and three deep URLs.

Pass: All variants 301 to one canonical host in a single hop, with a valid certificate covering all served hostnames.

Four addressable variants is four competing copies of your site splitting inbound link equity between them. Watch specifically for two-hop chains — http→https then www→apex as separate rules is extremely common and entirely avoidable with one edge rule.

1.3 The server does not fail under crawl load

Test: Crawl at increasing concurrency. Record status codes and time-to-first-byte distribution.

Pass: 5xx rate below 0.5%, p95 TTFB under 800 ms, no degradation correlated with concurrency.

Intermittent 5xx responses are invisible in normal browsing and rarely reproduce on demand, so they persist for months while search engines quietly throttle your crawl rate. Recovery of crawl budget takes far longer than the outage that caused it.

Level 2 — Can the content be indexed?

The site is reachable. Now: is anything actually eligible to appear?

2.1 No accidental noindex

Test: Read the meta robots tag from the rendered DOM and the X-Robots-Tag response header on every URL. Reconcile them — the most restrictive wins.

Pass: No sitemap-listed, navigation-linked or impression-earning URL carries noindex from any source.

Check the header specifically. A noindex set at the CDN does not appear in your application source, survives a source-code review, and is the single most common fault that passes two audits before anyone finds it.

2.2 Canonicals are self-referencing and terminal

Test: Extract the canonical from every rendered head. Resolve the graph.

Pass: Every indexable URL declares exactly one absolute self-referencing canonical. No chains, no loops, no canonicals to 3xx, 4xx or noindex targets.

The catastrophic version is a site-wide canonical pointing at the homepage — a genuine template error that instructs the search engine to drop every other page. It happens when a developer hardcodes the canonical in a shared layout.

2.3 Rendering parity between raw HTML and DOM

Test: Fetch the raw HTML without executing JavaScript. Diff main content, headings, internal links and structured data against the fully rendered DOM.

Pass: Over 90% of main content, plus all navigation links and structured data, present in the raw HTML.

Googlebot renders JavaScript on a deferred queue. Most answer-engine retrieval crawlers do not render at all. Content that only exists after hydration is invisible to a growing share of the systems that decide whether to cite you.

# Quick check: what does a non-rendering crawler actually see?
curl -s https://example.com/product/thing | \
  sed -e 's/<script[^>]*>.*<\/script>//g' -e 's/<[^>]*>/ /g' | \
  tr -s ' \n' ' \n' | head -50

If your product name, description and specifications are not in that output, they do not exist for a non-rendering crawler.

2.4 Navigation uses real anchors

Test: Compare navigation markup in the initial HTML against the rendered DOM.

Pass: All navigation links are <a> elements with resolvable href attributes present in the server response.

A <div> with a click handler is not a link, regardless of how it behaves for a mouse user. It is also unreachable by keyboard, which makes this simultaneously an accessibility failure. Keep client-side routing by intercepting the anchor click, not by removing the anchor.

Level 3 — Is the crawl being spent well?

Content is indexable. Now: is crawl allocation going to the right places?

3.1 Sitemap contains only canonical indexable 200s

Pass: Valid XML, under 50,000 URLs per file, referenced from robots.txt, and every listed URL is a self-canonical indexable 200.

A sitemap listing redirects and dead URLs contradicts your other signals and loses credibility as a discovery source. Generate it from the same source of truth that determines canonical status so the two cannot diverge.

3.2 Combinatorial URLs are not discoverable

Pass: Under 15% of the crawlable surface is parameter or facet variants, and those are excluded from discovery.

Faceted navigation generates millions of permutations from a few hundred products. If those are linkable, the crawler enumerates filter combinations instead of finding your new content. The symptom is deceptive: new pages take weeks to index while crawl stats show high activity.

3.3 No redirect chains or soft-404 redirects

Pass: All redirects resolve in one hop to a relevant 200. No internal link points at a 3xx.

Redirecting a removed product to the homepage tells the search engine the homepage answers that query. It does not, so the redirect is treated as a 404 anyway and the equity is discarded. Redirect to the genuine equivalent or return 410 Gone.

3.4 No orphaned pages

Pass: Zero indexable URLs unreachable from the homepage via crawlable links.

Orphans accumulate silently through migrations and redesigns. Cross-reference the orphan list against impression data — you will frequently find pages the business believes are performing that receive no internal links at all.

Level 4 — Are the signals correct?

Structural fitness is established. Now the layer most checklists start with.

  • One <h1> per page, no skipped levels, headings chosen for structure rather than font size
  • Unique titles under about 60 characters, leading with the distinguishing term rather than brand boilerplate
  • Structured data valid, with every marked-up value present in the visible content — markup describing content that is not on the page is a spam policy violation
  • Mobile and desktop render equivalent content, including internal links and structured data
  • Core Web Vitals assessed on field data at the 75th percentile, not on a lab score
  • hreflang reciprocates, if you serve multiple locales — one-way annotations are not a weak signal, they are no signal

The honest summary

There are roughly a dozen technical faults that can genuinely stop a site competing. Everything else is optimisation — worth doing, occasionally worth quite a lot, but not the difference between eligible and ineligible.

A useful technical SEO practice spends most of its attention on levels 1 and 2, monitors them continuously because deployments break them, and treats level 4 as ongoing hygiene rather than as the main event.

Every check in this sequence is published in full in the SEOWof standard, with its exact pass criterion, weight, severity and remedy steps. The free inspection runs all of the pass-blocking ones.