IF
IndexFlowing
/ Docs
🌐 English Docs GitHub ↗

2. 技术 SEO 与 GEO 质量门

技术 SEO 与 GEO 质量门会在 URL 进入搜索引擎提交队列前执行预检,阻止损坏页面、配置错误的索引标签和 canonical 冲突,避免浪费爬取预算。


硬门决策规则(passed = false)

页面违反以下任一核心规则时,会获得 seo_status = 'FAIL' 和具体 block_reason,并被严格禁止进入外部搜索引擎提交队列:

┌──────────────────────────────────────────────────────────────┐
│                    Pre-Flight SEO Gate                       │
├──────────────────────────────────────────────────────────────┤
│ 1. HTTP Status Code  ─── Must be 200 OK (3xx, 4xx, 5xx FAIL) │
│ 2. Noindex Directive ─── No noindex in Meta or X-Robots-Tag  │
│ 3. Canonical Tag     ─── Canonical URL must match Page URL   │
│ 4. Page Title        ─── Non-empty <title> tag required      │
└──────────────────────────────────────────────────────────────┘

1. HTTP 状态检查

  • 规则:URL 必须返回精确的 200 OK 状态。
  • 重定向即失败:IndexFlow 不跟随重定向探测 URL(redirect::Policy::none())。301 或 302 会以 HTTP 301 / HTTP 302 使检查失败,因为 sitemap 只能列出最终 canonical 目标 URL。

2. noindex 指令

  • 规则:响应不得指示爬虫跳过索引。
  • 检查点:<meta name="robots" content="noindex">、<meta name="googlebot" content="noindex">、<meta http-equiv="robots" content="noindex">、HTTP header:X-Robots-Tag: noindex 或 X-Robots-Tag: none。

3. Canonical URL 等价性(canonical_matches_page)

  • 规则:声明的 <link rel="canonical" href="..."> 必须解析为被检查的页面 URL。
  • 规范化规则:scheme 和 hostname 转为小写;移除默认端口;解析相对路径和协议相对路径;规范化 . 与 ..;解码 UTF-8 百分号编码路径;去除尾部斜杠(根路径除外);去除 URL fragment;按 key 和 value 排序查询参数;URL 路径按 RFC 3986 保持大小写敏感。

4. 页面标题标签存在性

  • 规则:HTML 文档必须在 <script> 或注释块外包含非空的 <title>...</title> 元素。

软警告与优化信号(seo_status = 'WARN')

页面通过四条硬门规则后,IndexFlow 会评估 SEO 和 GEO(生成式引擎优化)信号。如发现问题,URL 标记为 seo_status = 'WARN',仍可进入推送队列并携带提示性警告。

信号 评估标准 警告消息
标题结构 可见 <h1> 数量 缺少 H1 标题 或 存在 N 个 H1 标签,建议仅保留一个
Robots Nofollow 检查 meta 或 header 中的 nofollow 页面带有 nofollow 指令
AI Bot 指令 检查 AI 搜索爬虫是否被阻断 屏蔽了以下 AI 爬虫: GPTBot, ClaudeBot...
OpenGraph 元数据 缺少 og:title、og:image、og:type 等 缺少 OpenGraph 社交分享标签
Twitter Card 缺少 <meta name="twitter:card"> 缺少 Twitter Card 标记
结构化数据 缺少 <script type="application/ld+json"> 缺少结构化数据 (JSON-LD)
移动视口 缺少 <meta name="viewport"> 缺少 viewport 移动适配标签
语言标签 缺少 <html lang="..."> 未声明 <html lang> 页面语言
图片无障碍 没有非空 alt 的 <img> 数量 N 张图片缺失 alt 属性
Meta Description 缺失或字符数不在 50..=160 缺少 meta description 或 meta description 长度不合适
标题长度 字符数 > 60 page title 长度过长,可能被截断

GEO 与 AI 爬虫审计

IndexFlow 跟踪主要 GEO bot 的索引和训练权限:

AI Crawler Target Directive Tokens Impact
OpenAI GPTBot name="gptbot"、name="chatgpt-user"、X-Robots-Tag: gptbot: noindex 影响 ChatGPT 搜索中的索引。
Anthropic ClaudeBot name="claudebot"、name="anthropic-ai"、name="claude-web" 影响 Claude 中的索引和引用。
PerplexityBot name="perplexitybot"、name="perplexity" 影响 Perplexity AI 的实时引用。
Google-Extended name="google-extended"、X-Robots-Tag: google-extended: noai 影响 Gemini 训练和 AI Overview 引用。

Schema.org 结构化数据提取

引擎提取 JSON-LD 块并解析所有声明的 @type 实体,包括 @graph 树和数组类型声明。


并发与探测引擎

  • 并发:SeoAuditWorker 通过 tokio::sync::Semaphore 最多运行 30 个并发审计任务。
  • 负载安全上限:响应体以 5 MiB 硬上限(MAX_HTML_BODY)流式读取;声明 Content-Length > 20 MiB 的响应跳过解析。
  • 自定义爬虫 UA:自动追加站点的 custom_user_agent token,以绕过 Cloudflare Bot Fight Mode。

执行技术 SEO 审计

通过 Web 控制台触发审计流水线

进入 /seo 并点击 Run SEO Audit。

通过 REST API 审计单个 URL

curl -X POST "https://www.indexflowing.com/docs/api/v1/urls/101/inspect?engine=seo" \
  -H "Cookie: if_token=<YOUR_JWT_TOKEN>"

批量审计多个 URL

curl -X POST "https://www.indexflowing.com/docs/api/v1/urls/batch-inspect" \
  -H "Content-Type: application/json" \
  -H "Cookie: if_token=<YOUR_JWT_TOKEN>" \
  -d '{
    "selected_ids": [101, 102, 103],
    "engine": "seo"
  }'