SEO Technical Auditor
Find and prioritize technical issues that block ranking. Evidence first, checklist second. Operate like a senior technical SEO: grounded fetches, impact × effort triage, no invented CWV scores.
When to use
- Full site technical audit before relaunch or after traffic drops
- Indexation / crawlability suspicion
- Pre-migration checklist
When not to use
- Pure content strategy with no URL (use
keyword-research / seo-content-writer)
- Paid ranking reports without API access (use MCP
search-console if connected, else seo-data-provider or ask for GSC/PSI exports)
Audit checklist
| Area |
What to check |
How |
| Indexation |
noindex, canonical conflicts, site: coverage |
fetch pages + web_search site:domain |
| robots.txt |
blocked paths, sitemap line, crawl-delay |
web_fetch https://domain/robots.txt |
| Sitemap |
valid XML, fresh URLs, sample 404s |
fetch /sitemap.xml (+ index children) |
| Redirects |
chains, http→https, www, trailing slash |
fetch variants; note status chain |
| Meta / head |
title, description, robots, canonical, hreflang |
sample 5-15 money pages |
| Structured data |
JSON-LD presence/type |
parse <script type="application/ld+json"> |
| Internal links |
orphans, deep money pages |
sample nav + footer + in-content |
| Performance |
LCP/CLS/INP hints only |
ask for PSI/CrUX URL or note "requires PSI" |
| HTTPS |
mixed content signals |
fetch http upgrade + page assets notes |
| Hreflang |
reciprocal FR/EN/AR |
head tags on language variants |
Workflow
- Run
seo action pipeline first for a full audit, or compose crawl, audit, schema, psi, crux, score, and report.
- Treat engine findings and their evidence objects as the source of truth.
- Use
serp_snapshot only with DataForSEO or Semrush credentials and retain source/confidence.
- Preserve every
data_gap; do not replace missing PSI, CrUX, ranking, position, or volume data with estimates.
- Add expert interpretation and prioritize findings as Critical / Important / Nice-to-have.
- The canonical health score comes from
seo action score. For legacy imported findings only, the helper remains available:
python navin/skills/seo-technical-auditor/scripts/audit_score.py findings.json
Or from workspace: python <skill_dir>/scripts/audit_score.py seo/audit-findings.json
- Save report under
seo/technical-audit-<domain>-<date>.md and feed seo-report-*.html.
Finding severity
| Severity |
Meaning |
Examples |
| Critical |
Blocks crawl/index or money page |
sitewide noindex, sitemap 404, https broken |
| Important |
Material ranking/UX drag |
canonical loops, missing titles, thin money pages |
| Nice to have |
Polish |
missing FAQ schema, minor meta length |
Report format
## Technical SEO Audit - <domain>
Date / scope / pages sampled
### Critical (blocks ranking)
1. issue - URL - evidence - fix - effort (S/M/L)
### Important
...
### Nice to have
...
### Quick wins (this week)
- ...
### Data gaps
- Core Web Vitals: requires PageSpeed Insights / CrUX
- Index coverage: prefer MCP `search-console` when connected; else GSC export if site: is inconclusive
Rules
- Prefer live GSC via MCP
search-console (Settings → MCP) for index coverage, queries, and page performance when available; otherwise ask for a CSV export or mark the gap.
- Every finding needs a URL + observed evidence (status, snippet, header).
- Never invent Lighthouse, CrUX, volume, or position data; use the engine's explicit
data_gap.
- Prioritize by impact × effort; do not dump 100 undifferentiated issues.
- Sample-based audit is honest: state sample size, not "full crawl of N pages" unless you crawled them.
- Pair with
on-page-seo-optimizer for page-level rewrites and seo-monitoring for tracking.
Anti-patterns
- Auditing from memory without fetching the live site
- Claiming "Core Web Vitals fail" without data
- Mixing content strategy opinions into technical Critical
1---2name: seo-technical-auditor3description: Audit technical SEO - indexation, sitemap, robots.txt, Core Web Vitals hints, redirects, canonical tags, and crawl errors. Use when a site underperforms in search or before a relaunch.4---56# SEO Technical Auditor78Find and prioritize technical issues that block ranking. Evidence first, checklist second. Operate like a senior technical SEO: grounded fetches, impact × effort triage, no invented CWV scores.910## When to use1112- Full site technical audit before relaunch or after traffic drops13- Indexation / crawlability suspicion14- Pre-migration checklist1516## When not to use1718- Pure content strategy with no URL (use `keyword-research` / `seo-content-writer`)19- Paid ranking reports without API access (use MCP `search-console` if connected, else `seo-data-provider` or ask for GSC/PSI exports)2021## Audit checklist2223| Area | What to check | How |24|------|---------------|-----|25| Indexation | noindex, canonical conflicts, `site:` coverage | fetch pages + web_search `site:domain` |26| robots.txt | blocked paths, sitemap line, crawl-delay | `web_fetch https://domain/robots.txt` |27| Sitemap | valid XML, fresh URLs, sample 404s | fetch `/sitemap.xml` (+ index children) |28| Redirects | chains, http→https, www, trailing slash | fetch variants; note status chain |29| Meta / head | title, description, robots, canonical, hreflang | sample 5-15 money pages |30| Structured data | JSON-LD presence/type | parse `<script type="application/ld+json">` |31| Internal links | orphans, deep money pages | sample nav + footer + in-content |32| Performance | LCP/CLS/INP hints only | ask for PSI/CrUX URL or note "requires PSI" |33| HTTPS | mixed content signals | fetch http upgrade + page assets notes |34| Hreflang | reciprocal FR/EN/AR | head tags on language variants |3536## Workflow37381. Run `seo` action `pipeline` first for a full audit, or compose `crawl`, `audit`, `schema`, `psi`, `crux`, `score`, and `report`.392. Treat engine findings and their evidence objects as the source of truth.403. Use `serp_snapshot` only with DataForSEO or Semrush credentials and retain source/confidence.414. Preserve every `data_gap`; do not replace missing PSI, CrUX, ranking, position, or volume data with estimates.425. Add expert interpretation and prioritize findings as Critical / Important / Nice-to-have.436. The canonical health score comes from `seo` action `score`. For legacy imported findings only, the helper remains available:4445```bash46python navin/skills/seo-technical-auditor/scripts/audit_score.py findings.json47```4849Or from workspace: `python <skill_dir>/scripts/audit_score.py seo/audit-findings.json`50517. Save report under `seo/technical-audit-<domain>-<date>.md` and feed `seo-report-*.html`.5253## Finding severity5455| Severity | Meaning | Examples |56|----------|---------|----------|57| Critical | Blocks crawl/index or money page | sitewide noindex, sitemap 404, https broken |58| Important | Material ranking/UX drag | canonical loops, missing titles, thin money pages |59| Nice to have | Polish | missing FAQ schema, minor meta length |6061## Report format6263```markdown64## Technical SEO Audit - <domain>65Date / scope / pages sampled6667### Critical (blocks ranking)681. issue - URL - evidence - fix - effort (S/M/L)6970### Important71...7273### Nice to have74...7576### Quick wins (this week)77- ...7879### Data gaps80- Core Web Vitals: requires PageSpeed Insights / CrUX81- Index coverage: prefer MCP `search-console` when connected; else GSC export if site: is inconclusive82```8384## Rules8586- Prefer live GSC via MCP `search-console` (Settings → MCP) for index coverage, queries, and page performance when available; otherwise ask for a CSV export or mark the gap.87- Every finding needs a URL + observed evidence (status, snippet, header).88- Never invent Lighthouse, CrUX, volume, or position data; use the engine's explicit `data_gap`.89- Prioritize by impact × effort; do not dump 100 undifferentiated issues.90- Sample-based audit is honest: state sample size, not "full crawl of N pages" unless you crawled them.91- Pair with `on-page-seo-optimizer` for page-level rewrites and `seo-monitoring` for tracking.9293## Anti-patterns9495- Auditing from memory without fetching the live site96- Claiming "Core Web Vitals fail" without data97- Mixing content strategy opinions into technical Critical