mcpField
S
seo-technical

seo-technical

github.com/agricidaniel营销与增长23.3k7.3k 次安装6 天前更新
代码仓库

关于 seo-technical

seo-technical 是用于技术 SEO 审计的技能,面向网站运营和搜索优化人员。它检查抓取与索引、移动体验、结构化数据、安全性及 JavaScript 渲染,并提供相关诊断指导。

主要功能

  1. 01检查抓取与索引问题
  2. 02审查 URL 与重定向结构
  3. 03检查移动端体验和 Core Web Vitals
  4. 04检测结构化数据
  5. 05分析 JavaScript 渲染与内容可见性
  6. 06审查安全标头及爬虫规则

适用场景

  1. 01排查重要页面无法抓取或收录的原因
  2. 02检查移动端与桌面端内容一致性
  3. 03评估 Core Web Vitals 和页面体验
  4. 04审查 robots.txt 中 AI 爬虫规则

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/agricidaniel/claude-seo --skill seo-technical

安装后在 Claude Code 中输入/seo-technical确认已加载。

附带文件LICENSE.txtreferences/stack-cve-exposure.md

详细介绍

技术 SEO 审核

类别

1. 可抓取性
  • robots.txt:文件存在且有效,没有屏蔽重要资源
  • XML 站点地图:运行 "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run sitemap_discovery.py <url> --json;要求 found 中存在有效条目,并将过时或不安全的 robots.txt 声明与有效的备用位置分别报告
  • Noindex 标签:有意设置还是意外设置
  • 抓取深度:重要页面距首页不超过 3 次点击
  • JavaScript 渲染:检查关键内容是否需要执行 JS(方法见第 8 节)
  • 抓取预算:对于大型网站(>10k 个页面),抓取效率很重要
  • Googlebot 抓取限制:Googlebot 抓取前 2MB 的 HTML 和前 64MB 的 PDF(未压缩;15MB 是更广泛的爬虫基础设施默认值)。这项限制已长期存在,并非 2026 年的新变化;但内联 base64 图片、超大的内联 CSS/JS 或臃肿的导航可能会使关键内容/JSON-LD 超出限制,无法被收录。请确保关键内容和结构化数据位于前 2MB 内。
  • 抓取速率会自动调整(遇到 5xx 错误/响应缓慢时会降低);无法手动控制抓取速率(旧版 Search Console 设置已于 2024 年 1 月移除)。可通过站点地图、服务器响应速度和 robots 控制来影响抓取。
  • Google 的规范抓取/robots 参考文档已迁移至 developers.google.com/crawling(迁移日期:2025-11-20);IP 范围文件已移至 /crawling/ipranges/,且 googlebot.json 已重命名为 common-crawlers.json。
  • AMP 不具备单独的排名优势。自 2026-07-01 起,Google 搜索会将用户直接引导至由发布者托管的 AMP URL,因此不应建议维护 AMP Cache、AMP Viewer 或 signed exchange。审核 AMP 时,应确保其符合与其他页面相同的内容、操作一致性和质量要求。
AI 爬虫管理

截至 2025-2026 年,AI 公司会主动抓取网络内容来训练模型并支持 AI 搜索。通过 robots.txt 管理这些爬虫,是一项重要的技术 SEO 考量。

已知的 AI 爬虫(包含各爬虫对应 robots.txt 行为的权威表格见 seo-geo):

爬虫公司robots.txt 令牌用途
GPTBotOpenAIGPTBot模型训练(不用于 ChatGPT Search)
OAI-SearchBotOpenAIOAI-SearchBotChatGPT Search 的引用资格
ChatGPT-UserOpenAIChatGPT-User实时浏览(由用户触发)
ClaudeBotAnthropicClaudeBot模型训练(不用于 Claude 搜索引用)
Claude-SearchBotAnthropicClaude-SearchBotClaude 搜索结果的引用资格
PerplexityBotPerplexityPerplexityBotPerplexity 搜索索引(不用于模型训练)
BytespiderByteDanceBytespider模型训练
Google-ExtendedGoogleGoogle-ExtendedGemini 训练与 grounding,以及为 Search 生成式 AI 功能提供支持的模型训练(不影响 Search 收录或排名)
Applebot-ExtendedAppleApplebot-Extended选择退出 Apple Intelligence 训练(不影响 Siri/Spotlight/Safari)
CCBotCommon CrawlCCBot开放数据集

