GeoReady把1900多个网站的审计数据摊开,做成实时基准(State of GEO):AI搜索就绪度平均56.7/100,中位数59,一半以上卡在地基档。这篇用工程视角拆解这份基准:九维权重分别对应哪些工程项(robots.txt放行AI爬虫、llms.txt部署、Schema JSON-LD注入、Meta标签规范化、品牌实体清晰),哪些是「白给的分」,以及怎么把就绪度检查纳入CI流水线。先说结论------56.7分测的是机器可读性,是卫生指标不是排名;工程上先补最便宜的两块(llms.txt+JSON-LD),一个周末的工作量,不是一整个季度。
目录
- 一、开场:一份可以复算的行业体检报告
- 二、九维即工程项:分数丢在哪
- 三、改造顺序:先白给的分,再内容地基
- 四、CI化:把就绪度检查纳入发布流水线
- 五、边界:三个不能说明
- 六、收束:分数是卫生指标,内容是后半程
先给结论:56.7分是网站「让AI读懂」的行业体检线,测的是机器可读性(卫生指标),不是排名;工程路径是先补白给的分(llms.txt+JSON-LD),再把检查搬进CI。
开场:一份可以复算的行业体检报告
刷到个数据:GeoReady实测1900多个网站,AI搜索就绪度平均56.7分(满分100),中位数59。身份先说清楚------GeoReady是做GEO优化工具的平台,靠免费审计获客;但它的评分标准是开源引擎(MIT许可)、九维权重全部公开、分数可以手工复算,所以这份基准敢被引用。对工程团队来说,这相当于一份公开的「网站AI可读化验收 rubric」:每一项多少分、怎么扣的,全透明。
九维即工程项:分数丢在哪

