9.6 KiB
---
name: seo-technical
description: >
涵盖 9 大类的技术 SEO 审计:可爬取性、可索引性、安全性、URL 结构、移动端、Core Web Vitals、结构化数据、JavaScript 渲染和 IndexNow 协议。当用户提到"技术 SEO"、"爬取问题"、"robots.txt"、"Core Web Vitals"、"网站速度"或"安全标头"时使用。
user-invokable: true
argument-hint: "[url]"
license: MIT
metadata:
author: AgriciDaniel
version: "2.0.0"
category: seo
---
技术 SEO 审计
类别
1. 可爬取性
- robots.txt:存在、有效、未屏蔽重要资源
- XML 站点地图:存在、在 robots.txt 中被引用、格式有效
- Noindex 标签:有意的与无意的区分
- 爬取深度:重要页面在首页 3 次点击以内可达
- JavaScript 渲染:检查关键内容是否需要 JS 执行
- 爬取预算:大型网站(超过 1 万个页面)的效率尤为重要
AI 爬虫管理
截至 2025-2026 年,AI 公司正在积极爬取网页以训练模型和为 AI 搜索提供支持。通过 robots.txt 管理这些爬虫是一项关键的技术 SEO 考量。
已知的 AI 爬虫:
| 爬虫 | 所属公司 | robots.txt 令牌 | 用途 |
|---|---|---|---|
| GPTBot | OpenAI | GPTBot |
模型训练 |
| ChatGPT-User | OpenAI | ChatGPT-User |
实时浏览 |
| ClaudeBot | Anthropic | ClaudeBot |
模型训练 |
| PerplexityBot | Perplexity | PerplexityBot |
搜索索引 + 训练 |
| Bytespider | ByteDance | Bytespider |
模型训练 |
| Google-Extended | Google-Extended |
Gemini 训练(非搜索) | |
| CCBot | Common Crawl | CCBot |
开放数据集 |
关键区别:
- 屏蔽
Google-Extended可防止 Gemini 训练使用,但不会影响 Google 搜索索引或 AI Overviews(这些使用Googlebot) - 屏蔽
GPTBot可防止 OpenAI 训练,但不会阻止 ChatGPT 通过浏览功能引用你的内容(ChatGPT-User) - 约 3-5% 的网站现已使用 AI 专用的 robots.txt 规则
选择性屏蔽 AI 爬虫的示例:
# 允许搜索索引,屏蔽 AI 训练爬虫
User-agent: GPTBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Bytespider
Disallow: /
# 允许所有其他爬虫(包括用于搜索的 Googlebot)
User-agent: *
Allow: /
建议: 在屏蔽之前,请考虑你的 AI 可见性策略。被 AI 系统引用可以提升品牌知名度和引荐流量。请参考 seo-geo 技能以获取完整的 AI 可见性优化方案。
2. 可索引性
- Canonical 标签:自引用,不与 noindex 冲突
- 重复内容:近似重复、参数 URL、www 与非 www
- 内容单薄:各类型页面低于最低字数要求的页面
- 分页:rel=next/prev 或加载更多模式
- Hreflang:多语言/多区域网站配置正确
- 索引膨胀:不必要的页面消耗爬取预算
3. 安全性
- HTTPS:已启用、有效的 SSL 证书、无混合内容
- 安全标头:
- Content-Security-Policy (CSP)
- Strict-Transport-Security (HSTS)
- X-Frame-Options
- X-Content-Type-Options
- Referrer-Policy
- HSTS preload:检查高安全性站点是否已纳入 preload 列表
4. URL 结构
- 简洁 URL:描述性、连字符分隔、内容页面无查询参数
- 层级结构:反映站点架构的逻辑文件夹结构
- 重定向:无链式重定向(最多 1 跳),永久移动使用 301
- URL 长度:标记超过 100 个字符的 URL
- 尾部斜杠:使用保持一致
5. 移动端优化
- 响应式设计:viewport meta 标签、响应式 CSS
- 触摸目标:最小 48x48px,间距 8px
- 字体大小:最小基础字号 16px
- 无水平滚动
- 移动端优先索引:Google 索引移动版。截至 2024 年 7 月 5 日,移动端优先索引已 100% 完成。 Google 现在仅使用移动端 Googlebot 用户代理爬取和索引所有网站。
6. Core Web Vitals
- LCP(最大内容绘制):目标 <2.5s
- INP(下一次交互的响应时间):目标 <200ms
- INP 于 2024 年 3 月 12 日取代 FID。FID 已于 2024 年 9 月 9 日从所有 Chrome 工具(CrUX API、PageSpeed Insights、Lighthouse)中完全移除。请勿在任何地方引用 FID。
- CLS(累计布局偏移):目标 <0.1
- 评估使用真实用户数据的第 75 百分位数
- 如果 MCP 可用,使用 PageSpeed Insights API 或 CrUX 数据
7. 结构化数据
- 检测:JSON-LD(推荐)、Microdata、RDFa
- 对照 Google 支持的类型进行验证
- 完整分析请参见 seo-schema 技能
8. JavaScript 渲染
- 检查内容是出现在初始 HTML 中还是需要 JS
- 识别客户端渲染 (CSR) 与服务器端渲染 (SSR)
- 标记可能导致索引问题的 SPA 框架(React、Vue、Angular)
- 如适用,验证动态渲染设置
JavaScript SEO:Canonical 与索引指南(2025 年 12 月)
Google 于 2025 年 12 月更新了其 JavaScript SEO 文档,带来了关键性的澄清:
- Canonical 冲突: 如果原始 HTML 中的 canonical 标签与 JavaScript 注入的不同,Google 可能使用其中任意一个。确保 canonical 标签在服务端渲染的 HTML 和 JS 渲染的输出中保持一致。
- 通过 JavaScript 使用 noindex: 如果原始 HTML 包含
<meta name="robots" content="noindex">但 JavaScript 将其移除,Google 仍可能遵循原始 HTML 中的 noindex 指令。请在初始 HTML 响应中提供正确的 robots 指令。 - 非 200 状态码: Google 不会在返回非 200 HTTP 状态码的页面上渲染 JavaScript。通过 JS 在错误页面上注入的任何内容或 meta 标签对 Googlebot 均不可见。
- JavaScript 中的结构化数据: 通过 JS 注入的 Product、Article 和其他结构化数据可能面临延迟处理。对于时间敏感的结构化数据(尤其是电商 Product 标记),请将其包含在初始服务端渲染的 HTML 中。
最佳实践: 在初始服务端渲染的 HTML 中提供关键的 SEO 元素(canonical、meta robots、结构化数据、title、meta description),而不是依赖 JavaScript 注入。
9. IndexNow 协议
- 检查网站是否支持 IndexNow(用于 Bing、Yandex、Naver)
- 受除 Google 以外的搜索引擎支持
- 建议在非 Google 搜索引擎上实施以实现更快的索引
对 AI 代理友好的页面(前瞻性)
AI 代理(不仅仅是 AI 摘要生成器)越来越多地通过三种渠道读取网站:基于截图的视觉模型、原始 HTML/DOM 以及无障碍树(最清晰的信号)。审计标准——语义 HTML(真正的 <button> 和 <a>,而不是 <div onclick>)、标签关联、交互目标尺寸、跨模板的布局稳定性、cursor: pointer 的正确性——记录在 references/agent-friendly-pages.md 中。
审计命令
# 使用 Playwright 渲染 + 捕获无障碍树,然后评分
python scripts/agent_ux_check.py https://example.com --json
扫描器输出 Agent-UX 分数(0-100)以及逐项列出的问题:
- HTML 发现:真正的按钮/锚点、
<div onclick>小部件、语义地标、缺少<label for>的输入框、缺少 ARIA 标签的输入框 - 无障碍树发现:总节点数、交互式节点数、未命名的交互式元素、
role="generic"比例
无障碍树快照使用 Playwright 的 page.accessibility.snapshot(interesting_only=False)。如需捕获无障碍树而不评分,请使用 python scripts/render_page.py <url> --a11y-tree --json。
将发现呈现为机会,而非失败。相关标准(WebMCP、代理 UX 启发式方法)仍处于早期阶段——不要以满分 100 作为审计门槛。
输出
技术评分:XX/100
类别细分
| 类别 | 状态 | 评分 |
|---|---|---|
| 可爬取性 | pass/warn/fail | XX/100 |
| 可索引性 | pass/warn/fail | XX/100 |
| 安全性 | pass/warn/fail | XX/100 |
| URL 结构 | pass/warn/fail | XX/100 |
| 移动端 | pass/warn/fail | XX/100 |
| Core Web Vitals | pass/warn/fail | XX/100 |
| 结构化数据 | pass/warn/fail | XX/100 |
| JS 渲染 | pass/warn/fail | XX/100 |
| IndexNow | pass/warn/fail | XX/100 |
严重问题(立即修复)
高优先级(1 周内修复)
中优先级(1 个月内修复)
低优先级(待办清单)
DataForSEO 集成(可选)
如果 DataForSEO MCP 工具可用,使用 on_page_instant_pages 进行实时页面分析(状态码、页面耗时、失效链接、页面检查),使用 on_page_lighthouse 进行 Lighthouse 审计(性能、无障碍、SEO 评分),使用 domain_analytics_technologies_domain_technologies 进行技术栈检测。
Google API 集成(可选)
如果已配置 Google API 凭据,使用 python scripts/pagespeed_check.py <url> --json 获取真实的 PSI + CrUX 字段数据(替代仅限实验室的 CWV 估算),使用 python scripts/crux_history.py <url> --json 获取 25 周的 CWV 趋势,使用 python scripts/gsc_inspect.py <url> --json 获取每个 URL 的真实索引状态。
错误处理
| 场景 | 操作 |
|---|---|
| URL 不可达 | 报告连接错误并附上状态码。建议验证 URL、检查 DNS 解析、确认网站可公开访问。 |
| 未找到 robots.txt | 注明在根域名未检测到 robots.txt。建议创建包含适当指令的 robots.txt。继续对剩余类别进行审计。 |
| 未配置 HTTPS | 标记为严重问题。报告是否存在无重定向的 HTTP 服务、混合内容、或 SSL 证书缺失/过期。 |
| Core Web Vitals 数据不可用 | 注明 CrUX 数据不可用(低流量网站常见)。建议使用 Lighthouse 实验室数据作为替代,并建议增加流量后重新测试。 |