重要区别:

  • 屏蔽 Google-Extended 会阻止 Gemini 训练和 grounding 使用(以及为 Search 生成式 AI 功能提供支持的模型训练),但不会影响 Google Search 索引或 AI Overviews(它们使用 Googlebot)
  • 屏蔽 GPTBot 会阻止 OpenAI 训练,但不会影响 ChatGPT Search 的引用资格,后者由 OAI-SearchBot 控制;也不会影响由用户触发的浏览(ChatGPT-User)。任何关于引用资格的说法都应查看 OAI-SearchBot;GPTBot 状态只能作为训练用途的证据
  • 屏蔽 ClaudeBot 会阻止 Anthropic 模型训练,但不会影响 Claude 自有搜索功能中的引用资格,后者由 Claude-SearchBot 控制(根据 Anthropic 的爬虫支持文章)。任何关于 Claude 搜索引用资格的说法都应查看 Claude-SearchBot;ClaudeBot 状态只能作为训练用途的证据
  • 屏蔽 Applebot-Extended 会选择退出 Apple Intelligence / 生成式模型训练用途,但不会影响通过 Siri、Spotlight 或 Safari 发现内容;这些功能遵循 Applebot 的规则(根据 Apple 的支持文章);Applebot-Extended 本身不会抓取内容

选择性屏蔽 AI 爬虫示例:

# Allow search indexing, block AI training crawlers
User-agent: GPTBot
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: Bytespider
Disallow: /

# Allow all other crawlers (including Googlebot for search)
User-agent: *
Allow: /

建议: 屏蔽前请考虑你的 AI 可见性策略:屏蔽 AI 搜索爬虫会导致网站从该引擎的回答中移除。不要承诺允许爬虫访问就能带来流量。完整的 AI 爬虫/抓取器分类请参阅 seo-geo 技能。

Google 的用户触发型抓取器通常会忽略 robots.txt 规则(其他厂商有所不同:Anthropic 的 Claude-User 会遵守这些规则)。Google 现在将 Google-Agent(用户触发的 Agent 式浏览)、Google-GeminiNotebook(原名 Google-NotebookLM)和 Google Messages 列为用户触发型抓取器,且无法通过 robots.txt 屏蔽。请改用服务器端访问控制。相比之下,Google-Extended 和 Google-CloudVertexBot 会遵守 robots.txt。新兴方案:Web Bot Auth(RFC 9421)允许机器人通过 Signature-Agent 标头和位于 agent.bot.goog 的密钥目录进行加密身份验证(Google-Agent 使用此方案);反向 DNS 验证仍是备用方案。

2. 可索引性
  • 规范标签:指向自身,且不与 noindex 冲突
  • 重复内容:近似重复内容、带参数的 URL、www 与非 www 版本
  • 修复规范化问题可能需要时间:Google 重新评估时,可能会将已修正的页面继续保留在重复内容集群中最长两周。修复后规范 URL 未立即变化,并不意味着修复失败。
  • 内容单薄:低于各类页面最低字数要求的页面
  • 分页:为每个页面提供可抓取的 <a href> 链接(Google 已不再使用 rel=next/prev;该公司于 2019 年宣布了这一点);为每个页面设置指向自身的规范 URL;“加载更多”和无限滚动功能需要提供对应的分页 URL
  • Hreflang:适用于多语言/多地区网站
  • 索引膨胀:不必要的页面占用抓取预算
