---
name: claude-seo-technical
description: Technical SEO audit across nine categories, crawlability through Core Web Vitals to JS rendering. Use when the user says "technical SEO", "crawl issues", "robots.txt", "Core Web Vitals", "site speed", or "security headers". Not for schema generation: use claude-seo-schema. Not for sitemap work: use claude-seo-sitemap. Not for intent or SERP fit: use claude-seo-sxo.
license: MIT
metadata:
  author: TechTide AI (Alex Cinovoj)
  provenance: rewritten from patterns in AgriciDaniel/claude-seo (MIT)
  category: SEO & AEO
---

# Technical SEO Audit

Technical SEO is binary at the base: either crawlers can fetch, render, and index the page, or nothing else you do matters. Audit in that order.

## The nine categories

| # | Category | Core checks |
|---|----------|-------------|
| 1 | Crawlability | robots.txt valid, sitemap referenced, accidental noindex, crawl depth <=3 clicks, AI crawler policy |
| 2 | Indexability | canonicals self-referencing, duplicates, thin content, hreflang, index bloat |
| 3 | Security | HTTPS enforced, valid cert, no mixed content, security headers |
| 4 | URL structure | clean descriptive URLs, no redirect chains, consistent trailing slashes |
| 5 | Mobile | viewport tag, 48px touch targets, 16px base font, no horizontal scroll |
| 6 | Core Web Vitals | LCP <2.5s, INP <200ms, CLS <0.1, 75th percentile field data |
| 7 | Structured data | detect and validate, then hand off to claude-seo-schema |
| 8 | JS rendering | critical content in initial HTML, canonical/robots parity between raw and rendered HTML |
| 9 | IndexNow | supported for Bing/Yandex/Naver, recommend for faster non-Google indexing |

Full per-category detail, the AI crawler table, and the JS rendering rules live in references/technical-checks.md. Read it before scoring any category you are not certain about.

## Workflow

1. Fetch the homepage and key templates. Record status codes, redirect hops, and response headers.
2. Fetch `/robots.txt` and the sitemap. Check both exist, parse, and agree with each other.
3. Walk the nine categories in order. For each, record pass/warn/fail plus specific findings with URLs as evidence.
4. Check CWV with field data when available (PageSpeed Insights / CrUX). Lab data is a fallback, label it as such. Use INP, never FID, FID is retired.
5. Score each category 0-100 and produce an overall technical score.
6. Bucket findings: Critical (blocks indexing, fix now), High (fix within a week), Medium (fix within a month), Low (backlog).

## Verification

Run `curl -sI https://<domain>/ | head -20`. Expect a 200 (or a single 301 to the canonical host, then 200), plus `strict-transport-security` present. A redirect chain longer than one hop, a missing HSTS header, or an HTTP 200 on the non-canonical host each go in the findings, not in a footnote.

Then run `curl -s https://<domain>/robots.txt`. Expect a parseable file that does not `Disallow: /` for `User-agent: *` and does reference the sitemap. If robots.txt is missing, flag it and continue the audit, that alone does not block.

## Good vs Bad

**Bad:** "Site speed could be improved. Consider optimizing images." No metric, no threshold, no priority.

**Good:** "LCP is 4.1s on mobile field data (threshold 2.5s): High. Largest element is an unoptimized 1.8MB hero PNG served without width/height. Convert to WebP, add explicit dimensions, preload it. Re-test in field data after 28 days."

## Footguns

- **Auditing raw HTML on a JS-rendered site.** You will report missing content that renders fine, or miss canonical conflicts between raw and rendered HTML. Fix: compare initial HTML against rendered output for canonical, robots meta, and structured data. Google may honor either version when they conflict.
- **Citing FID.** It is removed from every Chrome tool. Fix: INP only.
- **Treating a blocked AI crawler as a search problem.** Blocking Google-Extended does not affect Google Search or AI Overviews, those use Googlebot. Fix: use the crawler table in references/technical-checks.md before advising blocks.
- **Trusting lab CWV as truth.** Lab and field data diverge. Fix: prefer field data, and say which one you used.
- **Flagging error-page meta tags injected by JS.** Google does not render JS on non-200 pages, so those tags are invisible anyway. Fix: check the HTTP status first.

## Completion checklist

- [ ] All nine categories scored with evidence URLs
- [ ] curl checks run, results in findings
- [ ] CWV uses INP, data source labeled field or lab
- [ ] Findings bucketed Critical/High/Medium/Low
- [ ] Schema findings handed to claude-seo-schema, not duplicated

Any box unchecked: not done. Fix or say so.
