$npx -y skills add norahe0304-art/30x-seo --skill 30x-seo-technicalTechnical 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.
| 1 | # Technical SEO Audit |
| 2 | |
| 3 | ## Categories |
| 4 | |
| 5 | ### 1. Crawlability |
| 6 | - robots.txt: exists, valid, not blocking important resources |
| 7 | - XML sitemap: exists, referenced in robots.txt, valid format |
| 8 | - Noindex tags: intentional vs accidental |
| 9 | - Crawl depth: important pages within 3 clicks of homepage |
| 10 | - JavaScript rendering: check if critical content requires JS execution |
| 11 | - Crawl budget: for large sites (>10k pages), efficiency matters |
| 12 | |
| 13 | #### AI Crawler Management |
| 14 | |
| 15 | > **For detailed checks, use `seo-geo-technical`** |
| 16 | |
| 17 | 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`. |
| 18 | |
| 19 | ### 2. Indexability |
| 20 | - Canonical tags: self-referencing, no conflicts with noindex |
| 21 | - Duplicate content: near-duplicates, parameter URLs, www vs non-www |
| 22 | - Thin content: pages below minimum word counts per type |
| 23 | - Pagination: rel=next/prev or load-more pattern |
| 24 | - Hreflang: correct for multi-language/multi-region sites |
| 25 | - Index bloat: unnecessary pages consuming crawl budget |
| 26 | |
| 27 | ### 3. Security |
| 28 | - HTTPS: enforced, valid SSL certificate, no mixed content |
| 29 | - Security headers: |
| 30 | - Content-Security-Policy (CSP) |
| 31 | - Strict-Transport-Security (HSTS) |
| 32 | - X-Frame-Options |
| 33 | - X-Content-Type-Options |
| 34 | - Referrer-Policy |
| 35 | - HSTS preload: check preload list inclusion for high-security sites |
| 36 | |
| 37 | ### 4. URL Structure |
| 38 | - Clean URLs: descriptive, hyphenated, no query parameters for content |
| 39 | - Hierarchy: logical folder structure reflecting site architecture |
| 40 | - Redirects: no chains (max 1 hop), 301 for permanent moves |
| 41 | - URL length: flag >100 characters |
| 42 | - Trailing slashes: consistent usage |
| 43 | |
| 44 | ### 5. Mobile Optimization |
| 45 | - Responsive design: viewport meta tag, responsive CSS |
| 46 | - Touch targets: minimum 48x48px with 8px spacing |
| 47 | - Font size: minimum 16px base |
| 48 | - No horizontal scroll |
| 49 | - 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. |
| 50 | |
| 51 | ### 6. Core Web Vitals |
| 52 | - **LCP** (Largest Contentful Paint): target <2.5s |
| 53 | - **INP** (Interaction to Next Paint): target <200ms |
| 54 | - 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. |
| 55 | - **CLS** (Cumulative Layout Shift): target <0.1 |
| 56 | - Evaluation uses 75th percentile of real user data |
| 57 | - Use PageSpeed Insights API or CrUX data if MCP available |
| 58 | |
| 59 | ### 7. Structured Data |
| 60 | - Detection: JSON-LD (preferred), Microdata, RDFa |
| 61 | - Validation against Google's supported types |
| 62 | - See seo-schema skill for full analysis |
| 63 | |
| 64 | ### 8. JavaScript Rendering |
| 65 | - Check if content visible in initial HTML vs requires JS |
| 66 | - Identify client-side rendered (CSR) vs server-side rendered (SSR) |
| 67 | - Flag SPA frameworks (React, Vue, Angular) that may cause indexing issues |
| 68 | - Verify dynamic rendering setup if applicable |
| 69 | |
| 70 | #### JavaScript SEO — Canonical & Indexing Guidance (December 2025) |
| 71 | |
| 72 | Google updated its JavaScript SEO documentation in December 2025 with critical clarifications: |
| 73 | |
| 74 | 1. **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. |
| 75 | 2. **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. |
| 76 | 3. **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. |
| 77 | 4. **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. |
| 78 | |
| 79 | **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. |
| 80 | |
| 81 | ### 9. IndexNow Protocol |
| 82 | - Check if site supports IndexNow for Bing, Yandex, Naver |
| 83 | - Supported by search engines other than Google |
| 84 | - Recommend implementation for faster indexing on non-Google engines |
| 85 | |
| 86 | ## Output |
| 87 | |
| 88 | ### Technical Score: XX/100 |
| 89 | |
| 90 | ### Category Breakdown |
| 91 | | Category | Status | Score | |
| 92 | |----------|--------|-------| |
| 93 | | Crawlability | ✅/⚠️/❌ | XX/100 | |
| 94 | | Indexability | ✅/⚠️/❌ | X |