3. 安全性
  • HTTPS:强制启用、SSL 证书有效、无混合内容
  • 安全标头:
    • Content-Security-Policy (CSP)
    • Strict-Transport-Security (HSTS)
    • X-Frame-Options
    • X-Content-Type-Options
    • Referrer-Policy
  • HSTS 预加载:对于高安全性网站,检查其是否列入预加载列表
  • 后退按钮劫持(违反垃圾内容政策、属于恶意行为):标记通过 history.pushState/replaceState 使后退按钮失效的页面(包括由第三方广告/库平台注入的脚本)。Google 于 2026-04-13 将其纳入垃圾内容政策;自 2026-06-15 起正式执行(包括人工处置和自动降权):应将其视为严重问题。
  • 服务器技术栈 CVE 暴露(仅限只读、经所有者授权的网站):检测网站是否运行存在已知严重 CVE 的服务端技术栈,以便所有者修补或将其下线。通过正常响应中的信息读取技术栈(X-Powered-By、Set-Cookie: PHPSESSID、WordPress wp-json/generator 信号,以及 _next/static 等静态/Node 标记);绝不进行模糊测试或发送漏洞利用载荷,也绝不探测运营者无权控制的网站。当前 PHP 严重 RCE 公告(CVE-2026-109618 / CVE-2026-109619,CVSS 9.2,已在 PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 中修复)、检测信号和报告等级见 references/stack-cve-exposure.md。确认 PHP 版本低于已修复版本时,应视为严重问题;没有 PHP 信号的托管服务或静态主机不受此公告影响。
4. URL 结构
  • 简洁的 URL:描述性强,使用连字符,内容页面不带查询参数
  • 层级:符合网站架构的逻辑文件夹结构
  • 重定向:不得形成链式跳转(最多 1 次跳转),永久迁移使用 301
  • URL 长度:标记超过 100 个字符的 URL
  • 末尾斜杠:保持使用方式一致
5. 移动端优化与页面体验
  • 响应式设计:viewport meta 标签、响应式 CSS
  • 触控目标:WCAG 2.2 AA 要求至少为 24x24 CSS px;带间距的 48x48px 是舒适的建议值(并非 Google 要求)
  • 字体大小:无需缩放即可阅读(16px 基础字号是常见做法,并非 Google 规定)
  • 不出现水平滚动
  • 移动优先索引:Googlebot Smartphone 是主要抓取工具(已于 2024 年完成推广)。并非严格要求提供移动版(Google 称其为“强烈推荐”);无法在移动设备上正常使用的网站仍可能被编入索引,但真正的风险是内容/一致性缺失,而非被彻底排除。
  • 移动端/桌面端内容一致性(价值最高的移动端检查):主要内容等效、robots meta 标签一致、标题/描述一致、结构化数据等效、资源可抓取;避免将需要用户交互才能加载的主要内容设为延迟加载。
  • 侵入式插页广告/广告密度:标记全屏插页广告、独立的同意后重定向页面、持续阻挡内容的对话框,以及过多或分散注意力的广告密度(这是一个具名的页面体验方面)。可接受的情况:小型横幅、标准 CMS/法律声明对话框。
  • “阅读更多”深层链接:确保关键内容在页面加载时立即可见(不要藏在标签页/折叠面板后),加载时不要劫持滚动,并保留 URL 哈希片段;隐藏在可展开部分后的内容较不容易符合要求。

页面体验是指导原则,并非单一的排名系统。只有 Core Web Vitals 会直接影响排名;HTTPS 是已确认但权重较低的信号(Google 在 2014 年宣布时称其权重非常低)。即使页面体验欠佳,相关性仍可能胜出,因此不要过度看重安全标头。注意:Search Console 已移除独立的页面体验报告(通过 Core Web Vitals 和 HTTPS 报告进行监控)。

6. Core Web Vitals
  • LCP(Largest Contentful Paint,最大内容绘制):目标 <=2.5s
  • INP(Interaction to Next Paint,下一次绘制交互):目标 <=200ms
    • INP 于 2024 年 3 月 12 日取代 FID。FID 于 2024 年 9 月 9 日从 Chrome 的现场数据工具(CrUX API、PageSpeed Insights)中移除(Lighthouse 是实验室工具,从未报告 FID)。任何地方都不要提及 FID。
  • CLS(Cumulative Layout Shift,累积布局偏移):目标 <=0.1
  • 使用真实用户数据的第 75 百分位数进行评估
  • 如果 MCP 可用,则使用 PageSpeed Insights API 或 CrUX 数据