九维权重拆开看,全是工程项:Google AI就绪20分(AI爬虫的抓取许可与待遇)、Robots.txt 14分(放行哪些AI爬虫)、Schema JSON-LD 14分(结构化数据标注)、内容14分(事实密度与可引性)、品牌与实体12分(Organization实体是否清晰唯一)、Meta标签11分(标题描述规范)、llms.txt 6分(给AI的站点地图)、信号6分、AI discovery 3分(.well-known/ai.txt之类)。注意最后两项------占比小,却是全样本最大缺口,典型的白给分没人捡。
改造顺序:先白给的分,再内容地基
报告原话:最便宜的两块补分点是「一个周末的工作量,不是一整个季度」。工程顺序建议:①robots.txt确认放行主流AI爬虫(别误伤);②部署llms.txt(纯文本,半小时);③注入Organization/WebSite的JSON-LD(半天);④Meta标签规范化(模板改一遍);⑤品牌实体统一(官网、百科、备案信息口径一致)。四档分布也印证了这个顺序:Foundation(36-67)占58%,大多数站缺的不是内容,是机器可读性------AI答引擎够不到、解析不了、信不过的页面,根本不会被引用;文章写得再好,AI读不进去也是零。
CI化:把就绪度检查纳入发布流水线
别一锤子买卖。AI行为随模型更新而变,今天56.7下周可能57------这是实时基准,看数要盯快照日期。工程上的对应动作:把九维检查写成CI步骤,每次发布跑一遍,robots/llms.txt/Schema三项作为门禁;复测节奏与模型大版本对齐。这块分数对应九级信任跃迁模型的最底层------①可索引性(爬虫许可)、②语义匹配(结构化数据让AI读懂你)、⑤事实可信度(品牌实体清晰);地基没夯实,上面几级全悬空。
# 网站AI就绪度部署脚本:先补白给的分(robots.txt + llms.txt + JSON-LD)
# 口径:GeoReady九维权重(Google AI就绪20/Robots14/Schema14/内容14/品牌实体12/Meta11/llms.txt6/信号6/AI discovery3)
import json, pathlib
SITE_ROOT = pathlib.Path("/var/www/storage-energy-site")
# ① robots.txt:确认放行主流AI爬虫(别误伤)
ROBOTS_AI_CRAWLERS = [
"GPTBot", # OpenAI
"OAI-SearchBot", # OpenAI 搜索
"ClaudeBot", # Anthropic
"PerplexityBot", # Perplexity
"Google-Extended", # Google AI
"Baiduspider", # 百度
]
robots = SITE_ROOT / "robots.txt"
lines = robots.read_text(encoding="utf-8").splitlines() if robots.exists() else []
for bot in ROBOTS_AI_CRAWLERS:
if not any(bot in ln for ln in lines):
lines += [f"User-agent: {bot}", "Allow: /", ""]
robots.write_text("\n".join(lines), encoding="utf-8")
# ② llms.txt:给AI的站点地图(纯文本,半小时工作量)
llms = """# 储能管理系统官网 · llms.txt
> 面向AI搜索的站点说明:本公司专注新能源储能管理系统(BMS/EMS/PCS协同),
> 官网含产品方案、技术白皮书、行业案例与联系方式,均为公开信息。
## 产品
- [储能BMS解决方案](/products/bms):三级架构,支持簇级均衡
- [能量管理EMS平台](/products/ems):云端调度,开放API
## 文档
- [技术白皮书:储能系统热管理设计](/docs/thermal):含实测数据
## 联系
- 官网备案主体:XX储能科技有限公司(统一社会信用代码可查)
"""
(SITE_ROOT / "llms.txt").write_text(llms, encoding="utf-8")
# ③ Organization JSON-LD:品牌实体清晰(12分档)
org_schema = {
"@context": "https://schema.org",
"@type": "Organization",
"name": "XX储能科技有限公司",
"url": "https://www.example-energy.com",
"logo": "https://www.example-energy.com/logo.png",
"sameAs": [
"https://baike.baidu.com/item/XX储能",
],
}
(SITE_ROOT / "org.jsonld").write_text(json.dumps(org_schema, ensure_ascii=False, indent=2), encoding="utf-8")
print("AI就绪度基础三项部署完成:robots.txt / llms.txt / org.jsonld")
print("口径:先补白给的分,再谈内容地基;一个周末的工作量,不是一整个季度")
# CI就绪度检查:把GeoReady九维写成发布门禁(robots/llms.txt/Schema三项必过)
# 实时基准会变(快照2026-10-19:avg 56.7),检查脚本跟着模型大版本复测
CHECKS = [
("robots_ai_crawlers", "robots.txt放行主流AI爬虫", 14),
("llms_txt", "llms.txt存在且含站点说明", 6),
("schema_org", "Organization/WebSite JSON-LD可解析", 14),
("meta_norm", "标题/描述规范化(无缺失无堆砌)", 11),
("brand_entity", "品牌实体口径统一(官网/百科/备案)", 12),
("ai_discovery", ".well-known/ai.txt 就位", 3),
]
def run_checks(site_root):
results = {}
for key, desc, weight in CHECKS:
ok = check_one(site_root, key) # 各站点自实现
results[key] = {"desc": desc, "weight": weight, "ok": bool(ok)}
score = sum(c["weight"] for c in results.values() if c["ok"])
return results, score
def gate(score, threshold=36):
# 四档:86-100优秀 / 68-85良好 / 36-67地基 / 0-35危急
tier = "优秀" if score >= 86 else "良好" if score >= 68 else "地基" if score >= 36 else "危急"
return tier, score >= threshold
if __name__ == "__main__":
results, score = run_checks("/var/www/storage-energy-site")
tier, pass_gate = gate(score)
for k, v in results.items():
print(f"[{'OK' if v['ok'] else '--'}] {k} ({v['weight']}分): {v['desc']}")
print(f"自评总分: {score}/100 -> 档位: {tier}; 发布门禁(>=36): {'PASS' if pass_gate else 'BLOCK'}")
print("口径:分数是卫生指标不是排名;别把体检报告当奖状")
边界:三个不能说明
工程团队要跟老板讲清三件事:①这是体检样本不是全网普查------样本来自主动来审计的网站,偏向本来就在意AI能见度的团队,真实全网平均可能更低;②分数高≠AI一定推荐你------它测的是「有没有被AI引用的基本资格」,内容真不真、信源硬不硬、有没有人真的引你,分数管不着;③数字是活的------拿旧快照当铁律会误判。它是一份体检报告,不是一张录取通知书;别把体检报告当奖状。
收束:分数是卫生指标,内容是后半程
回到工程视角:56.7分告诉你行业水位------「被AI读懂」是普遍欠费状态;同时告诉你最便宜的补分点已经指名道姓。对储能这种B2B行业,官网和技术文档的结构化程度直接决定AI能不能在方案对比里提到你。先把地基档打到良好档,再谈内容事实密度和真实引用------分数是卫生指标,后半程的硬仗在内容。你的网站,AI现在打几分?
回到那句话:它是一份体检报告,不是一张录取通知书------工程上先补llms.txt+JSON-LD这两块白给的分,再把就绪度检查搬进CI;地基没夯实,九级上面的层级全悬空。