[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C2NF4KNAKSNVR48HGTKE06":3,"skill-same:01M6C2NF4KNAKSNVR48HGTKE06":105},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":16,"sourceHtmlUrl":17,"categories":18,"keywords":29,"publishedAt":59,"linkOnly":60,"markdownContent":61,"markdownBody":62,"frontMatter":63,"refName":70,"commitSha":71,"skillDirectory":72,"forksCount":14,"repositoryHtmlUrl":73,"repositoryHomepageUrl":6,"ownerHtmlUrl":74,"ownerBlogUrl":6,"ownerDescription":75,"updatedAt":76,"install":77,"resources":89},"01M6C2NF4KNAKSNVR48HGTKE06","seo-technical",null,"Technical SEO audit across 9 categories: crawlability, indexability, security, URL structure, mobile, Core Web Vitals, structured data, JavaScript rendering, and IndexNow protocol. Use when user says \"technical SEO\", \"crawl issues\", \"robots.txt\", \"Core Web Vitals\", \"site speed\", or \"security headers\".","noirelab\u002Flinux-setup","noirelab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F142925921?v=4","01M6C29R3FEDGFAXAT0KXY28QX","Kaíque M. Lima","01M6C29R811WX04B0GYHTH1XV6",0,"MIT","https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fclaude\u002Fskills\u002Fseo-technical\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fclaude\u002Fskills\u002Fseo-technical\u002FSKILL.md",[19,24],{"categoryNo":20,"categoryName":21,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000019","营销推广","SCENARIO","使用场景",{"categoryNo":25,"categoryName":26,"taxonomyType":27,"taxonomyTypeDesc":28},"01JBSEEDCAT000000000000035","市场营销","PROFESSION","适用职业",[30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58],"seo","technical","seo technical","user","when","vitals","categories","headers","URL","technical seo audit","rendering","crawlability","across","structure","crawl","mobile","use","structured data","site","core web vitals","seo audit","data","audit","issues","protocol","core","web","javascript","security","2026-11-10 10:12:30",false,"---\nname: seo-technical\ndescription: >\n  Technical SEO audit across 9 categories: crawlability, indexability, security,\n  URL structure, mobile, Core Web Vitals, structured data, JavaScript rendering,\n  and IndexNow protocol. Use when user says \"technical SEO\", \"crawl issues\",\n  \"robots.txt\", \"Core Web Vitals\", \"site speed\", or \"security headers\".\nuser-invocable: true\nargument-hint: \"[url]\"\nlicense: MIT\nmetadata:\n  author: AgriciDaniel\n  version: \"2.2.4\"\n  category: seo\n---\n\n# Technical SEO Audit\n\n## Categories\n\n### 1. Crawlability\n- robots.txt: exists, valid, not blocking important resources\n- XML sitemap: run `\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run sitemap_discovery.py \u003Curl> --json`; require a\n  valid entry in `found`, and report stale or unsafe robots.txt declarations\n  separately from working fallback locations\n- Noindex tags: intentional vs accidental\n- Crawl depth: important pages within 3 clicks of homepage\n- JavaScript rendering: check if critical content requires JS execution\n- Crawl budget: for large sites (>10k pages), efficiency matters\n- Googlebot **fetch limits**: Googlebot fetches the first **2MB of HTML** and first **64MB of a PDF** (uncompressed; 15MB is the broader crawler-infra default). Long-standing, not a 2026 change, but inline base64 images, oversized inline CSS\u002FJS, or bloated nav can push critical content\u002FJSON-LD past the cap and out of the index. Keep key content + structured data within the first 2MB.\n- Crawl rate **auto-adjusts** (backs off on 5xx\u002Fslow responses); there is **no manual crawl-rate control** (the legacy Search Console setting was removed Jan 2024). Influence crawling via sitemaps, server responsiveness, and robots controls.\n- Google's canonical crawling\u002Frobots reference moved to **developers.google.com\u002Fcrawling** (migrated 2025-11-20); IP-range files relocated to `\u002Fcrawling\u002Fipranges\u002F` and `googlebot.json` was renamed `common-crawlers.json`.\n\n#### AI Crawler Management\n\nAs of 2025-2026, AI companies actively crawl the web to train models and power AI search. Managing these crawlers via robots.txt is a critical technical SEO consideration.\n\n**Known AI crawlers:**\n\n| Crawler | Company | robots.txt token | Purpose |\n|---------|---------|-----------------|---------|\n| GPTBot | OpenAI | `GPTBot` | Model training |\n| ChatGPT-User | OpenAI | `ChatGPT-User` | Real-time browsing |\n| ClaudeBot | Anthropic | `ClaudeBot` | Model training |\n| PerplexityBot | Perplexity | `PerplexityBot` | Search index + training |\n| Bytespider | ByteDance | `Bytespider` | Model training |\n| Google-Extended | Google | `Google-Extended` | Gemini training (NOT search) |\n| CCBot | Common Crawl | `CCBot` | Open dataset |\n\n**Key distinctions:**\n- Blocking `Google-Extended` prevents Gemini training use but does NOT affect Google Search indexing or AI Overviews (those use `Googlebot`)\n- Blocking `GPTBot` prevents OpenAI training but does NOT prevent ChatGPT from citing your content via browsing (`ChatGPT-User`)\n- ~3-5% of websites now use AI-specific robots.txt rules\n\n**Example, selective AI crawler blocking:**\n```\n# Allow search indexing, block AI training crawlers\nUser-agent: GPTBot\nDisallow: \u002F\n\nUser-agent: Google-Extended\nDisallow: \u002F\n\nUser-agent: Bytespider\nDisallow: \u002F\n\n# Allow all other crawlers (including Googlebot for search)\nUser-agent: *\nAllow: \u002F\n```\n\n**Recommendation:** Consider your AI visibility strategy before blocking. Being cited by AI systems drives brand awareness and referral traffic. Cross-reference the `seo-geo` skill for the full AI crawler\u002Ffetcher taxonomy.\n\n> **User-triggered fetchers ignore robots.txt by design.** Google now documents **Google-Agent** (Project Mariner, agentic browsing) plus **Google-NotebookLM** and **Google Messages** as *user-triggered* fetchers that **cannot be blocked via robots.txt**. Use server-side access controls instead. By contrast, `Google-Extended` and `Google-CloudVertexBot` obey robots.txt. Emerging: **Web Bot Auth** (RFC 9421) lets bots authenticate cryptographically via a `Signature-Agent` header + key directory at `agent.bot.goog` (used by Google-Agent); reverse-DNS verification remains the fallback.\n\n### 2. Indexability\n- Canonical tags: self-referencing, no conflicts with noindex\n- Duplicate content: near-duplicates, parameter URLs, www vs non-www\n- Thin content: pages below minimum word counts per type\n- Pagination: rel=next\u002Fprev or load-more pattern\n- Hreflang: correct for multi-language\u002Fmulti-region sites\n- Index bloat: unnecessary pages consuming crawl budget\n\n### 3. Security\n- HTTPS: enforced, valid SSL certificate, no mixed content\n- Security headers:\n  - Content-Security-Policy (CSP)\n  - Strict-Transport-Security (HSTS)\n  - X-Frame-Options\n  - X-Content-Type-Options\n  - Referrer-Policy\n- HSTS preload: check preload list inclusion for high-security sites\n- **Back-button hijacking** (spam-policy violation, malicious practices): flag pages that defeat the Back button via `history.pushState`\u002F`replaceState` (including scripts injected by third-party ad\u002Flibrary platforms). Added to Google's spam policies 2026-04-13; **enforcement live since 2026-06-15** (manual actions + automated demotions): treat as Critical.\n\n### 4. URL Structure\n- Clean URLs: descriptive, hyphenated, no query parameters for content\n- Hierarchy: logical folder structure reflecting site architecture\n- Redirects: no chains (max 1 hop), 301 for permanent moves\n- URL length: flag >100 characters\n- Trailing slashes: consistent usage\n\n### 5. Mobile Optimization & Page Experience\n- Responsive design: viewport meta tag, responsive CSS\n- Touch targets: minimum 48x48px with 8px spacing\n- Font size: minimum 16px base\n- No horizontal scroll\n- Mobile-first indexing: Googlebot Smartphone is the primary crawler (rollout completed 2024). A mobile version is **not strictly required** (Google says \"very strongly recommended\"), sites that don't work on mobile can still be indexed, but the real risk is **content\u002Fparity loss**, not hard exclusion.\n- **Mobile\u002Fdesktop content parity** (highest-value mobile check): equivalent primary content, matching robots meta tags, matching titles\u002Fdescriptions, equivalent structured data, crawlable resources; avoid lazy-loading primary content that requires user interaction.\n- **Intrusive interstitials \u002F ad density**: flag full-page interstitials, standalone consent-redirect pages, persistent blocking dialogs, and excessive\u002Fdistracting ad density (a named page-experience aspect). Acceptable: small banners, standard CMS\u002Flegal dialogs.\n- **\"Read more\" deep links**: keep key content **immediately visible on load** (not behind tabs\u002Faccordions), don't hijack scroll on load, and preserve URL hash fragments, content hidden behind expandable sections is less likely to qualify.\n\n> **Page experience is guidance, not a single ranking system.** Only **Core Web Vitals** feeds ranking directly; **HTTPS** is a confirmed but lightweight signal (affects \u003C~1% of queries). Relevance can still win even when page experience is sub-par, so don't over-weight security headers. Note: the standalone **Page Experience report was removed** from Search Console (monitor via the Core Web Vitals + HTTPS reports).\n\n### 6. Core Web Vitals\n- **LCP** (Largest Contentful Paint): target \u003C=2.5s\n- **INP** (Interaction to Next Paint): target \u003C=200ms\n  - INP replaced FID on March 12, 2024. FID was removed from Chrome's field-data tools (CrUX API, PageSpeed Insights) on September 9, 2024 (Lighthouse is a lab tool that never reported FID). Do NOT reference FID anywhere.\n- **CLS** (Cumulative Layout Shift): target \u003C=0.1\n- Evaluation uses 75th percentile of real user data\n- Use PageSpeed Insights API or CrUX data if MCP available\n\n### 7. Structured Data\n- Detection: JSON-LD (preferred), Microdata, RDFa\n- Validation against Google's supported types\n- See seo-schema skill for full analysis\n\n### 8. JavaScript Rendering\n- Check if content visible in initial HTML vs requires JS\n- Identify client-side rendered (CSR) vs server-side rendered (SSR)\n- Flag SPA frameworks (React, Vue, Angular) that may cause indexing issues\n- Verify dynamic rendering setup if applicable\n\n#### JavaScript SEO: Canonical & Indexing Guidance (December 2025)\n\nGoogle updated its JavaScript SEO documentation in December 2025 with critical clarifications:\n\n1. **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.\n2. **noindex with JavaScript:** If raw HTML contains `\u003Cmeta 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.\n3. **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.\n4. **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.\n\n**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.\n\n### 9. IndexNow Protocol\n- Check if site supports IndexNow for Bing, Yandex, Naver\n- Supported by search engines other than Google\n- Recommend implementation for faster indexing on non-Google engines\n\n## Agent-Friendly Pages & Agentic Browsing\n\nAI agents (not just AI summarizers) increasingly read sites through three\nchannels: vision models on screenshots, raw HTML\u002FDOM, and the **accessibility\ntree** (the cleanest signal). Audit criteria: semantic HTML (real `\u003Cbutton>`\nand `\u003Ca>`, not `\u003Cdiv onclick>`), label associations, interactive target sizing,\nlayout stability across templates, `cursor: pointer` correctness, live in\n`references\u002Fagent-friendly-pages.md`.\n\nGoogle now ships a Lighthouse **Agentic Browsing** category (default-on since\nLighthouse 13.3.0, Chrome 150+; buckets: agent-centric accessibility, CLS +\nllms.txt, three WebMCP audits). It reports a **fractional pass-ratio (X of N),\nnot a 0-100 score**, keep that distinct from this skill's own Agent-UX 0-100\nheuristic below. The PSI REST API does not expose it; run via Lighthouse CLI\n`--only-categories=agentic-browsing`, DevTools, or the PSI web UI. See\n`references\u002Fagent-friendly-pages.md`.\n\n### Audit command\n\n```bash\n# Render with Playwright + capture accessibility tree, then score\n\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run agent_ux_check.py https:\u002F\u002Fexample.com --json\n```\n\nThe scanner outputs an Agent-UX score (0-100) plus itemized issues:\n- HTML findings: real buttons \u002F anchors, `\u003Cdiv onclick>` widgets, semantic\n  landmarks, inputs without `\u003Clabel for>`, inputs without ARIA labels\n- Accessibility tree findings: total nodes, interactive nodes, unnamed\n  interactive elements, `role=\"generic\"` ratio\n\nThe accessibility-tree snapshot uses Playwright's\n`page.accessibility.snapshot(interesting_only=False)`. To capture the tree\nwithout scoring, use `\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run render_page.py \u003Curl> --a11y-tree --json`.\n\nSurface findings as **opportunities**, not failures; don't gate audits on a\nsub-100 Agent-UX score. WebMCP origin-trial\u002Fsign-up status needs verification,\nand absence of WebMCP support is still an opportunity, not a defect.\n\n## Output\n\n### Technical Score: XX\u002F100\n\n### Category Breakdown\n| Category | Status | Score |\n|----------|--------|-------|\n| Crawlability | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| Indexability | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| Security | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| URL Structure | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| Mobile | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| Core Web Vitals | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| Structured Data | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| JS Rendering | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| IndexNow | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n\n### Critical Issues (fix immediately)\n### High Priority (fix within 1 week)\n### Medium Priority (fix within 1 month)\n### Low Priority (backlog)\n\n## DataForSEO Integration (Optional)\n\nIf DataForSEO MCP tools are available, use `on_page_instant_pages` for real page analysis (status codes, page timing, broken links, on-page checks), `on_page_lighthouse` for Lighthouse audits (performance, accessibility, SEO scores), and `domain_analytics_technologies_domain_technologies` for technology stack detection.\n\n## Google API Integration (Optional)\n\nIf Google API credentials are configured, use `\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run pagespeed_check.py \u003Curl> --json` for real PSI + CrUX field data (replaces lab-only CWV estimates), `\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run crux_history.py \u003Curl> --json` for 25-week CWV trends, and `\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run gsc_inspect.py \u003Curl> --json` for real indexation status per URL.\n\n## Error Handling\n\n| Scenario | Action |\n|----------|--------|\n| URL unreachable | Report connection error with status code. Suggest verifying URL, checking DNS resolution, and confirming the site is publicly accessible. |\n| robots.txt not found | Note that no robots.txt was detected at the root domain. Recommend creating one with appropriate directives. Continue audit on remaining categories. |\n| HTTPS not configured | Flag as a critical issue. Report whether HTTP is served without redirect, mixed content exists, or SSL certificate is missing\u002Fexpired. |\n| Core Web Vitals data unavailable | Note that CrUX data is not available (common for low-traffic sites). Suggest using Lighthouse lab data as a proxy and recommend increasing traffic before re-testing. |\n","# Technical SEO Audit\n\n## Categories\n\n### 1. Crawlability\n- robots.txt: exists, valid, not blocking important resources\n- XML sitemap: run `\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run sitemap_discovery.py \u003Curl> --json`; require a\n  valid entry in `found`, and report stale or unsafe robots.txt declarations\n  separately from working fallback locations\n- Noindex tags: intentional vs accidental\n- Crawl depth: important pages within 3 clicks of homepage\n- JavaScript rendering: check if critical content requires JS execution\n- Crawl budget: for large sites (>10k pages), efficiency matters\n- Googlebot **fetch limits**: Googlebot fetches the first **2MB of HTML** and first **64MB of a PDF** (uncompressed; 15MB is the broader crawler-infra default). Long-standing, not a 2026 change, but inline base64 images, oversized inline CSS\u002FJS, or bloated nav can push critical content\u002FJSON-LD past the cap and out of the index. Keep key content + structured data within the first 2MB.\n- Crawl rate **auto-adjusts** (backs off on 5xx\u002Fslow responses); there is **no manual crawl-rate control** (the legacy Search Console setting was removed Jan 2024). Influence crawling via sitemaps, server responsiveness, and robots controls.\n- Google's canonical crawling\u002Frobots reference moved to **developers.google.com\u002Fcrawling** (migrated 2025-11-20); IP-range files relocated to `\u002Fcrawling\u002Fipranges\u002F` and `googlebot.json` was renamed `common-crawlers.json`.\n\n#### AI Crawler Management\n\nAs of 2025-2026, AI companies actively crawl the web to train models and power AI search. Managing these crawlers via robots.txt is a critical technical SEO consideration.\n\n**Known AI crawlers:**\n\n| Crawler | Company | robots.txt token | Purpose |\n|---------|---------|-----------------|---------|\n| GPTBot | OpenAI | `GPTBot` | Model training |\n| ChatGPT-User | OpenAI | `ChatGPT-User` | Real-time browsing |\n| ClaudeBot | Anthropic | `ClaudeBot` | Model training |\n| PerplexityBot | Perplexity | `PerplexityBot` | Search index + training |\n| Bytespider | ByteDance | `Bytespider` | Model training |\n| Google-Extended | Google | `Google-Extended` | Gemini training (NOT search) |\n| CCBot | Common Crawl | `CCBot` | Open dataset |\n\n**Key distinctions:**\n- Blocking `Google-Extended` prevents Gemini training use but does NOT affect Google Search indexing or AI Overviews (those use `Googlebot`)\n- Blocking `GPTBot` prevents OpenAI training but does NOT prevent ChatGPT from citing your content via browsing (`ChatGPT-User`)\n- ~3-5% of websites now use AI-specific robots.txt rules\n\n**Example, selective AI crawler blocking:**\n```\n# Allow search indexing, block AI training crawlers\nUser-agent: GPTBot\nDisallow: \u002F\n\nUser-agent: Google-Extended\nDisallow: \u002F\n\nUser-agent: Bytespider\nDisallow: \u002F\n\n# Allow all other crawlers (including Googlebot for search)\nUser-agent: *\nAllow: \u002F\n```\n\n**Recommendation:** Consider your AI visibility strategy before blocking. Being cited by AI systems drives brand awareness and referral traffic. Cross-reference the `seo-geo` skill for the full AI crawler\u002Ffetcher taxonomy.\n\n> **User-triggered fetchers ignore robots.txt by design.** Google now documents **Google-Agent** (Project Mariner, agentic browsing) plus **Google-NotebookLM** and **Google Messages** as *user-triggered* fetchers that **cannot be blocked via robots.txt**. Use server-side access controls instead. By contrast, `Google-Extended` and `Google-CloudVertexBot` obey robots.txt. Emerging: **Web Bot Auth** (RFC 9421) lets bots authenticate cryptographically via a `Signature-Agent` header + key directory at `agent.bot.goog` (used by Google-Agent); reverse-DNS verification remains the fallback.\n\n### 2. Indexability\n- Canonical tags: self-referencing, no conflicts with noindex\n- Duplicate content: near-duplicates, parameter URLs, www vs non-www\n- Thin content: pages below minimum word counts per type\n- Pagination: rel=next\u002Fprev or load-more pattern\n- Hreflang: correct for multi-language\u002Fmulti-region sites\n- Index bloat: unnecessary pages consuming crawl budget\n\n### 3. Security\n- HTTPS: enforced, valid SSL certificate, no mixed content\n- Security headers:\n  - Content-Security-Policy (CSP)\n  - Strict-Transport-Security (HSTS)\n  - X-Frame-Options\n  - X-Content-Type-Options\n  - Referrer-Policy\n- HSTS preload: check preload list inclusion for high-security sites\n- **Back-button hijacking** (spam-policy violation, malicious practices): flag pages that defeat the Back button via `history.pushState`\u002F`replaceState` (including scripts injected by third-party ad\u002Flibrary platforms). Added to Google's spam policies 2026-04-13; **enforcement live since 2026-06-15** (manual actions + automated demotions): treat as Critical.\n\n### 4. URL Structure\n- Clean URLs: descriptive, hyphenated, no query parameters for content\n- Hierarchy: logical folder structure reflecting site architecture\n- Redirects: no chains (max 1 hop), 301 for permanent moves\n- URL length: flag >100 characters\n- Trailing slashes: consistent usage\n\n### 5. Mobile Optimization & Page Experience\n- Responsive design: viewport meta tag, responsive CSS\n- Touch targets: minimum 48x48px with 8px spacing\n- Font size: minimum 16px base\n- No horizontal scroll\n- Mobile-first indexing: Googlebot Smartphone is the primary crawler (rollout completed 2024). A mobile version is **not strictly required** (Google says \"very strongly recommended\"), sites that don't work on mobile can still be indexed, but the real risk is **content\u002Fparity loss**, not hard exclusion.\n- **Mobile\u002Fdesktop content parity** (highest-value mobile check): equivalent primary content, matching robots meta tags, matching titles\u002Fdescriptions, equivalent structured data, crawlable resources; avoid lazy-loading primary content that requires user interaction.\n- **Intrusive interstitials \u002F ad density**: flag full-page interstitials, standalone consent-redirect pages, persistent blocking dialogs, and excessive\u002Fdistracting ad density (a named page-experience aspect). Acceptable: small banners, standard CMS\u002Flegal dialogs.\n- **\"Read more\" deep links**: keep key content **immediately visible on load** (not behind tabs\u002Faccordions), don't hijack scroll on load, and preserve URL hash fragments, content hidden behind expandable sections is less likely to qualify.\n\n> **Page experience is guidance, not a single ranking system.** Only **Core Web Vitals** feeds ranking directly; **HTTPS** is a confirmed but lightweight signal (affects \u003C~1% of queries). Relevance can still win even when page experience is sub-par, so don't over-weight security headers. Note: the standalone **Page Experience report was removed** from Search Console (monitor via the Core Web Vitals + HTTPS reports).\n\n### 6. Core Web Vitals\n- **LCP** (Largest Contentful Paint): target \u003C=2.5s\n- **INP** (Interaction to Next Paint): target \u003C=200ms\n  - INP replaced FID on March 12, 2024. FID was removed from Chrome's field-data tools (CrUX API, PageSpeed Insights) on September 9, 2024 (Lighthouse is a lab tool that never reported FID). Do NOT reference FID anywhere.\n- **CLS** (Cumulative Layout Shift): target \u003C=0.1\n- Evaluation uses 75th percentile of real user data\n- Use PageSpeed Insights API or CrUX data if MCP available\n\n### 7. Structured Data\n- Detection: JSON-LD (preferred), Microdata, RDFa\n- Validation against Google's supported types\n- See seo-schema skill for full analysis\n\n### 8. JavaScript Rendering\n- Check if content visible in initial HTML vs requires JS\n- Identify client-side rendered (CSR) vs server-side rendered (SSR)\n- Flag SPA frameworks (React, Vue, Angular) that may cause indexing issues\n- Verify dynamic rendering setup if applicable\n\n#### JavaScript SEO: Canonical & Indexing Guidance (December 2025)\n\nGoogle updated its JavaScript SEO documentation in December 2025 with critical clarifications:\n\n1. **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.\n2. **noindex with JavaScript:** If raw HTML contains `\u003Cmeta 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.\n3. **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.\n4. **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.\n\n**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.\n\n### 9. IndexNow Protocol\n- Check if site supports IndexNow for Bing, Yandex, Naver\n- Supported by search engines other than Google\n- Recommend implementation for faster indexing on non-Google engines\n\n## Agent-Friendly Pages & Agentic Browsing\n\nAI agents (not just AI summarizers) increasingly read sites through three\nchannels: vision models on screenshots, raw HTML\u002FDOM, and the **accessibility\ntree** (the cleanest signal). Audit criteria: semantic HTML (real `\u003Cbutton>`\nand `\u003Ca>`, not `\u003Cdiv onclick>`), label associations, interactive target sizing,\nlayout stability across templates, `cursor: pointer` correctness, live in\n`references\u002Fagent-friendly-pages.md`.\n\nGoogle now ships a Lighthouse **Agentic Browsing** category (default-on since\nLighthouse 13.3.0, Chrome 150+; buckets: agent-centric accessibility, CLS +\nllms.txt, three WebMCP audits). It reports a **fractional pass-ratio (X of N),\nnot a 0-100 score**, keep that distinct from this skill's own Agent-UX 0-100\nheuristic below. The PSI REST API does not expose it; run via Lighthouse CLI\n`--only-categories=agentic-browsing`, DevTools, or the PSI web UI. See\n`references\u002Fagent-friendly-pages.md`.\n\n### Audit command\n\n```bash\n# Render with Playwright + capture accessibility tree, then score\n\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run agent_ux_check.py https:\u002F\u002Fexample.com --json\n```\n\nThe scanner outputs an Agent-UX score (0-100) plus itemized issues:\n- HTML findings: real buttons \u002F anchors, `\u003Cdiv onclick>` widgets, semantic\n  landmarks, inputs without `\u003Clabel for>`, inputs without ARIA labels\n- Accessibility tree findings: total nodes, interactive nodes, unnamed\n  interactive elements, `role=\"generic\"` ratio\n\nThe accessibility-tree snapshot uses Playwright's\n`page.accessibility.snapshot(interesting_only=False)`. To capture the tree\nwithout scoring, use `\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run render_page.py \u003Curl> --a11y-tree --json`.\n\nSurface findings as **opportunities**, not failures; don't gate audits on a\nsub-100 Agent-UX score. WebMCP origin-trial\u002Fsign-up status needs verification,\nand absence of WebMCP support is still an opportunity, not a defect.\n\n## Output\n\n### Technical Score: XX\u002F100\n\n### Category Breakdown\n| Category | Status | Score |\n|----------|--------|-------|\n| Crawlability | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| Indexability | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| Security | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| URL Structure | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| Mobile | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| Core Web Vitals | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| Structured Data | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| JS Rendering | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n| IndexNow | pass\u002Fwarn\u002Ffail | XX\u002F100 |\n\n### Critical Issues (fix immediately)\n### High Priority (fix within 1 week)\n### Medium Priority (fix within 1 month)\n### Low Priority (backlog)\n\n## DataForSEO Integration (Optional)\n\nIf DataForSEO MCP tools are available, use `on_page_instant_pages` for real page analysis (status codes, page timing, broken links, on-page checks), `on_page_lighthouse` for Lighthouse audits (performance, accessibility, SEO scores), and `domain_analytics_technologies_domain_technologies` for technology stack detection.\n\n## Google API Integration (Optional)\n\nIf Google API credentials are configured, use `\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run pagespeed_check.py \u003Curl> --json` for real PSI + CrUX field data (replaces lab-only CWV estimates), `\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run crux_history.py \u003Curl> --json` for 25-week CWV trends, and `\u002Fhome\u002Fnoirelab\u002F.config\u002Fopencode\u002Fskills\u002Fseo\u002Fbin\u002Fclaude-seo run gsc_inspect.py \u003Curl> --json` for real indexation status per URL.\n\n## Error Handling\n\n| Scenario | Action |\n|----------|--------|\n| URL unreachable | Report connection error with status code. Suggest verifying URL, checking DNS resolution, and confirming the site is publicly accessible. |\n| robots.txt not found | Note that no robots.txt was detected at the root domain. Recommend creating one with appropriate directives. Continue audit on remaining categories. |\n| HTTPS not configured | Flag as a critical issue. Report whether HTTP is served without redirect, mixed content exists, or SSL certificate is missing\u002Fexpired. |\n| Core Web Vitals data unavailable | Note that CrUX data is not available (common for low-traffic sites). Suggest using Lighthouse lab data as a proxy and recommend increasing traffic before re-testing. |\n",{"name":5,"license":15,"metadata":64,"description":67,"argument-hint":68,"user-invocable":69},{"author":65,"version":66,"category":30},"AgriciDaniel","2.2.4","Technical SEO audit across 9 categories: crawlability, indexability, security, URL structure, mobile, Core Web Vitals, structured data, JavaScript rendering, and IndexNow protocol. Use when user says \"technical SEO\", \"crawl issues\", \"robots.txt\", \"Core Web Vitals\", \"site speed\", or \"security headers\".\n","[url]",true,"main","d8378e461d60315bd1ca8a6e71716df39b6abe4a","configs\u002Fcommon\u002Fclaude\u002Fskills\u002Fseo-technical","https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup","https:\u002F\u002Fgithub.com\u002Fnoirelab","Artificial Intelligence Researcher |\r\nComputer Science majoring at UTFPR","2026-11-11 09:12:51",{"source":8,"skillName":5,"commands":78,"prompt":88,"zipAvailable":69},[79,82,85],{"tool":80,"command":81},"npx","npx skills add noirelab\u002Flinux-setup --skill seo-technical",{"tool":83,"command":84},"bunx","bunx skills add noirelab\u002Flinux-setup --skill seo-technical",{"tool":86,"command":87},"pnpm","pnpm dlx skills add noirelab\u002Flinux-setup --skill seo-technical","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fclaude\u002Fskills\u002Fseo-technical\u002FSKILL.md",[90,95,101],{"path":91,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":94,"sourceHtmlUrl":16},"LICENSE.txt","LICENSE","许可证",143,{"path":96,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":99,"sourceHtmlUrl":100},"reference\u002Faudit-contract.md","REFERENCE","参考文档",12519,"https:\u002F\u002Fgithub.com\u002FMuvon\u002Foctomind-tap\u002Fblob\u002Fmaster\u002Fskills\u002Fgeo-visibility-audit\u002Freference\u002Faudit-contract.md",{"path":102,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002Fagent-friendly-pages.md",8100,"https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fclaude\u002Fskills\u002Fseo-technical\u002Freferences\u002Fagent-friendly-pages.md",[106,137,172,194,214,230],{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":111,"sourceHtmlUrl":112,"categories":113,"keywords":117,"publishedAt":59},"01M6C2Q1S6HCS7Y9TBQ2PJ2NAM","skill-creator","Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fclaude\u002Fskills\u002Fsynced\u002Ffcfa9261-0073-49cb-8312-19eea68f0c58_391f3767-a35d-4280-81a1-363cd861a8e6\u002Fskill-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fclaude\u002Fskills\u002Fsynced\u002Ffcfa9261-0073-49cb-8312-19eea68f0c58_391f3767-a35d-4280-81a1-363cd861a8e6\u002Fskill-creator\u002FSKILL.md",[114],{"categoryNo":115,"categoryName":116,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000023","Skill与智能体开发",[118,119,120,121,122,123,124,125,126,127,128,129,46,130,131,132,133,134,135,34,136],"skill creator","creator","performance","run evals","test","variance analysis","create","run","benchmark","analysis","improve","edit","evals","optimize","existing skill","for","accuracy","scratch","new",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":59},"01M6C2ZRGJ9HN4N9BP24DPNCR4","returns-reverse-logistics","Codified expertise for returns authorization, receipt and inspection, disposition decisions, refund processing, fraud detection, and warranty claims management. Informed by returns operations managers with 15+ years experience. Includes grading frameworks, disposition economics, fraud pattern recognition, and vendor recovery processes. Use when handling product returns, reverse logistics, refund decisions, return fraud detection, or warranty claims.","https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fopencode_home\u002Fskills\u002Freturns-reverse-logistics\u002FSKILL.md",[],[144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,46,160,161,162,163,164,165,166,167,168,133,169,170,34,171],"returns","returns reverse logistics","reverse logistics","reverse","github","code","product","https","authorization","detection","fraud","recovery","decisions","management","operations","vendor","claims management","frameworks","fraud detection","pattern","grading","processing","economics","managers","claims","expertise","refund","inspection",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":178,"publishedAt":59},"01M6C2ZGWSNZGZZQ5VCFWHD2QT","quality-nonconformance","Codified expertise for quality control, non-conformance investigation, root cause analysis, corrective action, and supplier quality management in regulated manufacturing. Informed by quality engineers with 15+ years experience across FDA, IATF 16949, and AS9100 environments. Includes NCR lifecycle management, CAPA systems, SPC interpretation, and audit methodology. Use when investigating non-conformances, performing root cause analysis, managing CAPAs, interpreting SPC data, or handling supplier quality issues.","https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fopencode_home\u002Fskills\u002Fquality-nonconformance\u002FSKILL.md",[],[179,180,148,181,182,149,53,151,52,51,183,184,127,185,157,46,186,42,187,188,189,190,191,192,133,169,193,34],"quality","quality nonconformance","root cause analysis","interpretation","methodology","lifecycle","investigation","fda","manufacturing","environments","corrective action","supplier quality management","action","conformance","root cause",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":200,"publishedAt":59},"01M6C2Z8VQ9AYZYKPZW1KD9DX5","production-scheduling","Codified expertise for production scheduling, job sequencing, line balancing, changeover optimization, and bottleneck resolution in discrete and batch manufacturing. Informed by production schedulers with 15+ years experience. Includes TOC\u002Fdrum-buffer-rope, SMED, OEE analysis, disruption response frameworks, and ERP\u002FMES interaction patterns. Use when scheduling production, resolving bottlenecks, optimizing changeovers, responding to disruptions, or balancing manufacturing lines.","https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fopencode_home\u002Fskills\u002Fproduction-scheduling\u002FSKILL.md",[],[201,202,203,148,149,204,151,205,127,206,207,46,208,209,161,210,211,212,187,213,133,169,34],"Production","production scheduling","scheduling","batch","Optimization","erp","bottleneck","toc","patterns","line","interaction","sequencing","buffer",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":218,"categories":219,"keywords":220,"publishedAt":59},"01M6C2YR01NNN2Z1G18RN7F9MP","logistics-exception-management","Codified expertise for handling freight exceptions, shipment delays, damages, losses, and carrier disputes. Informed by logistics professionals with 15+ years operational experience. Includes escalation protocols, carrier-specific behaviors, claims procedures, and judgment frameworks. Use when handling shipping exceptions, freight claims, delivery issues, or carrier disputes.","https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fopencode_home\u002Fskills\u002Flogistics-exception-management\u002FSKILL.md",[],[157,221,148,149,222,53,223,151,224,46,161,225,226,227,228,168,133,169,229,34],"logistics exception management","shipping","protocols","escalation","delivery","claude-code","judgment","with","freight",{"skillNo":231,"name":232,"nameZh":6,"description":233,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":110,"licenseFileUrl":6,"sourceHtmlUrl":234,"categories":235,"keywords":236,"publishedAt":59},"01M6C2YC5PXTEJYBJJQZVXPQS0","inventory-demand-planning","Codified expertise for demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation at multi-location retailers. Informed by demand planners with 15+ years experience managing hundreds of SKUs. Includes forecasting method selection, ABC\u002FXYZ analysis, seasonal transition management, and vendor negotiation frameworks. Use when forecasting demand, setting safety stock, planning replenishment, managing promotions, or optimizing inventory levels.","https:\u002F\u002Fgithub.com\u002Fnoirelab\u002Flinux-setup\u002Fblob\u002Fmain\u002Fconfigs\u002Fcommon\u002Fopencode_home\u002Fskills\u002Finventory-demand-planning\u002FSKILL.md",[],[237,238,239,240,148,149,151,241,205,242,127,157,159,243,46,244,161,245,246,247,248,249,133,169,250,34],"planning","inventory","inventory demand planning","demand planning","negotiation","Safety","forecasting","selection","estimation","stock","seasonal","lift","at","transition"]