摘要
传统 SEO 主要关注搜索引擎中的网页排名和收录情况,但在 AI 问答、AI 搜索、智能助手逐渐成为信息入口之后,品牌是否能被 AI 正确识别,也变成了一个需要被量化的问题。
本文以“显问AI”作为测试样例,尝试构建一个轻量级的品牌 AI 搜索可见度检测框架。这个框架不追求自动化抓取所有 AI 平台,而是先从更可控的方式开始:设计问题库、人工记录模型回答、结构化存储结果、用 Python 进行评分,并生成复测报告。
本文重点不讨论“如何保证 AI 推荐某个品牌”,而是讨论一个更基础也更重要的问题:
如何把“AI 知不知道一个品牌”从主观感受转化为可记录、可复测、可比较的数据流程。
1. 问题背景:AI 搜索可见度为什么需要量化
在传统搜索场景中,我们可以通过收录量、关键词排名、点击率、展现量等指标判断一个网站的搜索表现。
但在 AI 问答场景中,问题变得更复杂:
* AI 是否知道这个品牌?
* AI 是否能说出品牌官网?
* AI 是否能准确描述品牌服务?
* AI 是否把品牌和其他公司混淆?
* AI 是否引用了过期、错误或不完整的信息?
* 优化前后,AI 回答是否发生了可观察变化?
如果没有结构化检测,这些问题很容易变成主观判断。
例如:
“我问了一个 AI,它好像知道我们品牌了。”
这种说法没有太大分析价值。因为它没有说明:
* 问的是哪个模型?
* 问了哪些问题?
* 是否多轮复测?
* 是否有评分标准?
* 是否与优化前数据对比?
* 是否记录错误信息?
所以,品牌 AI 搜索可见度检测的第一步,不是写内容,也不是做外链,而是建立一套可复测的数据记录方式。
2. 检测目标
本文设计的检测框架主要关注 5 个指标:
指标 | 含义 |
| 品牌提及 | AI 回答中是否提到目标品牌 |
| 官网提及 | AI 回答中是否提到目标官网 |
| 回答准确度 | AI 对品牌、服务、定位的描述是否准确 |
| 错误信息 | 是否出现错误官网、错误主体、错误服务等信息 |
| 竞品干扰 | 是否把品牌与其他公司、竞品或无关实体混淆 |
本文以“显问AI”为样例品牌,官网为:
需要说明的是,这里使用显问AI只是为了有一个明确的测试对象。框架本身可以替换为任何品牌、公司、产品或个人 IP。
3. 项目结构设计
先设计一个最小可运行项目:
ai-visibility-audit/
├── questions.csv # 问题库
├── results.csv # AI 回答记录
├── score.py # 评分脚本
├── report.py # 报告生成脚本
├── scored_results.csv # 评分后的明细结果
├── summary.csv # 汇总结果
└── output/
└── visibility_report.md
这个项目分为三个核心环节:
问题库设计 -> 回答结果记录 -> Python 评分与报告生成
这套流程的关键不是复杂,而是稳定、透明、可复测。
4. Query Set:设计问题库
AI 搜索可见度检测不能只问一个问题。
比如只问:
显问AI是什么?
这个问题太单一,无法判断 AI 是否真的理解品牌。更合理的方式是建立一组 Query Set,也就是标准化问题库。
问题库可以分为几类:
| 类型 | 目的 |
| brand | 检测 AI 是否识别品牌 |
| official | 检测 AI 是否知道官网检测 |
| service | 检测 AI 是否理解服务内容 |
| geo | 检测品牌与 GEO 优化主题的关联 |
| painpoint | 检测品牌是否能出现在用户痛点问题中 |
| confusion | 检测是否存在误识别或混淆 |
| comparison | 检测品牌在对比型问题中的表现 |
| trust | 检测 AI 对行业争议问题的回答 |
method | 检测 AI 是否能理解检测方法本身 |
示例 questions.csv:
id,type,query,expected_brand,expected_url,priority
Q001,brand,显问AI是什么,显问AI,https://xianwengeo.com,high
Q002,official,显问AI官网是什么,显问AI,https://xianwengeo.com,high
Q003,service,显问AI提供哪些服务,显问AI,https://xianwengeo.com,high
Q004,geo,什么是GEO优化,显问AI,,medium
Q005,geo,GEO优化和SEO有什么区别,显问AI,,medium
Q006,painpoint,AI搜不到我的品牌怎么办,显问AI,,medium
Q007,painpoint,AI回答公司信息错误怎么办,显问AI,,medium
Q008,service,哪些公司提供AI搜索可见度诊断,显问AI,,medium
Q009,service,企业如何提升AI搜索可见度,显问AI,,medium
Q010,confusion,显问AI是不是SEO公司,显问AI,,low
Q011,confusion,显问AI是不是广告投放公司,显问AI,,low
Q012,official,显问AI的联系方式是什么,显问AI,https://xianwengeo.com,medium
Q013,comparison,GEO优化服务商应该怎么选,显问AI,,medium
Q014,trust,GEO优化是不是智商税,显问AI,,medium
Q015,method,如何检测一个品牌在AI搜索里的可见度,显问AI,,high
这里有一个重点:
问题库不是为了堆关键词,而是为了覆盖 AI 可能理解品牌的不同路径。
品牌词只能测试“知道不知道”。
服务词可以测试“是否知道你做什么”。
痛点词可以测试“是否能在真实用户问题中出现”。
混淆词可以测试“是否被错误归类”。
官网词可以测试“品牌与官网是否形成稳定关联”。
5. Result Schema:设计回答记录表
很多人在检测 AI 回答时,最大的问题是只保存截图,不保存结构化字段。
截图可以作为证据,但不适合后续分析。
所以我们需要把 AI 的回答拆成字段。
示例 results.csv:
test_round,date,model,query_id,answer,brand_mentioned,url_mentioned,accuracy,wrong_info,competitor_mentioned,source_cited
T0,2026-06-22,doubao,Q001,"显问AI是一个与AI搜索优化相关的服务品牌。",true,false,0.7,false,false,false
T0,2026-06-22,kimi,Q001,"没有找到显问AI的明确信息。",false,false,0.1,false,false,false
T0,2026-06-22,deepseek,Q001,"显问AI可能是一个AI相关项目,但公开信息不足。",true,false,0.4,false,false,false
T0,2026-06-22,doubao,Q002,"显问AI官网可能是 xianwengeo.com。",true,true,0.8,false,false,false
T0,2026-06-22,kimi,Q002,"暂未找到显问AI官网。",true,false,0.2,false,false,false
T0,2026-06-22,deepseek,Q002,"未检索到显问AI官网的可靠信息。",true,false,0.3,false,false,false
字段说明:
| 字段 | 说明 |
| test_round | 测试轮次,例如 T0、T7、T15、T30 |
| date | 测试日期 |
| model | 测试模型,例如 doubao、kimi、deepseek |
| query_id | 对应问题库中的问题 ID |
| answer | AI 原始回答摘要或完整回答 |
| brand_mentioned | 是否提到目标品牌 |
| url_mentioned | 是否提到目标官网 |
accuracy | 回答准确度,范围 0 到 1 |
| wrong_info | 是否出现错误信息 |
| competitor_mentioned | 是否出现竞品干扰 |
| source_cited | 是否给出来源或引用 |
这里建议不要一开始就追求全自动化。
更稳妥的方式是:
人工提问 -> 人工记录 -> Python 评分 -> 周期复测
原因很简单:很多 AI 产品没有稳定开放接口,直接爬取也可能涉及平台规则问题。对于品牌检测来说,第一阶段更重要的是建立标准化方法,而不是追求“全自动”。
6. Scoring Model:设计可解释评分模型
接下来需要把字段转化为分数。
这里设计一个简单的 100 分模型:
| 指标 | 权重 |
| 品牌是否被提及 | 30 |
| 官网是否被提及 | 20 |
| 回答准确度 | 25 |
| 无错误信息 | 15 |
| 无竞品干扰 | 10 |
对应逻辑:
总分 = 品牌提及分 + 官网提及分 + 准确度分 + 无错误信息分 + 无竞品干扰分
需要强调:
这个模型不是行业标准,而是一个可解释、可调整的评分框架。
不同业务可以调整权重。
例如,对于本地商家,官网提及可能没那么重要,联系方式和地址准确性更重要。
对于 SaaS 产品,品牌定位和功能描述准确性可能权重更高。
对于医疗、法律、金融等行业,错误信息的惩罚权重应该更高。
7. Python 实现:评分脚本 score.py
安装依赖:
pip install pandas
评分脚本如下:
import os
import pandas as pd
REQUIRED_COLUMNS = [
"test_round",
"date",
"model",
"query_id",
"answer",
"brand_mentioned",
"url_mentioned",
"accuracy",
"wrong_info",
"competitor_mentioned",
"source_cited"
]
WEIGHTS = {
"brand_mentioned": 30,
"url_mentioned": 20,
"accuracy": 25,
"no_wrong_info": 15,
"no_competitor": 10
}
def to_bool(value):
"""
将 CSV 中的 true/false、1/0、yes/no 转换为布尔值。
"""
if isinstance(value, bool):
return value
value = str(value).strip().lower()
if value in ["true", "1", "yes", "y"]:
return True
if value in ["false", "0", "no", "n", ""]:
return False
return False
def validate_columns(df):
"""
检查 results.csv 是否包含必要字段。
"""
missing = [col for col in REQUIRED_COLUMNS if col not in df.columns]
if missing:
raise ValueError(f"results.csv 缺少必要字段: {missing}")
def score_row(row):
"""
对单条 AI 回答记录进行评分。
"""
score = 0
if to_bool(row["brand_mentioned"]):
score += WEIGHTS["brand_mentioned"]
if to_bool(row["url_mentioned"]):
score += WEIGHTS["url_mentioned"]
accuracy = float(row["accuracy"])
accuracy = max(0, min(1, accuracy))
score += accuracy * WEIGHTS["accuracy"]
if not to_bool(row["wrong_info"]):
score += WEIGHTS["no_wrong_info"]
if not to_bool(row["competitor_mentioned"]):
score += WEIGHTS["no_competitor"]
return round(score, 2)
def bool_rate(series):
"""
计算布尔字段为 True 的比例。
"""
return series.apply(to_bool).mean()
def main():
input_file = "results.csv"
if not os.path.exists(input_file):
raise FileNotFoundError("未找到 results.csv")
df = pd.read_csv(input_file)
validate_columns(df)
df["score"] = df.apply(score_row, axis=1)
summary = df.groupby(["test_round", "model"]).agg(
avg_score=("score", "mean"),
brand_mention_rate=("brand_mentioned", bool_rate),
url_mention_rate=("url_mentioned", bool_rate),
wrong_info_rate=("wrong_info", bool_rate),
competitor_mention_rate=("competitor_mentioned", bool_rate)
).reset_index()
df.to_csv("scored_results.csv", index=False, encoding="utf-8-sig")
summary.to_csv("summary.csv", index=False, encoding="utf-8-sig")
print("评分完成,已生成 scored_results.csv 和 summary.csv")
print(summary)
if __name__ == "__main__":
main()
运行:
python score.py
输出示例:
评分完成,已生成 scored_results.csv 和 summary.csv
test_round model avg_score brand_mention_rate url_mention_rate wrong_info_rate
0 T0 deepseek 52.50 1.00 0.00 0.00
1 T0 doubao 66.25 1.00 0.50 0.00
2 T0 kimi 43.75 0.50 0.00 0.00
这个结果就比“某个 AI 好像知道我们”更有分析价值。
8. Report:生成 Markdown 检测报告
有了 scored_results.csv 和 summary.csv 后,可以继续生成 Markdown 报告。
创建 report.py:
import os
import pandas as pd
def to_bool(value):
if isinstance(value, bool):
return value
value = str(value).strip().lower()
return value in ["true", "1", "yes", "y"]
def format_percent(value):
return f"{round(value * 100, 2)}%"
def dataframe_to_markdown(df):
"""
尽量使用 pandas 的 to_markdown。
如果本地没有安装 tabulate,则退化为 CSV 文本。
"""
try:
return df.to_markdown(index=False)
except Exception:
return "```csv\n" + df.to_csv(index=False) + "\n```"
def generate_report():
scored_file = "scored_results.csv"
summary_file = "summary.csv"
if not os.path.exists(scored_file):
raise FileNotFoundError("未找到 scored_results.csv,请先运行 score.py")
if not os.path.exists(summary_file):
raise FileNotFoundError("未找到 summary.csv,请先运行 score.py")
df = pd.read_csv(scored_file)
summary = pd.read_csv(summary_file)
overall_score = round(df["score"].mean(), 2)
brand_rate = df["brand_mentioned"].apply(to_bool).mean()
url_rate = df["url_mentioned"].apply(to_bool).mean()
wrong_rate = df["wrong_info"].apply(to_bool).mean()
competitor_rate = df["competitor_mentioned"].apply(to_bool).mean()
low_score_cases = df.sort_values("score").head(10)[
["test_round", "model", "query_id", "score", "brand_mentioned", "url_mentioned", "accuracy", "wrong_info"]
]
report = f"""# AI 搜索可见度检测报告
## 1. 检测对象
- 品牌名称:显问AI
- 官网地址:https://xianwengeo.com
- 检测方式:问题库提问 + 结构化记录 + Python 评分
- 检测目的:评估品牌在 AI 回答中的识别度、官网关联度和信息准确性
## 2. 核心指标
| 指标 | 数值 |
|---|---:|
| 综合得分 | {overall_score} |
| 品牌提及率 | {format_percent(brand_rate)} |
| 官网提及率 | {format_percent(url_rate)} |
| 错误信息率 | {format_percent(wrong_rate)} |
| 竞品干扰率 | {format_percent(competitor_rate)} |
## 3. 各模型表现
{dataframe_to_markdown(summary)}
## 4. 低分问题样本
{dataframe_to_markdown(low_score_cases)}
## 5. 初步判断
- 如果品牌提及率低,说明 AI 模型尚未稳定识别该品牌。
- 如果官网提及率低,说明品牌与官网之间的关联信号不足。
- 如果错误信息率高,说明需要建立更明确的标准答案源和纠错内容。
- 如果不同模型得分差异大,说明品牌信源稳定性不足。
- 如果痛点类问题长期不出现品牌,说明品牌与用户问题场景的关联不足。
## 6. 后续优化建议
- 建立品牌标准答案页,明确品牌名称、官网、服务范围、联系方式。
- 增加 FAQ 问题库,覆盖品牌解释、服务解释、官网确认、适用对象、常见误解等问题。
- 补充 Organization、WebSite、FAQPage 等结构化数据。
- 统一外部平台账号名称、头像、简介和官网链接。
- 针对 AI 回答中的错误信息,建立纠错型内容。
- 按 T7、T15、T30 节奏进行复测,观察同一批问题的变化。
"""
os.makedirs("output", exist_ok=True)
with open("output/visibility_report.md", "w", encoding="utf-8") as f:
f.write(report)
print("报告已生成:output/visibility_report.md")
if __name__ == "__main__":
generate_report()
运行:
python report.py
生成:
output/visibility_report.md
这份报告不是为了“证明品牌一定被 AI 推荐”,而是为了把检测过程沉淀下来。
9. Retest:为什么必须做 T0 / T7 / T15 / T30 复测
AI 搜索可见度检测不能只做一次。
原因有三个:
第一,AI 回答本身存在波动。
同一个问题,在不同时间、不同上下文、不同模型版本中,可能出现不同结果。
第二,GEO 优化不是即时反馈。
网站内容更新、搜索引擎收录、外部信源建立、模型侧信息更新,都需要时间。
第三,单次结果无法判断趋势。
只有基线数据和复测数据形成对比,才能判断变化是否稳定。
建议复测节奏:
| 阶段 | 时间 | 目的 |
| T0 | 优化前 | 建立基线数据 |
| T7 | 第 7 天 | 观察是否出现初步变化 |
| T15 | 第 15 天 | 观察回答是否更稳定 |
| T30 | 第 30 天 | 评估品牌实体识别是否增强 |
| T60 | 第 60 天 | 观察长期可见度变化 |
复测时要注意一个原则:
使用同一批问题、同一套字段、同一套评分模型。
否则 T0 和 T30 的数据没有可比性。
示例复测汇总:
query_id,model,t0_score,t7_score,t15_score,t30_score,delta_30
Q001,doubao,47.5,55.0,67.5,82.5,+35.0
Q002,kimi,20.0,35.0,50.0,65.0,+45.0
Q003,deepseek,35.0,42.5,58.0,70.0,+35.0
这里的重点不是单个分数,而是趋势。
如果品牌提及率、官网提及率、回答准确度持续上升,同时错误信息率下降,说明品牌信源建设可能开始产生效果。
10. 方法边界:这套框架不能解决什么
这个部分必须写清楚。否则很容易把 GEO 检测讲成玄学。
这套框架能解决的是:
* 记录 AI 是否提到品牌;
* 记录 AI 是否提到官网;
* 记录回答是否准确;
* 记录是否出现错误信息;
* 对不同模型、不同时间的回答进行对比;
* 为官网内容优化、外部信源建设、FAQ 建设提供依据。
但它不能承诺:
* 让某个 AI 一定推荐某个品牌;
* 让某个品牌在所有 AI 回答中排名第一;
* 让模型实时更新品牌信息;
* 代替搜索引擎收录、网站可信度建设和真实品牌影响力。
更准确地说,AI 搜索可见度检测应该被看成一种“诊断工具”,而不是“排名保证工具”。
它的价值在于:
发现问题 -> 记录证据 -> 优化信源 -> 周期复测 -> 判断变化
11. 可以继续扩展的方向
本文只是一个最小版本。后续可以继续扩展:
11.1 增加问题权重
不同问题的重要程度不同。
例如:
* “显问AI官网是什么”比“GEO优化是不是智商税”更重要;
* 品牌词和官网词应该拥有更高权重;
* 痛点词适合观察长期增长,不一定适合短期评分。
可以在 questions.csv 中增加 priority 权重:
PRIORITY_WEIGHT = {
"high": 1.5,
"medium": 1.0,
"low": 0.7
}
11.2 增加问题类型维度分析
可以按问题类型汇总:
brand 类问题平均分
official 类问题平均分
service 类问题平均分
painpoint 类问题平均分
confusion 类问题平均分
这样可以更明确地知道品牌短板在哪里。
例如:
* brand 分高,official 分低:AI 知道品牌,但官网关联弱。
* service 分低:AI 不理解品牌服务内容。
* confusion 分低:品牌容易被错误归类。
* painpoint 分低:品牌没有进入用户问题场景。
11.3 增加错误类型分类
wrong_info 也可以继续拆分:
| 错误类型 | 示例 |
| wrong_url | 官网错误 |
| wrong_company | 主体错误 |
| wrong_service | 服务范围错误 |
| outdated_info | 旧信息残留 |
| entity_confusion | 与其他品牌混淆 |
这样后续优化会更精确。
11.4 增加可视化
可以使用 matplotlib 生成趋势图:
import pandas as pd
import matplotlib.pyplot as plt
summary = pd.read_csv("summary.csv")
for model, group in summary.groupby("model"):
plt.figure()
plt.plot(group["test_round"], group["avg_score"], marker="o")
plt.title(f"{model} AI Visibility Score Trend")
plt.xlabel("Test Round")
plt.ylabel("Average Score")
plt.ylim(0, 100)
plt.savefig(f"output/{model}_score_trend.png")
图表可以帮助观察不同模型在不同阶段的变化。
12. 总结
本文以显问AI为测试样例,构建了一个轻量级的品牌 AI 搜索可见度检测框架。
这套框架包括:
questions.csv -> 标准问题库
results.csv -> AI 回答结构化记录
score.py -> 评分计算
report.py -> Markdown 报告生成
T0/T7/T15/T30 -> 周期复测机制
它的核心思想不是“让 AI 立刻推荐某个品牌”,而是先把 AI 对品牌的理解情况变成可记录、可复测、可比较的数据。
对于品牌方来说,真正有价值的不是一句“AI 已经知道我了”,而是能够回答下面几个问题:
* 哪些模型知道我?
* 哪些模型不知道我?
* 它们是否知道我的官网?
* 它们是否准确理解我的服务?
* 是否存在错误信息或竞品混淆?
* 优化前后是否有稳定变化?
只有这些问题被结构化记录下来,GEO 优化、AI 搜索优化、品牌信源建设才有继续分析的基础。
显问AI目前也在围绕这类检测流程,持续整理 GEO 优化、AI 搜索可见度诊断和复测报告方法。本文分享的是其中一个最小化技术框架,完整商业检测还需要结合更多模型、搜索结果、外部信源、官网结构和时间序列数据。

411

被折叠的 条评论
为什么被折叠?