7. 结构化数据
  • 检测:JSON-LD(首选)、Microdata、RDFa
  • 根据 Google 支持的类型进行验证
  • 完整分析请参阅 seo-schema skill
8. JavaScript 渲染
  • 方法:"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run agentic_check.py <url> --json 会报告原始 HTML 中可见的字数(server-rendered);Chromium 可用时,可与 render_page.py <url> --mode always --json 的结果进行比较。如果没有 Chromium,则报告原始 HTML 的结果,并说明未比较渲染后的内容。
  • 检查内容是在初始 HTML 中可见,还是需要 JavaScript
  • 识别客户端渲染(CSR)与服务器端渲染(SSR)
  • 标记可能导致索引问题的 SPA 框架(React、Vue、Angular)
  • 如果检测到动态渲染,将其标记为技术债务,而非有效配置。 Google 将其称为“一种变通方法,并非推荐的解决方案”,因为它会增加 复杂性和资源成本。 请参阅 https://developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering

推荐的渲染策略:

策略使用场景
SSR面向公众的 SEO 内容、动态页面
SSG静态内容、博客、文档
CSR仅限已通过身份验证/需要登录的内容

首选框架: Next.js、Astro、React Router v7 (Remix)、SvelteKit

JavaScript SEO:规范链接与索引指南(2025 年 12 月)

Google 于 2025 年 12 月更新了 JavaScript SEO 文档,并对以下内容作出了重要说明:

  1. **规范链接冲突:**如果原始 HTML 中的规范链接标签与 JavaScript 注入的标签不同,Google 可能会采用其中任意一个。请确保服务器渲染的 HTML 与 JS 渲染的输出中的规范链接标签完全一致。
  2. **JavaScript 与 noindex:**如果原始 HTML 中包含 <meta name="robots" content="noindex">,但 JavaScript 将其移除,Google 仍可能遵循原始 HTML 中的 noindex 指令。请在初始 HTML 响应中提供正确的 robots 指令。
  3. **非 200 状态码:**对于返回非 200 HTTP 状态码的页面,Google 不会渲染 JavaScript。通过 JS 在错误页面中注入的任何内容或 meta 标签,Googlebot 都无法看到。
  4. **JavaScript 中的结构化数据:**通过 JS 注入的 Product、Article 和其他结构化数据可能会延迟处理。对于有时效性的结构化数据(尤其是电商 Product 标记),请将其包含在初始服务器渲染的 HTML 中。

**最佳实践:**请在初始服务器渲染的 HTML 中提供关键的 SEO 元素(规范链接、meta robots、结构化数据、标题、meta 描述),而不是依赖 JavaScript 注入。

9. IndexNow 协议
  • 检查网站是否支持 Bing、Yandex 和 Naver 的 IndexNow
  • 除 Google 以外的搜索引擎也支持该协议
  • 建议实施该协议,以加快网站在非 Google 搜索引擎中的索引速度

Agent 友好页面与 Agent 式浏览

Agent 就绪度有自己的子技能:/seo agentic <url>(seo-agentic)。 该子技能负责 Lighthouse 的 Agent 式浏览类别(以分数占比表示,即 X/N,而非 0 到 100 的分数)、面向 Agent 的无障碍树、AI Agent 访问策略、llms.txt、Markdown 交付、ai-catalog.json、/.well-known 发现文件,以及 WebMCP。在技术审计期间,只记录以下两项信号,其余内容请参阅 seo-agentic:

  • JS 渲染:如果原始 HTML 中缺少主要内容,不运行 JavaScript 的 Agent 也无法看到这些内容。
  • robots.txt 返回 5xx;遵循规范的爬虫会将其视为“禁止访问所有内容”。
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run agent_ux_check.py https://example.com --json

