claude-seo 索引状态报告:基于 Google Search Console URL Inspection API 的批量索引审计模板与实战指南
【免费下载链接】claude-seo
Universal SEO skill for Claude Code. 26 sub-skills + 19 sub-agents covering technical SEO, E-E-A-T, schema, GEO/AEO, agent readiness (Lighthouse Agentic Browsing, WebMCP, llms.txt), backlinks, local SEO, e-commerce, international SEO, Google APIs, and PDF/Excel reporting. 9 optional extensions for live SEO data.
导读
本文围绕 claude-seo 项目中用于生成 URL 索引状态报告的官方模板(skills/seo-google/assets/templates/indexation-status-report.md)展开,说明该模板如何承接 Search Console URL Inspection API 的实时数据,将"URL 是否被 Google 索引"这一核心事实结构化为可读、可交接、可归档的报告。读完本文,你将掌握从批量 URL 检查(gsc_inspect.py)到索引报告生成(google_report.py --type indexation)的完整调用链,理解 PASS/FAIL/NEUTRAL 判定、canonical 冲突、常见索引问题等字段的业务含义,并能直接套用模板产出标准化的索引审计报告。
一、模板定位:把"索引事实"变成可交付报告
在 SEO 工作流中,"某个 URL 到底有没有被 Google 索引"是一个必须由 Google 官方数据回答的问题。claude-seo 的 seo-google 技能用 Search Console URL Inspection API 获取这一事实,而本模板则负责把 API 返回的原始 JSON 转译为人类可读的 Markdown 报告。
模板的核心数据流是:
- 通过
scripts/gsc_inspect.py对单条或批量 URL 发起 URL Inspection 请求; - 拿到包含
verdict(PASS/FAIL/NEUTRAL 等)、coverage state、canonical、rich results 的结构化结果; - 按本模板的六个区块(Summary、Detailed Results、Canonical Mismatches、Common Issues、Rich Results Detected)组织输出;
- 可选地交给
scripts/google_report.py --type indexation生成带环形图(donut chart)的 PDF 报告。
技能文档在 skills/seo-google/SKILL.md 中明确了一个重要原则:Sitemaps 只能告诉你"提交了多少 URL",URL Inspection API 才是索引状态的"事实来源"(indexation truth)。本模板正是这一原则在交付层的落地——它记录的不是"我们提交了多少",而是"Google 实际收录了多少"。
二、模板骨架逐节解析
模板全文共 42 行,结构紧凑,共六个数据区块外加页脚。下面逐节说明其业务含义与填写方式。
1. 头部元信息
**Property:** {property} **URLs Inspected:** {total_urls}Property:被检查的 Search Console 资源,格式为sc-domain:example.com或https://www.example.com/。gsc_inspect.py在未显式传--site-url时,会从配置文件~/.config/claude-seo/google-api.json的default_property字段读取(见 scripts/gsc_inspect.py)。URLs Inspected:本批次实际检查的 URL 总数。需要特别注意批量上限:gsc_inspect.py中定义了DAILY_LIMIT = 2000,超过该数量的批次会被截断并给出警告(见 scripts/gsc_inspect.py)。
2. Summary 汇总表
| Status | Count | Percentage |
|---|---|---|
| Indexed (PASS) | {pass_count} | {pass_pct}% |
| Not Indexed (FAIL) | {fail_count} | {fail_pct}% |
| Neutral | {neutral_count} | {neutral_pct}% |
| Errors | {error_count} | {error_pct}% |
这四类统计与gsc_inspect.py中batch_inspect()的 summary 逻辑一一对应(见 scripts/gsc_inspect.py):
- Indexed (PASS):API 返回的
verdict == "PASS",即该 URL 已被 Google 索引; - Not Indexed (FAIL):
verdict == "FAIL",未被索引,需在 Detailed Results 中定位原因; - Neutral:
verdict为NEUTRAL或其他非 PASS/FAIL 值(如VERDICT_UNSPECIFIED、PARTIAL); - Errors:请求本身失败(权限不足、限流、URL 不属于该资源等),此时
inspection.get("error")非空。
Percentage 建议按count / total_urls * 100计算并保留一位小数。在 PDF 生成端,google_report.py还会额外给出索引率(Index Rate),并按阈值着色:≥90% 显示为 success-box(绿色),70%–90% 为 highlight,低于 70% 为 critical-box(红色),实现一眼判断健康度(见 scripts/google_report.py)。
3. Detailed Results 明细表
| URL | Verdict | Coverage State | Fetch State | Google Canonical | Last Crawl |
|---|
这是全报告信息密度最高的表。每一行对应gsc_inspect.py中inspect_url()返回的一个结果对象,其字段直接映射到 URL Inspection API 的indexStatusResult(参见 skills/seo-google/references/search-console-api.md):
| 模板列 | API 字段 | 典型取值 | 说明 |
|---|---|---|---|
| Verdict | verdict | PASS/FAIL/NEUTRAL/PARTIAL/VERDICT_UNSPECIFIED | 整体索引判定 |
| Coverage State | coverageState | 人类可读的覆盖状态描述 | 如 "Submitted and indexed" / "Crawled - currently not indexed" 等 |
| Fetch State | pageFetchState | SUCCESSFUL/SOFT_404/NOT_FOUND/BLOCKED_ROBOTS_TXT/ACCESS_DENIED/SERVER_ERROR/REDIRECT_ERROR/BLOCKED_4XX等 | 抓取阶段失败原因 |
| Google Canonical | googleCanonical | URL 字符串 | Google 实际选定的 canonical |
| Last Crawl | lastCrawlTime | ISO 8601 时间戳 | 最近一次抓取时间 |
gsc_inspect.py还会解析robotsTxtState(ALLOWED/DISALLOWED)、indexingState(INDEXING_ALLOWED/BLOCKED_BY_META_TAG/BLOCKED_BY_HTTP_HEADER)、crawledAs(DESKTOP/MOBILE)与referringUrls,这些字段在排查 FAIL 时可作为辅助证据(见 scripts/gsc_inspect.py)。
4. Canonical Mismatches 冲突清单
| URL | User Canonical | Google Canonical |
|---|
此区块专门列出用户声明的 canonical 与 Google 选定的 canonical 不一致的 URL。判定逻辑在gsc_inspect.py中实现:match = googleCanonical == userCanonical,当两边都非空且不相等时即为冲突(见 scripts/gsc_inspect.py)。
Canonical 冲突通常是以下原因之一:
- 页面声明的 canonical 指向 301 重定向链路的中间跳;
- 两个页面互相声明对方为 canonical(循环引用);
- 站点未声明 canonical,Google 自行推断(此时 userCanonical 可能为空,需在报告中标注为 N/A 并人工核对);
- 参数化 URL 处理不当,导致 Google 合并了不同的 URL 变体。
冲突列表应单独成表,因为它在优先级上高于一般的 FAIL 明细——即使一个 URL 已通过 PASS,canonical 错误也可能导致流量和排名信号流向错误的页面。
5. Common Issues 问题聚合表
| Issue | Count | Priority | Action |
|---|
该表把 Detailed Results 中的 FAIL 按根因聚合。建议从以下维度归类(与 URL Inspection API 返回的状态字段对应):
| Issue 归类 | 对应 API 信号 | 建议 Action |
|---|---|---|
| robots.txt 屏蔽 | robotsTxtState = DISALLOWED或pageFetchState = BLOCKED_ROBOTS_TXT | 检查 robots.txt 规则是否误伤;如需收录则放行 |
| noindex 屏蔽 | indexingState = BLOCKED_BY_META_TAG/BLOCKED_BY_HTTP_HEADER | 移除 noindex 标签或 X-Robots-Tag 响应头 |
| 软 404 | pageFetchState = SOFT_404 | 返回真正的 404/410 或补全内容 |
| 抓取失败 | pageFetchState = SERVER_ERROR/REDIRECT_ERROR | 检查服务器可用性与重定向配置 |
| 权限问题 | pageFetchState = ACCESS_DENIED/ACCESS_FORBIDDEN | 检查鉴权、防火墙、验证码 |
| 发现但未收录 | coverageState = Crawled - currently not indexed | 提升页面质量与内链权重,配合 Indexing API(限 JobPosting/VideoObject 等类型) |
Priority 字段建议使用 High / Medium / Low 三级:能直接解释大量 FAIL 的根因(如全站 noindex)为 High,偶发的抓取错误为 Medium,单一页面问题为 Low。
6. Rich Results Detected 富结果清单
| URL | Rich Result Type | Status |
|---|
此区块来自 API 的richResultsResult对象。gsc_inspect.py会解析detectedItems,输出每个检测到的富结果类型(如 FAQPage、HowTo、Product 等)及其包含的条目与问题列表(见 scripts/gsc_inspect.py)。这可以帮助你判断结构化数据是否真正被 Google 识别,而不仅是"验证通过"。
7. 页脚:数据边界与时效
*URL Inspection API: 2,000 inspections/day per site, 600/min.* *Generated {timestamp} via Google Search Console URL Inspection API.*页脚是报告严谨性的体现:
- 明确数据来源为 GSC URL Inspection API;
- 提示配额边界:每站点每天 2,000 次、每分钟 600 次。更完整的配额表见 skills/seo-google/references/rate-limits-quotas.md(项目级上限为 10,000,000 QPD / 15,000 QPM,可在多个站点间共享);
- 记录生成时间戳,方便日后对比多轮审计结果,观察索引状态随时间的变化。
三、数据生产链路:从命令到模板的完整调用链
模板不是手工填写的,而是由命令链自动产出的。完整的链路如下:
步骤 1:单条检查(用于快速验证)
python3 scripts/gsc_inspect.py https://example.com/page --json不带--site-url时会读取配置中的default_property。单条模式的终端输出会展示 Verdict、Coverage、Robots.txt、Indexing、Page Fetch、Last Crawl、Canonical 及 Rich Results 等信息(见 scripts/gsc_inspect.py)。
步骤 2:批量检查(用于生成报告)
python3 scripts/gsc_inspect.py --batch urls.txt --site-url sc-domain:example.com --json > inspect-data.json批量模式要求urls.txt每行一个 URL。脚本内置两层保护:
- 日配额截断:超过 2,000 个 URL 时自动截断并告警;
- 节流延迟:默认每次请求间隔
delay=1.0秒(可用--delay调整),把请求速率压到 600 QPM 限值以内(见 scripts/gsc_inspect.py)。
批量结果 JSON 中的summary字段结构为{pass, fail, neutral, error}四个计数,正是模板 Summary 表的数据来源。
步骤 3:生成 PDF 报告(可选增强)
python3 scripts/google_report.py --type indexation --data inspect-data.json --domain example.comgoogle_report.py的indexation报告类型会渲染一个"Indexation Status"章节(见 scripts/google_report.py),包括:
- 由
chart_index_status()生成的索引状态环形图,四象限配色(绿=Indexed、红=Not Indexed、灰=Neutral、暗=Error),中心标注 URL 总数(见 scripts/google_report.py); - Indexed / Not Indexed 两张指标卡(metric card);
- 索引率及分级着色提示;
- 逐 URL 结果表(URL、Verdict、Coverage State、Last Crawl)。
技能层面对应命令为/seo google inspect-batch <file>与/seo google report indexation,完整工作流参见 skills/seo-google/SKILL.md 的 Reports 一节。
四、判定口径与字段语义:为什么不能只看 Verdict
报告的价值在于"可解释的失败",而不仅是"失败的个数"。模板的 Detailed Results 表保留 Coverage State 与 Fetch State 两列,正是为了区分以下常见场景:
- FAIL + Blocked by robots.txt:不是内容问题,是抓取策略问题;
- FAIL + Soft 404:页面存在但返回 200,内容不足以被识别为有效页面;
- FAIL + Crawled - currently not indexed:Google 已抓取但认为质量/权重不足,需要内容与外链层面提升;
- FAIL + Server error:纯技术故障,修复服务器即可;
- NEUTRAL:判定未明确(如刚提交或正在处理),不应等同于失败。
这些区分直接决定 Common Issues 表中 Action 列的写法。只有把 Verdict 与 Coverage State / Fetch State 组合阅读,报告才能指导下一步具体操作,而不是停留于"有 N 个 URL 没被收录"。
另一个容易误读的点:CrUX 的 404 与 URL Inspection 的 404 语义不同。URL Inspection 的NOT_FOUND表示 URL 本身返回 404;而 CrUX API 的 404 表示流量不足、无数据——两者不要混用(参见 skills/seo-google/SKILL.md 的 Technical Notes)。
五、配额、认证与错误处理:保证审计跑得完、跑得准
认证前置条件
URL Inspection API 需要服务账号(Service Account)而非仅 API Key,对应 seo-google 技能的 Tier 1。认证步骤见 skills/seo-google/references/auth-setup.md:创建 GCP 项目 → 启用 Google Search Console API → 创建服务账号 → 在 GSC 的"设置 > 用户和权限"中添加服务账号的client_email(读权限设为 Full 即可,使用 Indexing API 才需要 Owner)。
配额约束速查
| 维度 | 限额 |
|---|---|
| 每站点每日(QPD) | 2,000 次 |
| 每站点每分钟(QPM) | 600 次 |
| 每项目每日(QPD) | 10,000,000 次 |
| 每项目每分钟(QPM) | 15,000 次 |
"Per site" 与 "Per project" 的差别很关键:2,000/天是按 GSC 资源维度计算,10M/天是按 GCP 项目维度共享。如果你的 GCP 项目下有多个 GSC 资源,总额度是 10M,但每个站点单独受 2,000/天约束(见 skills/seo-google/references/rate-limits-quotas.md)。
常见错误与处理
gsc_inspect.py对三类高频错误做了内建识别(见 scripts/gsc_inspect.py):
| HTTP | 场景 | 处理 |
|---|---|---|
| 400 | URL 不属于该资源 | 核对 URL 与 property 是否匹配 |
| 403 | 服务账号无权限 | 在 GSC > 设置 > 用户和权限中添加client_email |
| 429 | 超过 600 QPM / 2,000 QPD | 等待后重试,参考指数退避策略(1s→2s→4s→8s→16s,最多 5 次) |
碰到 429 时,若响应头带Retry-After则以其值为准;批量脚本默认的 1 秒delay已经考虑了 QPM 上限,日常 2,000 以内的审计通常不会触雷。
六、Sitemaps 与 URL Inspection 的分工:避免报告口径错乱
模板页脚只引用 URL Inspection API,这是有意为之。seo-google 技能和对应测试(tests/test_gsc_query.py)反复强调一个口径问题:
- Sitemaps API只能返回
submitted(提交数量)、errors、warnings等,反映的是"提交动作"而非"收录结果"; - URL Inspection API返回的是 Google 当前的索引判定,是唯一的索引事实来源。
因此,一套严谨的索引审计应该双轨并用:先用/seo google sitemaps <property>查看提交状态与报错,再用inspect-batch对关键 URL 逐一核实真实收录情况。报告中不要混用两种口径——Sitemap 的"已提交"不等于"已索引",这正是本模板把 Summary 严格限定在 PASS/FAIL/NEUTRAL/Errors 四类的原因。
七、实战工作流:一套可复用的索引审计 SOP
综合模板与源码,一套完整的索引审计流程如下:
- 准备 URL 清单:导出站点的核心页面、新增页面、疑似问题页面,写入
urls.txt(每行一个,去重),控制在 2,000 个以内; - 确认认证:
python3 scripts/google_auth.py --check --json验证服务账号可用; - 批量检查:
python3 scripts/gsc_inspect.py --batch urls.txt --json > inspect-data.json; - 按模板整理报告:将 JSON 中的
summary填入 Summary 表,将results展开为 Detailed Results 表,从canonical.match == False的记录生成 Canonical Mismatches 表,按根因聚合 FAIL 生成 Common Issues 表,从rich_results.detected_items生成 Rich Results 表; - 生成 PDF(可选):
python3 scripts/google_report.py --type indexation --data inspect-data.json --domain example.com,获得带环形图的可交付报告; - 归档与对比:按 skills/seo-google/SKILL.md 的约定保存为
GOOGLE-API-REPORT-{domain}.md,留存时间戳以便与下一轮审计对比。
八、模板的扩展方向
- 按页面类型拆分:对每个 URL 标注页面类型(首页/品类页/文章页),在 Summary 之外再输出按类型分组的索引率,帮助定位"哪类页面未被收录";
- 与 CWV 数据联动:seo-google 技能同时具备 PageSpeed/CrUX 数据能力,可在报告中对"已索引但性能差"的 URL 附加 Core Web Vitals 状态,形成"索引 + 体验"复合审计;
- 问题自动分类脚本:当前 Common Issues 的归类仍以人工/Agent 判断为主,可以基于
coverageState、pageFetchState、robotsTxtState的组合编写聚合逻辑,将模板中的 Issue/Count/Priority/Action 全自动生成。
结语
indexation-status-report 模板虽短,却是 seo-google 技能中"索引审计"能力的交付骨架:上游对接 URL Inspection API 的实时判定,下游支撑google_report.py的 PDF 可视化,中间以 PASS/FAIL/NEUTRAL/Errors 四分类、canonical 冲突与富结果三个视角组织证据。无论你是用它做一次性批量审计,还是把它固化为周期性索引健康度巡检的标准报告,都可以直接以本模板为起点,配合gsc_inspect.py与google_report.py快速落地一套可追溯、可对比、可交接的索引状态报告体系。
【免费下载链接】claude-seo
Universal SEO skill for Claude Code. 26 sub-skills + 19 sub-agents covering technical SEO, E-E-A-T, schema, GEO/AEO, agent readiness (Lighthouse Agentic Browsing, WebMCP, llms.txt), backlinks, local SEO, e-commerce, international SEO, Google APIs, and PDF/Excel reporting. 9 optional extensions for live SEO data.
相关推荐
如何高效自定义LabelImg导出模板:专业开发者实战指南
如何高效自定义LabelImg导出模板:专业开发者实战指南 LabelImg作为一款开源的图像标注工具,支持Pascal VOC、YOLO和CreateML等多
claude-seo 实战:Google Indexing API v3 索引通知全指南
claude seo 实战:Google Indexing API v3 索引通知全指南 本篇技术指南以 claude seo 仓库中 skills/seo g
终极Google索引脚本批量处理指南:10万级URL高效索引策略
终极Google索引脚本批量处理指南:10万级URL高效索引策略 Google索引脚本(google indexing script)是一款基于TypeScri
开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考