Technical SEO Audit
Categories
1. Crawlability
- robots.txt: exists, valid, not blocking important resources
- XML sitemap: exists, referenced in robots.txt, valid format
- Noindex tags: intentional vs accidental
- Crawl depth: important pages within 3 clicks of homepage
- JavaScript rendering: check if critical content requires JS execution
- Crawl budget: for large sites (>10k pages), efficiency matters
AI Crawler Management
For detailed checks, use seo-geo-technical
This skill only checks basic robots.txt configuration. For detailed AI crawler checks (GPTBot, ClaudeBot, PerplexityBot), llms.txt generation, and SSR checks, use seo-geo-technical.
2. Indexability
- Canonical tags: self-referencing, no conflicts with noindex
- Duplicate content: near-duplicates, parameter URLs, www vs non-www
- Thin content: pages below minimum word counts per type
- Pagination: rel=next/prev or load-more pattern
- Hreflang: correct for multi-language/multi-region sites
- Index bloat: unnecessary pages consuming crawl budget
3. Security
- HTTPS: enforced, valid SSL certificate, no mixed content
- Security headers:
- Content-Security-Policy (CSP)
- Strict-Transport-Security (HSTS)
- X-Frame-Options
- X-Content-Type-Options
- Referrer-Policy
- HSTS preload: check preload list inclusion for high-security sites
4. URL Structure
- Clean URLs: descriptive, hyphenated, no query parameters for content
- Hierarchy: logical folder structure reflecting site architecture
- Redirects: no chains (max 1 hop), 301 for permanent moves
- URL length: flag >100 characters
- Trailing slashes: consistent usage
5. Mobile Optimization
- Responsive design: viewport meta tag, responsive CSS
- Touch targets: minimum 48x48px with 8px spacing
- Font size: minimum 16px base
- No horizontal scroll
- Mobile-first indexing: Google indexes mobile version. Mobile-first indexing is 100% complete as of July 5, 2024. Google now crawls and indexes ALL websites exclusively with the mobile Googlebot user-agent.
6. Core Web Vitals
- LCP (Largest Contentful Paint): target <2.5s
- INP (Interaction to Next Paint): target <200ms
- INP replaced FID on March 12, 2024. FID was fully removed from all Chrome tools (CrUX API, PageSpeed Insights, Lighthouse) on September 9, 2024. Do NOT reference FID anywhere.
- CLS (Cumulative Layout Shift): target <0.1
- Evaluation uses 75th percentile of real user data
- Use PageSpeed Insights API or CrUX data if MCP available
7. Structured Data
- Detection: JSON-LD (preferred), Microdata, RDFa
- Validation against Google's supported types
- See seo-schema skill for full analysis
8. JavaScript Rendering
- Check if content visible in initial HTML vs requires JS
- Identify client-side rendered (CSR) vs server-side rendered (SSR)
- Flag SPA frameworks (React, Vue, Angular) that may cause indexing issues
- Verify dynamic rendering setup if applicable
JavaScript SEO — Canonical & Indexing Guidance (December 2025)
Google updated its JavaScript SEO documentation in December 2025 with critical clarifications:
- Canonical conflicts: If a canonical tag in raw HTML differs from one injected by JavaScript, Google may use EITHER one. Ensure canonical tags are identical between server-rendered HTML and JS-rendered output.
- noindex with JavaScript: If raw HTML contains
<meta name="robots" content="noindex"> but JavaScript removes it, Google MAY still honor the noindex from raw HTML. Serve correct robots directives in the initial HTML response.
- Non-200 status codes: Google does NOT render JavaScript on pages returning non-200 HTTP status codes. Any content or meta tags injected via JS on error pages will be invisible to Googlebot.
- Structured data in JavaScript: Product, Article, and other structured data injected via JS may face delayed processing. For time-sensitive structured data (especially e-commerce Product markup), include it in the initial server-rendered HTML.
Best practice: Serve critical SEO elements (canonical, meta robots, structured data, title, meta description) in the initial server-rendered HTML rather than relying on JavaScript injection.
9. IndexNow Protocol
- Check if site supports IndexNow for Bing, Yandex, Naver
- Supported by search engines other than Google
- Recommend implementation for faster indexing on non-Google engines
Output
Technical Score: XX/100
Category Breakdown
| Category |
Status |
Score |
| Crawlability |
✅/⚠️/❌ |
XX/100 |
| Indexability |
✅/⚠️/❌ |
XX/100 |
| Security |
✅/⚠️/❌ |
XX/100 |
| URL Structure |
✅/⚠️/❌ |
XX/100 |
| Mobile |
✅/⚠️/❌ |
XX/100 |
| Core Web Vitals |
✅/⚠️/❌ |
XX/100 |
| Structured Data |
✅/⚠️/❌ |
XX/100 |
| JS Rendering |
✅/⚠️/❌ |
XX/100 |
Critical Issues (fix immediately)
High Priority (fix within 1 week)
Medium Priority (fix within 1 month)
Low Priority (backlog)
[PROTOCOL]: Update this header on changes, then check CLAUDE.md
1---2name: 30x-seo-technical3description: Technical SEO audit across 8 categories: crawlability, indexability, security, URL structure, mobile, Core Web Vitals, structured data, JS rendering. Schema deep validation → seo-schema. AI crawlers → seo-geo-technical. Use when user says "technical SEO", "crawl issues", "robots.txt", "Core Web Vitals".4---5
6# Technical SEO Audit
7
8## Categories
9
10### 1. Crawlability
11- robots.txt: exists, valid, not blocking important resources
12- XML sitemap: exists, referenced in robots.txt, valid format
13- Noindex tags: intentional vs accidental
14- Crawl depth: important pages within 3 clicks of homepage
15- JavaScript rendering: check if critical content requires JS execution
16- Crawl budget: for large sites (>10k pages), efficiency matters
17
18#### AI Crawler Management
19
20> **For detailed checks, use `seo-geo-technical`**
21
22This skill only checks basic robots.txt configuration. For detailed AI crawler checks (GPTBot, ClaudeBot, PerplexityBot), llms.txt generation, and SSR checks, use `seo-geo-technical`.
23
24### 2. Indexability
25- Canonical tags: self-referencing, no conflicts with noindex
26- Duplicate content: near-duplicates, parameter URLs, www vs non-www
27- Thin content: pages below minimum word counts per type
28- Pagination: rel=next/prev or load-more pattern
29- Hreflang: correct for multi-language/multi-region sites
30- Index bloat: unnecessary pages consuming crawl budget
31
32### 3. Security
33- HTTPS: enforced, valid SSL certificate, no mixed content
34- Security headers:
35 - Content-Security-Policy (CSP)
36 - Strict-Transport-Security (HSTS)
37 - X-Frame-Options
38 - X-Content-Type-Options
39 - Referrer-Policy
40- HSTS preload: check preload list inclusion for high-security sites
41
42### 4. URL Structure
43- Clean URLs: descriptive, hyphenated, no query parameters for content
44- Hierarchy: logical folder structure reflecting site architecture
45- Redirects: no chains (max 1 hop), 301 for permanent moves
46- URL length: flag >100 characters
47- Trailing slashes: consistent usage
48
49### 5. Mobile Optimization
50- Responsive design: viewport meta tag, responsive CSS
51- Touch targets: minimum 48x48px with 8px spacing
52- Font size: minimum 16px base
53- No horizontal scroll
54- Mobile-first indexing: Google indexes mobile version. **Mobile-first indexing is 100% complete as of July 5, 2024.** Google now crawls and indexes ALL websites exclusively with the mobile Googlebot user-agent.
55
56### 6. Core Web Vitals
57- **LCP** (Largest Contentful Paint): target <2.5s
58- **INP** (Interaction to Next Paint): target <200ms
59 - INP replaced FID on March 12, 2024. FID was fully removed from all Chrome tools (CrUX API, PageSpeed Insights, Lighthouse) on September 9, 2024. Do NOT reference FID anywhere.
60- **CLS** (Cumulative Layout Shift): target <0.1
61- Evaluation uses 75th percentile of real user data
62- Use PageSpeed Insights API or CrUX data if MCP available
63
64### 7. Structured Data
65- Detection: JSON-LD (preferred), Microdata, RDFa
66- Validation against Google's supported types
67- See seo-schema skill for full analysis
68
69### 8. JavaScript Rendering
70- Check if content visible in initial HTML vs requires JS
71- Identify client-side rendered (CSR) vs server-side rendered (SSR)
72- Flag SPA frameworks (React, Vue, Angular) that may cause indexing issues
73- Verify dynamic rendering setup if applicable
74
75#### JavaScript SEO — Canonical & Indexing Guidance (December 2025)
76
77Google updated its JavaScript SEO documentation in December 2025 with critical clarifications:
78
791. **Canonical conflicts:** If a canonical tag in raw HTML differs from one injected by JavaScript, Google may use EITHER one. Ensure canonical tags are identical between server-rendered HTML and JS-rendered output.
802. **noindex with JavaScript:** If raw HTML contains `<meta name="robots" content="noindex">` but JavaScript removes it, Google MAY still honor the noindex from raw HTML. Serve correct robots directives in the initial HTML response.
813. **Non-200 status codes:** Google does NOT render JavaScript on pages returning non-200 HTTP status codes. Any content or meta tags injected via JS on error pages will be invisible to Googlebot.
824. **Structured data in JavaScript:** Product, Article, and other structured data injected via JS may face delayed processing. For time-sensitive structured data (especially e-commerce Product markup), include it in the initial server-rendered HTML.
83
84**Best practice:** Serve critical SEO elements (canonical, meta robots, structured data, title, meta description) in the initial server-rendered HTML rather than relying on JavaScript injection.
85
86### 9. IndexNow Protocol
87- Check if site supports IndexNow for Bing, Yandex, Naver
88- Supported by search engines other than Google
89- Recommend implementation for faster indexing on non-Google engines
90
91## Output
92
93### Technical Score: XX/100
94
95### Category Breakdown
96| Category | Status | Score |
97|----------|--------|-------|
98| Crawlability | ✅/⚠️/❌ | XX/100 |
99| Indexability | ✅/⚠️/❌ | XX/100 |
100| Security | ✅/⚠️/❌ | XX/100 |
101| URL Structure | ✅/⚠️/❌ | XX/100 |
102| Mobile | ✅/⚠️/❌ | XX/100 |
103| Core Web Vitals | ✅/⚠️/❌ | XX/100 |
104| Structured Data | ✅/⚠️/❌ | XX/100 |
105| JS Rendering | ✅/⚠️/❌ | XX/100 |
106
107### Critical Issues (fix immediately)
108### High Priority (fix within 1 week)
109### Medium Priority (fix within 1 month)
110### Low Priority (backlog)
111
112[PROTOCOL]: Update this header on changes, then check CLAUDE.md