上方的 Agent-UX 0-100 分数是一种本地启发式指标。请将其与 Lighthouse 分数占比区分开来,并将其结果作为优化机会呈现,而非失败项。Lighthouse 的 agent-accessibility-tree 审计未通过则是另一回事:seo-agentic 将其评为 P0,因为这是 Google 自行测量的检查项。

输出

技术分数:XX/100

仅对已测量的内容评分。每个类别的分数表示该类别中通过的检查所占比例,并根据严重程度进行调整;无法测量的类别应标记为“未测量”,不得给出数字。列出每个分数对应的检查项。

类别明细
类别状态分数
可抓取性pass/warn/failXX/100
可索引性pass/warn/failXX/100
安全性pass/warn/failXX/100
URL 结构pass/warn/failXX/100
移动端pass/warn/failXX/100
Core Web Vitalspass/warn/failXX/100
结构化数据pass/warn/failXX/100
JS 渲染pass/warn/failXX/100
IndexNowpass/warn/failXX/100
严重问题(立即修复)
高优先级(1 周内修复)
中优先级(1 个月内修复)
低优先级(纳入待办)

DataForSEO 集成(可选)

如果有可用的 DataForSEO MCP 工具,请使用 on_page_instant_pages 进行实际页面分析(状态码、页面耗时、失效链接、页面检查),使用 on_page_lighthouse 进行 Lighthouse 审计(性能、无障碍、SEO 分数),并使用 domain_analytics_technologies_domain_technologies 检测技术栈。

Google API 集成(可选)

如果已配置 Google API 凭据,可使用 "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run pagespeed_check.py <url> --json 获取真实的 PSI + CrUX 字段数据(替代仅实验室数据的 CWV 估算),使用 "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run crux_history.py <url> --form-factor PHONE --json 获取 25 周的 CWV 趋势(使用 PHONE:所有设备视图可能会掩盖移动设备上的问题),并使用 "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run gsc_inspect.py <url> --json 获取每个 URL 的真实索引状态。

审计本地或私有主机

url_safety 默认会拒绝环回地址和私有地址,因此 http://localhost:3000 和 Tailscale 上的预发布主机都会报错:“Blocked hostname” 或 “Blocked IP literal”。这是刻意设置的默认行为:这些脚本会访问在抓取页面上发现的 URL。

若要审计部署前的主机,操作人员需在 CLAUDE_SEO_LOCAL_TARGETS 中指定该主机。这是一个以逗号分隔的 host 或 host:port 条目列表:

CLAUDE_SEO_LOCAL_TARGETS="localhost:3000,127.0.0.1:8080,100.101.102.103" \
  "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run fetch_page.py http://localhost:3000/

允许列表主机的适用范围:

行为允许列表中的主机
通过原始 HTTP 访问的首个顶层 URL允许
从该 URL 跳转到的目标拒绝
渲染页面获取的子资源拒绝
Playwright 渲染(--render、截图)拒绝;请使用原始 HTTP 路径
未在变量中指定的主机拒绝
云元数据端点,即使已列出拒绝

host:port 仅匹配该端口;单独的 host 则匹配任意端口。未设置该变量时,策略保持不变。切勿建议用户为其不控制的主机设置该变量。请参阅 SECURITY.md。

错误处理

场景操作
URL 无法访问报告连接错误及状态代码。建议验证 URL、检查 DNS 解析,并确认网站可公开访问。
未找到 robots.txt说明根域名下未检测到 robots.txt。建议创建一个并设置适当的指令。继续审计其余类别。
未配置 HTTPS标记为严重问题。报告 HTTP 是否未重定向就直接提供服务、是否存在混合内容,或 SSL 证书是否缺失/过期。
Core Web Vitals 数据不可用说明 CrUX 数据不可用(低流量网站较常见)。建议使用 Lighthouse 实验室数据作为替代,并建议增加流量后重新测试。

评论

支持 Markdown