{"id":"34c5297f-11b1-4cef-8cad-7728b63cb67d","shortId":"xN3296","kind":"skill","title":"seo-technical-audit","tagline":"Focused one-shot technical SEO audit for a domain. Crawlability, indexability, security, mobile, structured data, JS rendering — single-pass deliverable, not a diff. Distinct from `seo-drift` (which tracks changes over time) and from `seo-page` (which audits keywords/traffic for ","description":"# Technical Audit\n\nA one-shot technical SEO audit for a domain. Pulls SE Ranking's audit data, categorizes findings by area (crawlability, indexability, security, mobile, structured data, etc.), severity-sorts within each, and produces a top-10 fix list ranked by impact × effort.\n\n## Prerequisites\n\n- SE Ranking MCP server connected.\n- Claude's `WebFetch` tool available (used for sense-checking robots.txt and sitemap presence).\n- User provides: a target domain (e.g. `example.com`). Optional: target country (default `us`), audit-page-limit override (default: rely on the existing audit's limit).\n\n## Process\n\n1. **Validate target & preflight.** See `skills/seo-firecrawl/references/preflight.md` for the canonical 3-stage preflight (credit balance, Firecrawl availability, Google APIs). Skill-specific notes:\n   - Normalise domain (strip protocol, trailing slash) before continuing.\n   - Estimated SE Ranking cost for this skill: a re-check of an existing audit is cheap; creating a new audit is significantly more expensive and varies by page count. Surface the cost before deciding.\n   - Firecrawl: optional. When available, step 8 (Modern signals checklist) runs on 5 sample URLs and `/robots.txt`, ~6 Firecrawl credits (hard cap). Without it, step 8 is skipped — JS-render canonical/noindex divergence, X-Robots-Tag headers, and AI-crawler robots-rule analysis are unavailable but the full technical-audit deliverable still ships. Pass `--no-firecrawl` to skip step 8 even when Firecrawl is available (saves credits).\n   - Google APIs: tier 0 unlocks step 8b (CrUX field data); tier 1 also unlocks step 8c (per-URL GSC Inspection on top 5 traffic pages). See `skills/seo-google/references/cross-skill-integration.md` § \"seo-technical-audit\" for the full recipe and per-tier branches.\n\n2. **Find or create the audit** `DATA_listAudits`\n   - List audits for the domain.\n   - If a recent audit exists (<30 days old), use it.\n   - If older than 30 days, run `DATA_recheckAudit` to refresh.\n   - If none exists, ask the user before creating a new one with `DATA_createStandardAudit` (it consumes credits).\n   - Wait for `DATA_getAuditStatus` to report `done` before pulling the report.\n\n3. **Pull the audit report** `DATA_getAuditReport`\n   - Top-line metrics: pages crawled, health score, total issues by severity.\n   - Issues grouped by category (crawlability, indexability, mobile, security, structured data, etc.).\n\n4. **Pull per-issue page lists** `DATA_getAuditPagesByIssue`\n   - For each significant issue (severity ≥ medium, count ≥ 5), pull the affected URLs.\n   - This produces the actionable fix list.\n\n5. **Cross-reference key URLs** `DATA_getIssuesByUrl`\n   - For the top 5 pages by traffic (from `DATA_getDomainKeywords`'s page aggregation, or homepage + key landing pages if no keyword data), pull all issues for those specific URLs.\n   - This catches cases where one important page concentrates many issues.\n\n6. **Sense-check** `WebFetch`\n   - Fetch `/robots.txt` and `/sitemap.xml` directly.\n   - Confirm the audit's findings match reality on these critical files (audits sometimes lag behind same-day deploys).\n   - **Extended security headers.** WebFetch the homepage and 3 sample URLs (top-traffic landing pages from step 5, fall back to homepage + key landing pages if no keyword data); read response headers and flag any of:\n     - `csp_missing` — `Content-Security-Policy` absent.\n     - `xframe_missing` — `X-Frame-Options` absent (informational; CSP `frame-ancestors` supersedes).\n     - `xcontent_missing` — `X-Content-Type-Options` not set to `nosniff`.\n     - `referrer_policy_missing` — `Referrer-Policy` absent.\n     - `hsts_no_preload` — `Strict-Transport-Security` present but `preload` directive missing AND domain not on the Chromium HSTS preload list.\n   - Map findings via `references/severity-mapping.md` § Security and surface in `evidence/02-issues-by-category/security.md` (and inline into TECH-AUDIT.md's \"By category → Security\" section).\n\n7. **Categorize and prioritize** using `references/severity-mapping.md`\n   - Map each issue code to severity, fix, and effort estimate.\n   - Score each finding: severity × affected-page-count / effort.\n   - Build the top-10 fix list.\n\n8. **Modern signals checklist** `mcp__firecrawl-mcp__firecrawl_scrape`\n   - SE Ranking's audit crawler doesn't execute JS and doesn't expose response headers per page. This step surfaces what's invisible to it.\n   - **If Firecrawl available** (~6 Firecrawl credits, hard cap): pick 5 sample URLs from the audit — bias toward high-traffic landing pages and pages already flagged with noindex / canonical issues. For each:\n     - **JS-rendered canonical vs initial-HTML canonical (`js_canonical_mismatch`).** Compare `metadata.canonical` (after JS render) against the canonical the audit recorded. Flag any divergence — per Google's Dec-2025 JavaScript SEO guidance, when a canonical in raw HTML differs from one injected by JS, Google MAY use either one, making canonical decisions non-deterministic. JS-injected canonical changes silently break indexing on JS-heavy sites.\n     - **JS-rendered noindex.** Check `metadata.robots` for `noindex` after render. Catches client-side-only `noindex` injection that the audit can't see.\n     - **X-Robots-Tag header.** Read response headers from `metadata`. Flag any `noindex` / `nofollow` / `none` directives at the HTTP layer.\n     - **Dec-2025 JS-SEO risk detection** (Google's December 2025 JavaScript SEO guidance — four risks the static crawler cannot detect):\n       - **Risk 1 — Rendering-budget cuts (`js_render_budget`).** Compare initial-HTML body size to rendered-HTML body size. Flag pages where rendered HTML is <50% of initial HTML size after JS execution — indicates Google may exhaust its render budget before the page's actual content loads.\n       - **Risk 2 — Hydration mismatch.** Already detected above via `js_canonical_mismatch`; rationale: per the Dec-2025 guidance Google may pick *either* canonical, so any drift is a real-world ranking risk, not just a tidiness issue.\n       - **Risk 3 — CSR pitfalls (`js_csr_meta_drift`).** Diff initial-HTML `<title>`, `<h1>`, and `<meta name=\"description\">` against the same fields in the JS-rendered DOM. Flag any divergence — Google does not reliably index content that only appears post-render, so the empty/wrong initial values may be what gets indexed.\n       - **Risk 4 — Soft-404 from JS errors (`js_soft_404`).** Flag rendered pages where body text content is <500 chars but the HTTP response status is 200. This pattern indicates a JS render failure that Google treats as a soft-404 — the page returns 200 (so it's \"live\") but contains no real content (so it's \"empty\").\n     - Then make one additional call: `firecrawl_scrape` on `/robots.txt` (1 credit). Parse for AI-crawler User-Agent rules — `GPTBot`, `ClaudeBot`, `PerplexityBot`, `Google-Extended`, `ChatGPT-User`, `Bytespider`, `CCBot`. Surface allow/disallow scope per agent.\n   - **If Firecrawl unavailable:** skip this step. Note in `TECH-AUDIT.md`: `Modern signals (JS canonical/noindex divergence, X-Robots-Tag, AI-crawler robots.txt rules, Dec-2025 JS-SEO risks): skipped — Firecrawl not installed.`\n\n8b. **CWV field data via CrUX** *(only if google-api.json is present, tier ≥ 0)*\n   - SE Ranking's audit reports lab-only CWV (Lighthouse-flavoured estimates). CrUX returns actual Chrome user p75 metrics — the data Google ranks against.\n   - Run `python3 scripts/pagespeed_check.py \"https://{domain}\" --crux-only --json` for current p75 LCP / INP / CLS / FCP / TTFB.\n   - Run `python3 scripts/crux_history.py \"https://{domain}\" --origin --json` for the 25-week trend per metric (improving / stable / degrading).\n   - If CrUX has no field data (\"insufficient data\"), surface that and continue — low-traffic origins are common.\n   - Surface in `TECH-AUDIT.md` as a new section \"## Core Web Vitals (field data)\" with current p75 + trend per metric, source labelled \"CrUX 28-day origin\".\n\n8c. **Per-URL indexation status via GSC URL Inspection** *(only if google-api.json is present, tier ≥ 1)*\n   - For each of the top 5 traffic pages identified in step 5 (or homepage + key landing pages if no keyword data), run:\n     `python3 scripts/gsc_inspect.py \"{url}\" --site-url \"{config.default_property}\" --json`\n   - Capture `indexStatusVerdict`, `coverageState`, `googleCanonical` (vs `userCanonical`), and `lastCrawlTime` per URL.\n   - **Cross-check against the audit's noindex / canonical findings.** If GSC reports `INDEXED` but the audit flagged `noindex`, the audit is stale or the directive was added recently — flag for re-audit. If GSC reports `EXCLUDED` for a page the audit treats as healthy, that's a hidden indexability issue the SE Ranking audit can't see.\n   - **Critical-issue elevation:** any `userCanonical ≠ googleCanonical` divergence on a top-traffic page is added to the Top-10 fix list at Critical severity regardless of `severity-mapping.md`'s default — Google having decided on a different canonical is a real-world ranking problem.\n   - If the property isn't verified in GSC for this account, surface \"GSC: {domain} not verified — add it in Search Console\" and skip 8c only.\n   - Surface in `TECH-AUDIT.md` as a new section \"## Indexation reality check (GSC URL Inspection)\" with one row per top-5-traffic URL: status / canonical-divergence / last-crawled.\n   - See `skills/seo-google/references/cross-skill-integration.md` § \"seo-technical-audit\" for the full recipe and failure modes.\n\n8d. **IndexNow detection** `WebFetch`\n   - Detection logic — IndexNow advertises its key one of three ways. Check in this order:\n     1. **robots.txt hint:** look in the already-fetched `/robots.txt` (step 6) for an `IndexNow:` directive or a comment referencing the key file path.\n     2. **Response header hint:** scan response headers from the homepage WebFetch (step 6) for `x-indexnow-key`, `x-indexnow`, or `x-indexnow-key-location`.\n     3. **Conventional path probe:** WebFetch `/<key>.txt` if a key was hinted in (1) or (2). If neither hint exists, additionally probe a small set of conventional locations only when the user's domain has signalled IndexNow elsewhere (e.g. Bing Webmaster integration disclosed in robots.txt).\n   - Map findings via `references/severity-mapping.md` § IndexNow:\n     - No key advertised anywhere → `indexnow_no_key` (Low; informational — Bing-only benefit).\n     - Key advertised but `/<key>.txt` content ≠ advertised key → `indexnow_key_mismatch` (Medium).\n     - Key file present and matches but no recent submissions detected → `indexnow_not_submitted_recently` (Low; informational).\n   - Detect last-key-rotation date when possible: WebFetch the key file and read the `Last-Modified` response header (or fall back to the file's `Date` header).\n   - Surface in `evidence/02-issues-by-category/security.md` (or a new `evidence/02-issues-by-category/indexnow.md` if findings are non-trivial; either way, fold into TECH-AUDIT.md's \"By category\" section) and add a row to the `TECH-AUDIT.md` Modern signals section showing IndexNow status: configured (Y/N) and last-key-rotation date if detectable.\n\n9. **Synthesise** `TECH-AUDIT.md`\n\n## Output format\n\nCreate a folder `seo-technical-audit-{target-slug}-{YYYYMMDD}/` with:\n\n```\nseo-technical-audit-{target-slug}-{YYYYMMDD}/\n├── TECH-AUDIT.md                       (synthesised top-10 fix list + category summary — primary deliverable; inlines 01-audit-summary header + the six 02-issues-by-category/* tables under \"By category\")\n├── issues.csv                          (every issue: code, severity, count, fix, effort — load-bearing CSV engineering pastes into Jira)\n├── 03-key-pages-issues.md              (top 5 traffic pages, all their issues — load-bearing reference engineering / on-call consult per-URL)\n└── evidence/\n    ├── 02-issues-by-category/          (raw per-category tables — preserved in case a reader wants the unmerged view)\n    │   ├── crawlability.md\n    │   ├── indexability.md\n    │   ├── security.md\n    │   ├── mobile.md\n    │   ├── structured-data.md\n    │   └── content.md\n    ├── 04-robots-sitemap-snapshot.md   (raw fetched files — preserved for reproducibility)\n    └── 05-modern-signals.md            (JS-render canonical/noindex divergence, X-Robots-Tag, AI-crawler rules — requires Firecrawl)\n```\n\nTop-level: `TECH-AUDIT.md` + `issues.csv` + `03-key-pages-issues.md`. The audit summary header (`01-audit-summary`) is already in TECH-AUDIT.md's header; the six per-category tables (`02-issues-by-category/*.md`) are inlined under TECH-AUDIT.md's \"By category\" section. The raw category files, robots/sitemap snapshot, and modern-signals dump live under `evidence/` for reproducibility.\n\n`TECH-AUDIT.md` follows this shape:\n\n```markdown\n# Technical Audit: {domain}\n\n> Audit date {YYYY-MM-DD} · Pages crawled: {n} · Health score: {n}/100\n\n## Summary\n\n| Severity | Count |\n|---|---|\n| Critical | {n} |\n| High | {n} |\n| Medium | {n} |\n| Low | {n} |\n\n## Top 10 fixes (impact × effort)\n\n| Rank | Issue | Severity | Pages | Fix | Effort |\n|---|---|---|---|---|---|\n| 1 | {issue name} | {severity} | {n} | {one-line fix} | {S/M/L} |\n| ... |\n\n## By category\n\n### Crawlability ({n} issues)\n- {issue name} ({n} pages) — {fix}\n- ...\n\n### Indexability ({n} issues)\n- ...\n\n### Security ({n} issues)\n- ...\n\n### Mobile ({n} issues)\n- ...\n\n### Structured data ({n} issues)\n- ...\n\n### Content ({n} issues)\n- ...\n\n### Modern signals ({n} findings — Firecrawl)\n- {URL} — initial-HTML canonical `{X}` differs from JS-rendered canonical `{Y}` (`js_canonical_mismatch`)\n- {URL} — JS-rendered `noindex` not visible to static crawler\n- {URL} — `X-Robots-Tag: noindex` at HTTP layer\n- {URL} — rendered HTML <50% of initial HTML size (`js_render_budget` — Google may stop rendering before content loads)\n- {URL} — title / H1 / meta description differ between initial HTML and post-render DOM (`js_csr_meta_drift`)\n- {URL} — rendered body <500 chars but HTTP 200 (`js_soft_404` — likely JS render failure, treated as soft-404 by Google)\n- robots.txt — `GPTBot`: {allow / disallow `/path`}, `ClaudeBot`: {…}, `Google-Extended`: {…}, ...\n- IndexNow — configured: {Y/N} · key-file: `/<key>.txt` {found / missing / mismatch} · last-key-rotation: {YYYY-MM-DD or \"unknown\"}\n- (Or: `Modern signals: skipped — Firecrawl not installed`)\n\n### Security headers (extended — WebFetch)\n\n| Header | Homepage | Sample 1 | Sample 2 | Sample 3 | Issue |\n|---|---|---|---|---|---|\n| Content-Security-Policy | {present/absent} | … | … | … | `csp_missing` if absent |\n| X-Frame-Options | {present/absent} | … | … | … | `xframe_missing` if absent (informational; CSP frame-ancestors supersedes) |\n| X-Content-Type-Options | {`nosniff`/absent/other} | … | … | … | `xcontent_missing` if not `nosniff` |\n| Referrer-Policy | {present/absent} | … | … | … | `referrer_policy_missing` if absent |\n| HSTS preload | {preload directive Y/N · on Chromium preload list Y/N} | … | … | … | `hsts_no_preload` if not on list |\n\n## Core Web Vitals (field data — CrUX)\n\n| Metric | p75 (current) | 25-week trend | Threshold | Status |\n|---|---|---|---|---|\n| LCP | {n} ms | {improving/stable/degrading} | ≤2500 ms good · ≤4000 ms needs improvement | {pass/warn/fail} |\n| INP | {n} ms | … | ≤200 ms good · ≤500 ms needs improvement | … |\n| CLS | {n} | … | ≤0.1 good · ≤0.25 needs improvement | … |\n| FCP | {n} ms | … | ≤1800 ms good · ≤3000 ms needs improvement | … |\n| TTFB | {n} ms | … | ≤800 ms good · ≤1800 ms needs improvement | … |\n\nSource: CrUX 28-day origin. If insufficient field data: \"CrUX: insufficient data for {domain} (low-traffic origin).\"\n(Or: `CWV (field data): not configured — run `bash extensions/google/install.sh` for setup.`)\n\n## Indexation reality check (GSC URL Inspection)\n\n| URL | Status | userCanonical → googleCanonical | Last crawled |\n|---|---|---|---|\n| {top-traffic URL 1} | {INDEXED|EXCLUDED|...} | {URL} {→ different URL if divergent} | {YYYY-MM-DD} |\n| {top-traffic URL 2} | … | … | … |\n| ... |\n\nSource: GSC URL Inspection (Tier 1). If property not verified: \"GSC: {domain} not verified — add it in Search Console.\"\n(Or: `Indexation reality check: not configured (Tier 1 setup required).`)\n\n## Key-page deep dives\n\n### {URL with most issues}\n{n} issues found. Top fixes:\n1. ...\n2. ...\n\n## Recommended cadence\nRe-run this skill monthly to catch regressions, or wire `seo-drift` to baseline + diff between audits.\n```\n\n`issues.csv` columns: `category,issue_code,issue_name,severity,affected_pages,suggested_fix,effort,priority_score`\n\n## Tips\n\n- Respect rate limit: 10 req/sec.\n- Reuse existing audits when possible — creating a new audit is the most expensive operation.\n- A fresh audit on a 1k-page site can take 10–30 minutes to complete. The skill polls `DATA_getAuditStatus` until `done` — be patient.\n- The severity scale comes from SE Ranking's audit (not arbitrary). Map them via `references/severity-mapping.md` so impact × effort scoring is consistent run-to-run.\n- For sites with >10k pages, consider auditing critical sections separately (set audit URL filters in SE Ranking) rather than crawling the whole site every time.\n- Pair with `seo-drift` for regression tracking: this skill is the snapshot, drift is the diff.\n- Pair with `seo-sitemap` for orphan/missing-page analysis (it consumes this skill's audit data).\n- Don't auto-apply fixes. The skill diagnoses; humans decide which fixes to ship and in what order.","tags":["seo","technical","audit","skills","seranking","agent-skills","ai-search","anthropic","backlinks","claude","claude-code","claude-plugin"],"capabilities":["skill","source-seranking","skill-seo-technical-audit","topic-agent-skills","topic-ai-search","topic-anthropic","topic-backlinks","topic-claude","topic-claude-code","topic-claude-plugin","topic-claude-skills","topic-content-brief","topic-ga4","topic-keyword-research","topic-mcp"],"categories":["seo-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/seranking/seo-skills/seo-technical-audit","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add seranking/seo-skills","source_repo":"https://github.com/seranking/seo-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 9 github stars · SKILL.md body (17,421 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:08:37.509Z","embedding":null,"createdAt":"2026-05-18T13:14:11.501Z","updatedAt":"2026-05-18T19:08:37.509Z","lastSeenAt":"2026-05-18T19:08:37.509Z","tsv":"'-10':87,652,1365,1716 '-2025':752,836,920,1108 '-404':993,1030,2054 '-5':1433 '/100':1901 '/absent/other':2136 '/path':2061 '/robots.txt':220,488,1056,1483 '/sitemap.xml':490 '0':279,1129 '0.1':2206 '0.25':2208 '01':1724,1835 '02':1731,1777,1851 '03-key-pages-issues.md':1756,1830 '04-robots-sitemap-snapshot.md':1802 '05-modern-signals.md':1809 '1':140,287,857,1057,1245,1474,1537,1924,2100,2276,2298,2319,2336 '10':1914,2378,2405 '10k':2447 '1800':2214,2227 '1k':2400 '1k-page':2399 '2':317,906,1498,1539,2102,2292,2337 '200':1016,1034,2043,2197 '2025':845 '25':1179,2177 '2500':2186 '28':1226,2233 '3':149,378,518,943,1525,2104 '30':335,343,2406 '3000':2217 '4':408,991 '4000':2189 '404':999,2046 '5':216,299,424,435,446,528,699,1251,1257,1758 '50':883,2003 '500':1008,2039,2200 '6':221,482,693,1485,1510 '7':624 '8':210,229,268,655 '800':2224 '8b':282,1117 '8c':291,1229,1413 '8d':1456 '9':1688 'absent':553,560,584,2114,2123,2150 'account':1400 'action':432 'actual':902,1145 'ad':1314,1361 'add':1406,1666,2307 'addit':1051,1544 'advertis':1463,1576,1588,1592 'affect':427,645,2367 'affected-page-count':644 'agent':1066,1083 'aggreg':455 'ai':244,1062,1103,1820 'ai-crawl':243,1061,1102,1819 'allow':2059 'allow/disallow':1080 'alreadi':714,909,1481,1840 'already-fetch':1480 'also':288 'analysi':249,2493 'ancestor':565,2128 'anywher':1577 'api':157,277 'appear':976 'appli':2505 'arbitrari':2429 'area':70 'ask':353 'audit':4,11,46,50,57,65,127,136,184,190,257,307,322,326,333,381,494,503,668,704,743,811,1133,1292,1303,1307,1320,1329,1342,1448,1699,1708,1726,1832,1837,1887,1889,2358,2382,2388,2396,2427,2450,2455,2499 'audit-page-limit':126 'audit-summari':1725,1836 'auto':2504 'auto-appli':2503 'avail':104,155,208,273,692 'back':530,1636 'balanc':153 'baselin':2355 'bash':2256 'bear':1750,1766 'behind':506 'benefit':1586 'bias':705 'bing':1563,1584 'bing-on':1583 'bodi':869,875,1004,2038 'branch':316 'break':785 'budget':860,864,897,2010 'build':649 'bytespid':1077 'cadenc':2339 'call':1052,1771 'cannot':854 'canon':148,718,725,730,732,741,758,774,782,914,926,1295,1382,1438,1969,1976,1979 'canonical-diverg':1437 'canonical/noindex':235,1096,1813 'cap':225,697 'captur':1277 'case':474,1789 'catch':473,802,2347 'categor':67,625 'categori':400,621,1663,1719,1735,1739,1781,1785,1849,1855,1863,1867,1935,2361 'ccbot':1078 'chang':37,783 'char':1009,2040 'chatgpt':1075 'chatgpt-us':1074 'cheap':186 'check':109,180,485,796,1289,1424,1470,2262,2315 'checklist':213,658 'chrome':1146 'chromium':602,2157 'claud':100 'claudebot':1069,2062 'client':804 'client-side-on':803 'cls':1168,2204 'code':633,1743,2363 'column':2360 'come':2422 'comment':1492 'common':1204 'compar':734,865 'complet':2409 'concentr':479 'config.default':1274 'configur':1678,2067,2254,2317 'confirm':492 'connect':99 'consid':2449 'consist':2439 'consol':1410,2311 'consult':1772 'consum':365,2495 'contain':1040 'content':550,571,903,973,1006,1043,1591,1957,2016,2107,2132 'content-security-polici':549,2106 'content.md':1801 'continu':169,1198 'convent':1526,1550 'core':1212,2168 'cost':173,202 'count':199,423,647,1745,1904 'countri':123 'coveragest':1279 'crawl':390,1442,1896,2271,2463 'crawlability.md':1796 'crawlabl':15,71,401,1936 'crawler':245,669,853,1063,1104,1821,1990 'creat':187,320,357,1693,2385 'createstandardaudit':363 'credit':152,223,275,366,695,1058 'critic':501,1347,1369,1905,2451 'critical-issu':1346 'cross':437,1288 'cross-check':1287 'cross-refer':436 'crux':283,1122,1143,1160,1188,1225,2173,2232,2240 'crux-on':1159 'csp':547,562,2111,2125 'csr':944,947,2033 'csv':1751 'current':1164,1218,2176 'cut':861 'cwv':1118,1138,2250 'data':20,66,76,285,323,346,362,369,383,406,415,441,451,464,539,1120,1151,1192,1194,1216,1266,1954,2172,2239,2242,2252,2413,2500 'date':1619,1641,1685,1890 'day':336,344,509,1227,2234 'dd':1894,2083,2287 'dec':751,835,919,1107 'decemb':844 'decid':204,1378,2511 'decis':775 'deep':2325 'default':124,131,1375 'degrad':1186 'deliver':26,258,1722 'deploy':510 'descript':2022 'detect':841,855,910,1458,1460,1607,1614,1687 'determinist':778 'diagnos':2509 'diff':29,950,2356,2485 'differ':762,1381,1971,2023,2280 'direct':491,595,830,1312,1489,2154 'disallow':2060 'disclos':1566 'distinct':30 'dive':2326 'diverg':236,747,967,1097,1353,1439,1814,2283 'doesn':670,675 'dom':964,2031 'domain':14,60,118,163,329,598,1158,1174,1403,1557,1888,2244,2304 'done':373,2416 'drift':34,929,949,2035,2353,2473,2482 'dump':1875 'e.g':119,1562 'effort':93,638,648,1747,1917,1923,2371,2436 'either':771,925,1656 'elev':1349 'elsewher':1561 'empti':1047 'empty/wrong':982 'engin':1752,1768 'error':996 'estim':170,639,1142 'etc':77,407 'even':269 'everi':1741,2467 'evid':1776,1878 'evidence/02-issues-by-category/indexnow.md':1649 'evidence/02-issues-by-category/security.md':614,1645 'example.com':120 'exclud':1324,2278 'execut':672,890 'exhaust':894 'exist':135,183,334,352,1543,2381 'expens':194,2392 'expos':677 'extend':511,1073,2065,2095 'extensions/google/install.sh':2257 'failur':1023,1454,2050 'fall':529,1635 'fcp':1169,2211 'fetch':487,1482,1804 'field':284,958,1119,1191,1215,2171,2238,2251 'file':502,1496,1599,1625,1639,1805,1868,2071 'filter':2457 'find':68,318,496,607,642,1296,1570,1651,1963 'firecrawl':154,205,222,264,271,661,663,691,694,1053,1085,1114,1824,1964,2090 'firecrawl-mcp':660 'fix':88,433,636,653,1366,1717,1746,1915,1922,1932,1943,2335,2370,2506,2513 'flag':544,715,745,825,877,965,1000,1304,1316 'flavour':1141 'focus':5 'fold':1658 'folder':1695 'follow':1882 'format':1692 'found':2073,2333 'four':849 'frame':558,564,2117,2127 'frame-ancestor':563,2126 'fresh':2395 'full':254,310,1451 'get':988 'getauditpagesbyissu':416 'getauditreport':384 'getauditstatus':370,2414 'getdomainkeyword':452 'getissuesbyurl':442 'good':2188,2199,2207,2216,2226 'googl':156,276,749,768,842,892,922,968,1025,1072,1152,1376,2011,2056,2064 'google-api.json':1125,1241 'google-extend':1071,2063 'googlecanon':1280,1352,2269 'gptbot':1068,2058 'group':398 'gsc':295,1236,1298,1322,1397,1402,1425,2263,2294,2303 'guidanc':755,848,921 'h1':2020 'hard':224,696 'header':241,513,542,679,819,822,1500,1504,1633,1642,1728,1834,1844,2094,2097 'health':391,1898 'healthi':1332 'heavi':790 'hidden':1336 'high':708,1907 'high-traff':707 'hint':1476,1501,1535,1542 'homepag':457,516,532,1259,1507,2098 'hsts':585,603,2151,2161 'html':729,761,868,874,881,886,953,1968,2002,2006,2026 'http':833,1012,1998,2042 'human':2510 'hydrat':907 'identifi':1254 'impact':92,1916,2435 'import':477 'improv':1184,2192,2203,2210,2220,2230 'improving/stable/degrading':2185 'index':16,72,402,786,972,989,1233,1300,1337,1422,1944,2260,2277,2313 'indexability.md':1797 'indexnow':1457,1462,1488,1514,1518,1522,1560,1573,1578,1594,1608,1676,2066 'indexstatusverdict':1278 'indic':891,1019 'inform':561,1582,1613,2124 'initi':728,867,885,952,983,1967,2005,2025 'initial-html':727,866,951,1966 'inject':765,781,808 'inlin':616,1723,1858 'inp':1167,2194 'inspect':296,1238,1427,2265,2296 'instal':1116,2092 'insuffici':1193,2237,2241 'integr':1565 'invis':687 'isn':1393 'issu':394,397,412,420,467,481,632,719,941,1338,1348,1733,1742,1763,1779,1853,1919,1925,1938,1939,1946,1949,1952,1956,1959,2105,2330,2332,2362,2364 'issues-by-categori':1732,1778,1852 'issues.csv':1740,1829,2359 'javascript':753,846 'jira':1755 'js':21,233,673,723,731,737,767,780,789,793,838,862,889,913,946,962,995,997,1021,1095,1110,1811,1974,1978,1983,2008,2032,2044,2048 'js-heavi':788 'js-inject':779 'js-render':232,722,792,961,1810,1973,1982 'js-seo':837,1109 'json':1162,1176,1276 'key':439,458,533,1260,1465,1495,1515,1523,1533,1575,1580,1587,1593,1595,1598,1617,1624,1683,2070,2078,2323 'key-fil':2069 'key-pag':2322 'keyword':463,538,1265 'keywords/traffic':47 'lab':1136 'lab-on':1135 'label':1224 'lag':505 'land':459,524,534,710,1261 'last':1441,1616,1630,1682,2077,2270 'last-crawl':1440 'last-key-rot':1615,1681,2076 'last-modifi':1629 'lastcrawltim':1284 'layer':834,1999 'lcp':1166,2182 'level':1827 'lighthous':1140 'lighthouse-flavour':1139 'like':2047 'limit':129,138,2377 'line':387,1931 'list':89,325,414,434,605,654,1367,1718,2159,2167 'listaudit':324 'live':1038,1876 'load':904,1749,1765,2017 'load-bear':1748,1764 'locat':1524,1551 'logic':1461 'look':1477 'low':1200,1581,1612,1911,2246 'low-traff':1199,2245 'make':773,1049 'mani':480 'map':606,630,1569,2430 'markdown':1885 'match':497,1602 'may':769,893,923,985,2012 'mcp':97,659,662 'md':1856 'medium':422,1597,1909 'meta':948,2021,2034 'metadata':824 'metadata.canonical':735 'metadata.robots':797 'metric':388,1149,1183,1222,2174 'minut':2407 'mismatch':733,908,915,1596,1980,2075 'miss':548,555,568,580,596,2074,2112,2121,2138,2148 'mm':1893,2082,2286 'mobil':18,74,403,1950 'mobile.md':1799 'mode':1455 'modern':211,656,1093,1672,1873,1960,2087 'modern-sign':1872 'modifi':1631 'month':2345 'ms':2184,2187,2190,2196,2198,2201,2213,2215,2218,2223,2225,2228 'n':1897,1900,1906,1908,1910,1912,1928,1937,1941,1945,1948,1951,1955,1958,1962,2183,2195,2205,2212,2222,2331 'name':1926,1940,2365 'need':2191,2202,2209,2219,2229 'neither':1541 'new':189,359,1210,1420,1648,2387 'no-firecrawl':262 'nofollow':828 'noindex':717,795,799,807,827,1294,1305,1985,1996 'non':777,1654 'non-determinist':776 'non-trivi':1653 'none':351,829 'normalis':162 'nosniff':577,2135,2141 'note':161,1090 'old':337 'older':341 'on-cal':1769 'one':7,53,360,476,764,772,1050,1429,1466,1930 'one-lin':1929 'one-shot':6,52 'oper':2393 'option':121,206,559,573,2118,2134 'order':1473,2519 'origin':1175,1202,1228,2235,2248 'orphan/missing-page':2492 'output':1691 'overrid':130 'p75':1148,1165,1219,2175 'page':44,128,198,301,389,413,447,454,460,478,525,535,646,681,711,713,878,900,1002,1032,1253,1262,1327,1359,1760,1895,1921,1942,2324,2368,2401,2448 'pair':2469,2486 'pars':1059 'pass':25,261 'pass/warn/fail':2193 'past':1753 'path':1497,1527 'patient':2418 'pattern':1018 'per':293,314,411,680,748,917,1082,1182,1221,1231,1285,1431,1774,1784,1848 'per-categori':1783,1847 'per-issu':410 'per-tier':313 'per-url':292,1230,1773 'perplexitybot':1070 'pick':698,924 'pitfal':945 'polici':552,579,583,2109,2144,2147 'poll':2412 'possibl':1621,2384 'post':978,2029 'post-rend':977,2028 'preflight':143,151 'preload':587,594,604,2152,2153,2158,2163 'prerequisit':94 'presenc':113 'present':592,1127,1243,1600 'present/absent':2110,2119,2145 'preserv':1787,1806 'primari':1721 'priorit':627 'prioriti':2372 'probe':1528,1545 'problem':1389 'process':139 'produc':84,430 'properti':1275,1392,2300 'protocol':165 'provid':115 'pull':61,375,379,409,425,465 'python3':1156,1172,1268 'rank':63,90,96,172,666,935,1131,1153,1341,1388,1918,2425,2460 'rate':2376 'rather':2461 'rational':916 'raw':760,1782,1803,1866 're':179,1319,2341 're-audit':1318 're-check':178 're-run':2340 'read':540,820,1627 'reader':1791 'real':933,1042,1386 'real-world':932,1385 'realiti':498,1423,2261,2314 'recent':332,1315,1605,1611 'recheckaudit':347 'recip':311,1452 'recommend':2338 'record':744 'refer':438,1767 'referenc':1493 'references/severity-mapping.md':609,629,1572,2433 'referr':578,582,2143,2146 'referrer-polici':581,2142 'refresh':349 'regardless':1371 'regress':2348,2475 'reli':132 'reliabl':971 'render':22,234,724,738,794,801,859,863,873,880,896,963,979,1001,1022,1812,1975,1984,2001,2009,2014,2030,2037,2049 'rendered-html':872 'rendering-budget':858 'report':372,377,382,1134,1299,1323 'reproduc':1808,1880 'req/sec':2379 'requir':1823,2321 'respect':2375 'respons':541,678,821,1013,1499,1503,1632 'return':1033,1144 'reus':2380 'risk':840,850,856,905,936,942,990,1112 'robot':239,247,817,1100,1817,1994 'robots-rul':246 'robots.txt':110,1105,1475,1568,2057 'robots/sitemap':1869 'rotat':1618,1684,2079 'row':1430,1668 'rule':248,1067,1106,1822 'run':214,345,1155,1171,1267,2255,2342,2441,2443 'run-to-run':2440 's/m/l':1933 'same-day':507 'sampl':217,519,700,2099,2101,2103 'save':274 'scale':2421 'scan':1502 'scope':1081 'score':392,640,1899,2373,2437 'scrape':664,1054 'scripts/crux_history.py':1173 'scripts/gsc_inspect.py':1269 'scripts/pagespeed_check.py':1157 'se':62,95,171,665,1130,1340,2424,2459 'search':1409,2310 'section':623,1211,1421,1664,1674,1864,2452 'secur':17,73,404,512,551,591,610,622,1947,2093,2108 'security.md':1798 'see':144,302,814,1345,1443 'sens':108,484 'sense-check':107,483 'seo':2,10,33,43,56,305,754,839,847,1111,1446,1697,1706,2352,2472,2489 'seo-drift':32,2351,2471 'seo-pag':42 'seo-sitemap':2488 'seo-technical-audit':1,304,1445,1696,1705 'separ':2453 'server':98 'set':575,1548,2454 'setup':2259,2320 'sever':79,396,421,635,643,1370,1744,1903,1920,1927,2366,2420 'severity-mapping.md':1373 'severity-sort':78 'shape':1884 'ship':260,2515 'shot':8,54 'show':1675 'side':805 'signal':212,657,1094,1559,1673,1874,1961,2088 'signific':192,419 'silent':784 'singl':24 'single-pass':23 'site':791,1272,2402,2445,2466 'site-url':1271 'sitemap':112,2490 'six':1730,1846 'size':870,876,887,2007 'skill':159,176,2344,2411,2478,2497,2508 'skill-seo-technical-audit' 'skill-specif':158 'skills/seo-firecrawl/references/preflight.md':145 'skills/seo-google/references/cross-skill-integration.md':303,1444 'skip':231,266,1087,1113,1412,2089 'slash':167 'slug':1702,1711 'small':1547 'snapshot':1870,2481 'soft':992,998,1029,2045,2053 'sometim':504 'sort':80 'sourc':1223,2231,2293 'source-seranking' 'specif':160,470 'stabl':1185 'stage':150 'stale':1309 'static':852,1989 'status':1014,1234,1436,1677,2181,2267 'step':209,228,267,281,290,527,683,1089,1256,1484,1509 'still':259 'stop':2013 'strict':589 'strict-transport-secur':588 'strip':164 'structur':19,75,405,1953 'structured-data.md':1800 'submiss':1606 'submit':1610 'suggest':2369 'summari':1720,1727,1833,1838,1902 'supersed':566,2129 'surfac':200,612,684,1079,1195,1205,1401,1415,1643 'synthesis':1689,1714 'tabl':1736,1786,1850 'tag':240,818,1101,1818,1995 'take':2404 'target':117,122,142,1701,1710 'target-slug':1700,1709 'tech-audit.md':618,1092,1207,1417,1660,1671,1690,1713,1828,1842,1860,1881 'technic':3,9,49,55,256,306,1447,1698,1707,1886 'technical-audit':255 'text':1005 'three':1468 'threshold':2180 'tidi':940 'tier':278,286,315,1128,1244,2297,2318 'time':39,2468 'tip':2374 'titl':2019 'tool':103 'top':86,298,386,445,522,651,1250,1357,1364,1432,1715,1757,1826,1913,2273,2289,2334 'top-level':1825 'top-lin':385 'top-traff':521,1356,2272,2288 'topic-agent-skills' 'topic-ai-search' 'topic-anthropic' 'topic-backlinks' 'topic-claude' 'topic-claude-code' 'topic-claude-plugin' 'topic-claude-skills' 'topic-content-brief' 'topic-ga4' 'topic-keyword-research' 'topic-mcp' 'total':393 'toward':706 'track':36,2476 'traffic':300,449,523,709,1201,1252,1358,1434,1759,2247,2274,2290 'trail':166 'transport':590 'treat':1026,1330,2051 'trend':1181,1220,2179 'trivial':1655 'ttfb':1170,2221 'txt':1530,1590,2072 'type':572,2133 'unavail':251,1086 'unknown':2085 'unlock':280,289 'unmerg':1794 'url':218,294,428,440,471,520,701,1232,1237,1270,1273,1286,1426,1435,1775,1965,1981,1991,2000,2018,2036,2264,2266,2275,2279,2281,2291,2295,2327,2456 'us':125 'use':105,338,628,770 'user':114,355,1065,1076,1147,1555 'user-ag':1064 'usercanon':1282,1351,2268 'valid':141 'valu':984 'vari':196 'verifi':1395,1405,2302,2306 'via':608,912,1121,1235,1571,2432 'view':1795 'visibl':1987 'vital':1214,2170 'vs':726,1281 'wait':367 'want':1792 'way':1469,1657 'web':1213,2169 'webfetch':102,486,514,1459,1508,1529,1622,2096 'webmast':1564 'week':1180,2178 'whole':2465 'wire':2350 'within':81 'without':226 'world':934,1387 'x':238,557,570,816,1099,1513,1517,1521,1816,1970,1993,2116,2131 'x-content-type-opt':569,2130 'x-frame-opt':556,2115 'x-indexnow':1516 'x-indexnow-key':1512 'x-indexnow-key-loc':1520 'x-robots-tag':237,815,1098,1815,1992 'xcontent':567,2137 'xframe':554,2120 'y':1977 'y/n':1679,2068,2155,2160 'yyyi':1892,2081,2285 'yyyy-mm-dd':1891,2080,2284 'yyyymmdd':1703,1712","prices":[{"id":"1b704743-d2a1-4023-95e3-11d421db423b","listingId":"34c5297f-11b1-4cef-8cad-7728b63cb67d","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"seranking","category":"seo-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:11.501Z"}],"sources":[{"listingId":"34c5297f-11b1-4cef-8cad-7728b63cb67d","source":"github","sourceId":"seranking/seo-skills/seo-technical-audit","sourceUrl":"https://github.com/seranking/seo-skills/tree/main/skills/seo-technical-audit","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:11.501Z","lastSeenAt":"2026-05-18T19:08:37.509Z"}],"details":{"listingId":"34c5297f-11b1-4cef-8cad-7728b63cb67d","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"seranking","slug":"seo-technical-audit","github":{"repo":"seranking/seo-skills","stars":9,"topics":["agent-skills","ai-search","answer-engine-optimization","anthropic","backlinks","claude","claude-code","claude-plugin","claude-skills","content-brief","ga4","generative-engine-optimization","keyword-research","mcp","mcp-server","search-console","seo","seo-tools","seranking","site-audit"],"license":"mit","html_url":"https://github.com/seranking/seo-skills","pushed_at":"2026-05-11T20:07:40Z","description":"Claude SEO Skills — production Claude Agent Skills for the SE Ranking MCP server. Content briefs, AI Search share of voice, audits, backlink gaps, keyword clusters, schema, sitemap, GEO, and more.","skill_md_sha":"3f7d73d86598df9b885ad42e2d2ddba3366bdf15","skill_md_path":"skills/seo-technical-audit/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/seranking/seo-skills/tree/main/skills/seo-technical-audit"},"layout":"multi","source":"github","category":"seo-skills","frontmatter":{"name":"seo-technical-audit","description":"Focused one-shot technical SEO audit for a domain. Crawlability, indexability, security, mobile, structured data, JS rendering — single-pass deliverable, not a diff. Distinct from `seo-drift` (which tracks changes over time) and from `seo-page` (which audits keywords/traffic for one URL, not technical health). Use when the user asks \"technical audit\", \"site audit\", \"audit my site\", \"crawl issues\", \"indexation issues\", or \"technical SEO check\"."},"skills_sh_url":"https://skills.sh/seranking/seo-skills/seo-technical-audit"},"updatedAt":"2026-05-18T19:08:37.509Z"}}