← 返回蜂巢洞察

如何判断你的搜索控制台中的展示数据是人为操作产生的,还是由机器自动生成的

您的Search Console报告显示,在90天的时间里,某个页面在谷歌搜索结果的第一页获得了3,068次展示机会,但在同一时期内,该页面并没有获得任何点击量。 通常人们会认为这个页面存在点击率低的问题,因此就会修改标题、优化元描述,然后等待效果出现。但实际上这种分析很可能是错误的,据此采取行动只会浪费精力。因为根本没有人会进行这样的搜索操作,所以那些数据也就没有任何实际意义。 本教程将教您如何区分网站所获得的两种类型的展示机会。您可以使用自己的Search Console数据运行一个简单的脚本,根据搜索排名将这些展示机会分为不同的类别,读取查询日志以分析机器生成的搜索请求信息,并将可疑页面

您的Search Console报告显示,在90天的时间里,某个页面在谷歌搜索结果的第一页获得了3,068次展示机会,但在同一时期内,该页面并没有获得任何点击量。

通常人们会认为这个页面存在点击率低的问题,因此就会修改标题、优化元描述,然后等待效果出现。但实际上这种分析很可能是错误的,据此采取行动只会浪费精力。因为根本没有人会进行这样的搜索操作,所以那些数据也就没有任何实际意义。

本教程将教您如何区分网站所获得的两种类型的展示机会。您可以使用自己的Search Console数据运行一个简单的脚本,根据搜索排名将这些展示机会分为不同的类别,读取查询日志以分析机器生成的搜索请求信息,并将可疑页面与同一网站上的对照页面进行对比分析。

“搜索排名区间”是指一组平均搜索位置,并不是一个具体的数字。这个脚本将搜索结果分为四个区间:前3个搜索结果、第1页的其他位置、第2页以及第3页及以后的位置。这种分类方法非常重要,因为单一的平均值无法反映实际情况——例如,某个页面可能在少数几次搜索中排名第8,而在其他大多数情况下排名却为第30。

对照页面就是同一网站上的另一个页面,您已经知道这个页面确实有真实用户会阅读它,因此它可以作为衡量可疑页面效果的标准。

通过这些分析,您最终就能分辨出哪些页面真正拥有真实的读者群体,哪些页面则没有;这样,您就可以停止为那些根本不存在的读者群进行优化工作了。

下面列出的所有数据都来自我的个人网站。

目录

先决条件

在开始之前,您需要准备以下条件:

  • 一个已验证的Google Search Console账户,且该账户至少拥有90天的数据记录。免费账户即可满足需求。

  • Node.js 18或更高版本。该脚本使用了内置的`fetch`函数,因此不需要额外的HTTP库。

  • 一个启用了Search Console API的Google Cloud服务账户,并且需要将该账户添加为您的账户的用户。请下载该账户的JSON密钥文件。

  • 两个npm包:`google-auth-library`用于处理授权令牌,`tsx`用于直接运行TypeScript文件。

  • 一个可疑页面和一个对照页面。可疑页面是指那些展示次数很多但点击量很少的页面;对照页面则是您网站中表现最好的文章,也就是您确定会有真实用户阅读的页面。

  • 大约20分钟的时间来完成这些操作。

添加相应的依赖项,并将标准凭据变量设置为你的服务账户密钥路径:

npm i google-auth-library tsx
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your-service-account.json

如果你之前没有启用过该API,请在Google Cloud项目中开启“Google Search Console API”,然后在“设置”->“用户和权限”中将服务账户的电子邮件地址添加为Search Console的正式用户。

为什么会有机器生成的点击量

Google的AI模式和AI概要功能并不会通过直接运行用户输入的问题来生成答案。它们采用了一种称为“查询扩展”的技术:系统会将用户的查询语句分解成一系列更具体的子查询,分别从相应的数据源中获取结果,最后将这些结果合并起来形成最终的答案。

每一个子查询实际上都是针对真实索引进行的搜索操作。当其中一个子查询被执行并返回结果时,Search Console就会记录下这次搜索所对应的点击量。

这种点击量是真实的,对应的位置也是真实的。但是因为没有人真正看到了这些搜索结果页面,所以也就没有人会点击这些链接。这种“点击”现象的出现并不是因为你的标题不够吸引人,而是因为系统本身的设计使得这样的点击行为在技术上是不可能发生的。

这一点非常重要,因为常规的分析工具根本无法区分这些人工点击和机器生成的点击量。那些用于检测实际点击率与预期值之间差距的脚本,如果只选择那些实际点击率低于预期值的记录,就会把这些记录排在最前面——因为0除以任何正数都会得到最大的“差距”数值。这样一来,那些实际上表现最差的记录反而会被错误地视为表现最好的记录。

步骤1:获取页面数据统计信息

将这段代码保存为phantom-check.ts,这就是整个工具的实现代码。

#!/usr/bin/env npx tsx
import { GoogleAuth } from 'google-auth-library';

const SITE = process.argv[2];
const PAGE = process.argv[3];
const DAYS = Number(process.argv[4] ?? 90);

if (!SITE || !PAGE) {
	console.error('使用方法:npx tsx phantom-check.ts <网站地址> <页面地址> [天数]');
	process.exit(1);
}

// Search Console的数据会有大约两天的延迟,因此统计窗口的时间范围应设置为这两天。
const iso = (d: Date) => d.toISOString().slice(0, 10);
const endDate = iso(new Date(Date.now() - 2 * 864e5));
const startDate = iso(new Date(Date.now() - (DAYS + 2) * 864e5));

async function getToken(): Promise {
	const auth = new GoogleAuth({
		scopes: ['https://www.googleapis.com/auth/webmasters.readonly']
	});
	const client = await auth.getClient();
	const token = await client.getAccessToken();
	if (!token.token) throw new Error('无法生成访问令牌。');
	return token.token;
}

type Row = { keys: string[]; clicks: number; impressions: number; ctr: number; position: number };

async function query(token: string, body: Record {
	const url =
		`https://www.googleapis.com/webmasters/v3/sites/${encodeURIComponent(SITE)}/searchAnalytics/query`;
	const res = await fetch(url, {
	-method: 'POST',
	.headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
		body: JSON.stringify({
			startDate,
			endDate,
			dimensionFilterGroups: [
				{ filters: [{ dimension: 'page', operator: 'equals', expression: PAGE }] }
			],
			...body
		})
	});
	if (!res.ok) throw new Error(`Search Console返回了HTTP错误代码 ${res.status}`);
	const json = (await res.json()) as { rows?: Row[] };
	return json.rows ?? [];
}

function band(position: number): string {
	if (position <= 3) return '前3名';
	if (position <= 10) return '页面第1部分';
	if (position <= 20) return '页面第2部分';
	return '页面第3部分及以后';
}

(async () => {
	const token = await getToken();

	const totals = await query(token, { dimensions: ['page'] });
	const t = totals[0];
.console.log(`\n${PAGE}`);
-console.log(`统计窗口:从 ${startDate} 到 ${endDate},共${DAYS}天\n`);
	if (!t) {
		console.log('在此时间范围内没有记录到任何点击量。');
		return;
	}
_console.log(
		`总点击量:${t.impressions}次  点击率:${t.ctr * 100}.00%  位置:${t.position.toFixed(1)}`
	);

	const rows = await query(token, { dimensions: ['query'], rowLimit: 1000 });

	const bands = new Map>();
	for (const r of rows) {
		const b = band(r.position);
		const cur = bands.get(b) ?? { imp: 0, clk: 0, queries: 0 };
		cur.imp += r.impressions;
	(cur.clk += r.clicks);
	.cur.queries += 1;
		bands.set(b, cur);
	}

.console.log('各位置段的点击量分布');
	for (const b of ['前3名', '页面第1部分', '页面第2部分', '页面第3部分及以后']) {
		const v = bands.get(b);
		if (!v) continue;
		console.log(
			`  ${b.padEnd(15)} ${String(v.imp).padStart(6)}次  ` +
				 `${String(v.clk).padStart(4)}次  查询次数:${v.queries}`
		);
	}

	const top = bands.get('前3名');
	if (top && top.impressions >= 100 && top.clk === 0) {
	.console.log(
			`\n  结论:排名前3的位置中,有${top.impressions}次点击量,但都没有产生任何点击行为。`
		);
		console.log('  这就是机器生成的统计结果。请查看下面的查询列表。');
	}

-console.log('按点击量排序的前20个查询');
	for (const r of rows.sort((a, b) => b.impressions - a.impressions).slice(0, 20)) {
		console.log(
			`  ${r.keys[0].slice(0, 60).padEnd(60)}次  点击量:${String(r.impressions).padStart(5)}次  位置:${r.position.toFixed(1)}`
		);
	}
.console.log();
).

下面是该脚本的具体执行步骤。

该脚本会从命令行接收三个参数:你拥有的Search Console账户信息、想要分析的特定页面,以及要回顾多少天的数据。默认情况下,回顾的时间为90天。如果你省略了其中任何一个参数,脚本会输出一条使用说明后退出,因为缺少这两个参数的话,后续的所有操作都将毫无意义。

接下来,脚本会确定数据查询的时间范围。由于Search Console的数据会有大约两天的延迟,因此脚本会在今天之前的两天结束这个时间范围的统计。如果在今天结束时进行统计,就会得到不完整的数据,从而导致最近一段时间的统计数据显示得不准确。iso()这个辅助函数会将JavaScript日期对象转换为API所期望的YYYY-MM-DD格式字符串。

getToken()这个函数负责处理身份验证。它会创建一个GoogleAuth客户端,并设置其权限范围为webmasters.readonly,然后使用你的服务账户密钥来获取一个临时访问令牌。由于该权限范围仅为只读权限,因此脚本只能查看你的账户信息,而无法对其进行任何修改。如果Google没有返回令牌,脚本会抛出错误,而不会继续执行并使用空的Authorization头信息进行请求。

query()这个函数才是真正与API进行交互的环节。它会使用包含令牌的Authorization: Bearer头部,向你的账户对应的searchAnalytics/query接口发送POST请求。其中关键的参数是dimensionFilterGroups:这个参数中包含了一个针对page维度的过滤条件,其操作符为=。正是这个过滤条件使得原本针对整个网站的统计结果能够转化为针对某个特定URL的详细数据。如果没有这个过滤条件,你就无法获取到关于某个具体页面的详细信息,因此本文中的各种对比分析也就无从进行了。

随后,脚本会发起两次独立的请求。这两次请求之间的时间间隔正是本文的重点所在。第一次请求会获取page维度的数据,由于过滤条件已经将结果范围缩小到了某个特定的URL,因此返回的结果会是一条包含该页面的总点击次数、总展示次数、点击率以及平均排名等信息的汇总行。第二次请求会获取query维度的数据,并设置结果条目的数量上限为1000条,这样就能得到产生那些展示次数的具体搜索记录。在汇总报告中,某个页面可能看起来很普通,但在搜索记录列表中,它很可能就是被机器筛选出来的。

band()这个函数会将每次搜索的平均排名分为四个不同的区间,然后脚本会生成两份报告:一份是按照排名区间分类的展示次数统计结果,另一份则是展示次数最多的20次搜索记录。如果某个页面在指定的时间范围内没有任何展示次数,脚本也会明确指出这一点并停止后续操作。

你可以将这个脚本应用到你怀疑有问题的页面上,使用方法如下:
npx tsx phantom-check.ts https://your-site.com https://your-site.com/your-suspect-page 90
例如,当我使用这个脚本分析我的文章“ChatGPT和Perplexity如何决定引用哪些来源”时,得到的结果如下:
https://chudi.dev/blog/aeo-answer-engine-optimization-explained
窗口时间:2026-05-19至2026-08-17(共90天)

总计:7480次展示,7次点击,平均排名8.5,点击率0.09%

在7,480次展示中仅有7次点击,这意味着点击率为0.09%。平均排名为8.5,位于首页的中间位置。

Google Search Console的性能数据视图,针对chudi.dev网站,在三个月内仅关注某一篇文章的数据。总点击次数为7次,总展示次数为7,500次,平均点击率为0.1%,平均排名为8.5。展示次数在图表中上下波动,而点击次数始终保持在底部线条上,仅在个别几天出现一次点击记录。

如果你更喜欢通过Search Console界面来查看这些数据,同样的结果也会出现在那里。这个脚本的存在就是为了让你能够在第4步中直接进行对比分析,而无需手动逐一查看这两个指标。

如果仅看这些数据,你可能会认为这个页面的排名还不错,但转化率却很低。正是这种错误的结论导致了不必要的标题修改。页面层面的平均数据掩盖了实际的分布情况,而真正的答案就在这种分布规律之中。

步骤2:按位置区间划分展示次数

这个脚本已经完成了这项工作。请阅读它输出的结果中的下一部分:

位置区间
  前3位              100次展示     0次点击  16次查询
  页面其余部分        3068次展示     0次点击  92次查询
  第2页                110次展示     0次点击  25次查询
  第3页及以后          82次展示     0次点击  23次查询

  结论:前3位位置上的100次展示并未产生任何点击。
  这就是机器分析得出的结果。请查看下面的查询列表。

看看第二行数据。在Google首页上,除了前3位之外,这个页面在92次不同的查询中获得了3,068次展示机会,但仍然没有产生任何点击。

为了便于理解:通常情况下,排名在4到10位的页面会获得2%到10%的点击量。既然这个页面获得了3,068次展示机会,那么预计应该会有60到300次点击才对。但实际上点击次数为零。这说明标题并没有问题——因为即使标题不佳,也至少还会有一些点击产生的。

另外,请注意前3位位置上的100次展示同样没有产生任何点击。对于人类用户来说,排名在前3位的页面通常会有10%到40%的转化率。既然有100次展示机会,就应该至少会产生一些点击才对。

所有位置区间的点击次数都为零,这就是典型的机器分析结果。人类的搜索行为往往比较分散,因此会有一些点击量被遗漏;而机器生成的搜索数据则更加整齐,所以不会出现点击量缺失的情况。

在继续进行分析之前,请注意一点:各个位置区间内的展示次数总和为3,360次,而页面的总展示次数却是7,480次;同时,页面上显示的点击次数仅为7次,而每一条查询记录都显示没有点击发生。这并不是脚本的错误。Search Console会隐藏那些不足以识别具体用户的查询记录,因此查询数据与页面数据显示出的总数并不一定一致。使用这些位置区间数据主要是为了了解其分布情况,而不是将其作为完整的统计数据来使用。

步骤3:查看查询列表

这些排名信息表明某些地方出了问题,而查询列表则能告诉你具体是哪里出了问题。

以下是从该页面获取的实际数据记录,完全按照脚本输出的格式呈现。由于输出列的限制,每条记录的文本长度被截断了,最多只显示60个字符:

按点击量排名前20的查询:
  如何让ChatGPT和Perplexity这类问答引擎决定该引用哪些来源?    1313次展示    0次点击    排名8.7
  一种能够检测ChatGPT从我的网站中引用了哪些URL的工具        206次展示    0次点击    排名3.7
  作为北美一家中型企业的SEO负责人,我应该怎么做?          193次展示    0次点击    排名6.2
  最基本的AO优化方案是什么?                                      128次展示    0次点击    排名3.3
  如何提高我的网站在问答引擎中的可见度?                    115次展示    0次点击    排名4.5
  一种能解释ChatGPT为何会改变引用来源的工具                106次展示    0次点击    排名5.6
  与AI内容引用标准相关的问答引擎优化方法                    105次展示    0次点击    排名7.9
  AI内容引用标准在AO优化中的应用                              95次展示    0次点击    排名8.3
  生成式引擎优化技术究竟是如何工作的?                        61次展示    0次点击    排名4.6
  一种能解释为什么某个页面不再被引用的工具                    60次展示    0次点击    排名8.7
  在问答引擎开始引用你的内容之前,它们必须先满足什么条件?     53次展示    0次点击    排名4.8
  为什么引用次数对AO优化如此重要?                            47次展示    0次点击    排名6.7
  请总结https://wildseo.co/网站上的5个关键要点。            44次展示    0次点击    排名2.8
  一种用于诊断为什么我的页面不再被ChatGPT引用的工具           43次展示    0次点击    排名8.6
  哪种GPT模型使用了与……相同的全局基础设施?                   43次展示    0次点击    排名8.3
  与AI内容引用标准相关的问答引擎源选择方法                    40次展示    0次点击    排名8.7
  与AI内容引用标准相关的问答引擎源选择方法                    31次展示    0次点击    排名9.9
  生成式引擎优化技术究竟是如何工作的?                        27次展示    0次点击    排名4.2
  问答引擎的引用数据                                            26次展示    0次点击    排名16.4
  最基本的AO优化方案是什么?                                      25次展示    0次点击    排名1.0
Google Search Console中同一页面的查询记录。这些记录都是完整的自然语言查询语句,其中大部分都是完整的问题。例如,有一条记录的展示次数为193次,内容是“作为北美一家科技领域中型企业的SEO负责人,我应该怎么做?如何让ChatGPT和Perplexity这类问答引擎决定该引用哪些来源?”;每一行的点击次数均为0。

Search Console显示的这些记录没有被截断,因此值得一看——因为以特定人物视角构建的查询语句在完整形式下更容易被识别。

第一条记录值得特别注意。这条查询内容其实就是我自己的标题,几乎是一字不差地复述了我的标题。那些已经选择了你的页面的用户,很可能会搜索你的标题,这就是为什么在某些情况下,排名最高的记录往往就是你的网站本身。这条记录获得了1,313次展示次数,但最终没有产生任何点击结果。

现在,让我们将这些情况与人们实际在搜索框中输入的内容进行对比。有四种输入方式会暴露机器的识别机制:

1. 完整的自然语言句子,包括标点符号。人类通常会直接输入“aeo tools”这样的关键词进行搜索,而不会像这样写:“作为北美一家中型公司的SEO负责人……”这种带有特定身份定位的表述会被系统视为任务指令,最终产生了193次搜索记录。

2>指令性语言而非疑问句。像“请从https://wildseo.co/中提取5个关键信息”这样的内容并不是真正的搜索请求,而是人类向助手下达的任务,助手才会去执行搜索操作。这类请求排在第2.8位,共产生了44次搜索记录。

3>几乎完全相同的短语变体。观察以“ai content citation criteria answer engine”开头的那些搜索记录,前20条中有4条其实是同一个短语的不同排列形式,比如“optimization”、“optimization aeo”以及“source selection”,它们分别出现在不同的位置上。人类通常只会输入一次这样的关键词,而系统则会以多种方式重复生成类似的请求,因此每种变体都会被单独记录为一次搜索记录。

4>机器生成的原始文本。上面提到的两条记录其实属于测验题目,并非真正的搜索请求,例如“在AI系统能够引用你的内容之前,它们必须先满足什么条件……”以及“哪种GPT模型使用了与……相同的全局基础设施”。在排名前20的搜索结果列表下方,这类机器生成的文本更加明显。由于脚本会检索多达1,000条记录,因此如果将`slice(0, 20)`的范围扩大,就能看到所有这些内容。在我的示例中,还包含了字符串`chatgpt://generic-entity?number=6`、简单的`yes`、占位符`yoursite.com`、以“true or false?”开头的题目、德语的完整句子查询,以及助手系统生成的提示信息片段“context: location: united states (not for language). do not in…”。显然,没有人会把这些内容输入到Google搜索框中。

如果你发现其中某一种情况,也许只是巧合;但如果在同一页面上看到了这四种现象,那么就可以确定这是由系统重复生成的请求带来的流量。

在Search Console界面中还可以进行另一个检查。打开相关页面,查看“搜索显示”这一选项卡。“搜索显示”功能会根据结果类型对搜索记录进行分类,比如是AI概览、丰富结果、视频还是常见问题解答等,而不仅仅是普通的蓝色链接。不过,Google只会为那些它选择报告的结果类型填充这些数据,因此如果这个面板为空,也不一定意味着什么。

对于这个页面来说,“搜索显示”选项卡根本没有显示任何记录,这说明Google并没有将这个页面的AI概览结果纳入报告范围。当然,没有相关数据也不能说明什么问题,所以不要把空白的“搜索显示”面板当作某种证据。只需记下这一点,然后继续下一步操作即可。

步骤4:与对照页面进行对比

单独来看一个页面,很难得出有意义的结论。也许你的网站所有页面的标题都设计得不够恰当,而使用对照页面就可以排除这种可能性。

<请选择你最优秀的文章——也就是你知道真正会有人阅读的那篇文章,然后在同一窗口中使用相同的脚本来运行它:》
npx tsx phantom-check.ts https://your-site.com https://your-site.com/your-best-page 90

同一个网站,使用相同的脚本,在同样的90天时间内,我发布的那篇模型对比文章《Fable 5 vs Opus 4.8: Every Reasoning Tier Benchmarked》的搜索数据如下:

https://chudi.dev/blog/claude-fable-5-vs-opus-4-8
测试时间:2026-05-19至2026-08-17(共90天)

总展示次数:30,704次;总点击次数:767次;平均排名:6.8位;点击率:2.50%

排名区间分布:
  前3名:140次展示,6次点击,44次查询
  页面其余部分:6,515次展示,273次点击,294次查询
  第2页:790次展示,5次点击,127次查询
  第3页及以后:222次展示,0次点击,65次查询
在同一时间段内,对照文章在Google Search Console中的表现数据。总点击次数为767次,总展示次数为30,700次,平均点击率为2.5%,平均排名为6.8位。直到6月初,这两条数据线都处于零值状态,之后便一起波动变化。

将这张图表与第一步中的图表进行对比。可以看到,这两条数据线是同步变化的,这正符合人类用户的搜索行为规律;而在“幻影页面”上,点击次数始终处于零值状态。

把这两组数据并排展示如下:

页面 展示次数及排名(4至10位) 点击次数及排名(4至10位)
"ChatGPT与Perplexity如何决定引用哪些来源" 3,068 0
"Fable 5 vs Opus 4.8: Every Reasoning Tier Benchmarked" 6,515 273

展示次数大约是前者的两倍,但点击次数仅为273次;而另一篇文章的展示次数虽然也差不多,但点击次数却为零。这两个文章来自同一个域名,由同一位作者撰写,通过相同的发布流程,在同样的90天时间内使用相同的脚本进行测试。

这些查询语句在类型上存在差异,因此表现也不同。对照页面的搜索结果主要是针对一些简短的关键词片段产生的,例如“fable low vs opus high”获得了691次展示和38次点击,“fable high vs opus max”获得了280次展示和25次点击;而这些查询语句其实是人类用户会输入的完整句子。

对照页面在Google Search Console中的查询数据表。这些查询语句都是简短的关键词片段,例如“fable low vs opus high”获得了691次展示和38次点击,“fable high vs opus max”获得了280次展示和25次点击。每一行都显示了非零的点击次数。’ height="400" loading="lazy" src="https://cdn.hashnode.com/uploads/covers/69d995ffc8e5007ddb1e81bb/ca245adb-55a8-42e7-920c-5040990de5f4.jpg" style="display:block;margin:0 auto" width="600"/>
<p>将这张表格与第三步中的表格并排展示。它们来自同一个网站,在相同的测试时间段内使用相同的脚本进行测试。其中一个页面的搜索结果主要由那些无法产生任何实际结果的長句子构成的查询语句决定,而另一个页面的搜索结果则主要受一些能够带来点击量的简短关键词片段的影响。</p><p>一旦你将这两种结果并排查看,那么得出结论就不再需要主观判断了。</p>
<h2 id="heading-what-i-rejected-and-why">我拒绝采用的方法及其原因</h2>
<p>首先,我尝试了另外三种方法。这三种方法看似都可行,但实际上效果都不佳。了解其中的原因可以让你避免走弯路。</p>
<h3 id="heading-rejected-a-daily-impression-variance-test">被否决的方法:每日印象变化率测试</h3>
<p>我的第一反应是,机器产生的流量应该比人类产生的流量更稳定,因此我比较了这两个页面的每日印象变化率。结果发现,“虚拟页面”的变化率为0.78,而“人类控制组”页面的变化率为0.69。根据这个测试结果,“虚拟页面”看起来反而比“人类控制组”页面更像人类产生的流量。</p>
<p>然而,这种测试方法实在过于粗糙,无法准确区分这两种流量之间的差异,而且其计算结果也与逻辑相悖。当一个精度较低的测量工具得出的结果与一个精确度更高的工具得出的结果不一致时,应该选择后者作为参考。</p>
<h3 id="heading-rejected-filtering-every-zero-click-row">被否决的方法:过滤所有零点击记录</h3>
<p>一种显而易见的自动化处理方式就是删除那些没有任何点击量的查询记录。但这种做法是错误的。因为这些记录往往对应的是那些刚刚开始在搜索结果中排名、尚未获得任何点击量的页面,所以删除它们会掩盖那些真正有潜力的优秀页面;此外,这种方法还会误判某些特殊情况。</p>
<p>正确的处理方式应该是从页面层面来进行优化:如果一个页面在其他地方能够吸引用户点击,那么其中出现零点击记录的那些条目其实也是值得关注的机会;而如果一个页面的所有查询记录在排名第11位时都完全没有获得任何点击量,那么这些记录就属于“虚假数据”。</p>
<h3 id="heading-rejected-another-title-rewrite">被否决的方法:再次修改标题</h3>
<p>在尝试这些方法之前,我已经在五个月内对这些页面的标题进行了五次修改,但点击量并没有因此增加。如果你已经多次改变某个变量却没有任何效果,那么下一次再做这种改变就不再是一种实验,而是一种习惯性行为了。在再次进行优化之前,先确认你想要优化的那个因素是否真的存在。</p>
<p>还有一个需要注意的问题:有时候,健康的页面也会被错误地标记为“虚假数据”。Search Console会将形如<code>page#section</code>的URL视为独立的记录,并将相应的印象数分配给这些记录,但点击量却会被归到父URL上。这样一来,就会产生一些零点击记录,而这些记录实际上属于那些表现良好的页面。</p>
<p>当我检查自己的候选列表时,发现124条记录中有64条都是这种类型的重复记录;其中有一篇表现良好的文章被错误地标记了六次,导致人们误以为它的点击率存在差距。在分析任何数据之前,一定要先删除那些URL中包含<code>#</code>符号的记录。</p>
<h2 id="heading-what-to-do-with-a-phantom-page">如何处理“虚假页面”</h2>
<p>对于这样的页面,什么都不需要做。这个答案可能让人感到不适,但确实才是正确的做法。</p>
<p>不要修改标题,也不要重新编写元描述信息,更不要通过内部链接来为它提供额外的推广机会。这些行为都是在为那些永远不会访问这些页面的用户进行优化,而这样做所耗费的时间和精力,其实可以用来优化那些真正有用户访问的页面。</p><p>这一发现实际上改变的,是你的监测工具以及你的预期:</p>
<ol>
<li><p><strong>不要将那些“虚拟查询”计入点击率统计中。</strong>任何试图修改页面标题的脚本或工具,都必须经过前面提到的页面级过滤机制;否则,它们就会不断将那些其实毫无价值的页面视为最重要的营销机会。</p>
</li>
<li><p><strong>不要把这些搜索结果简单地理解为用户需求。</p>如果一个数据面板显示有7,480次搜索记录,人们可能会误以为这代表有这么多真实用户关注了你的页面,但实际上这只是机器检索到的结果数量而已。在向客户或自己汇报数据时,千万不要把这些数字当作真正的用户兴趣来解读。谷歌自己在2026年8月11日为所有网站发布的生成式AI报告,也没有对这些搜索记录进行区分;我曾经深入研究了<a href="https://chudi.dev/blog/search-console-generative-ai-report">这份报告具体揭示了什么信息、又隐瞒了什么</a>。</p>
</li>
<li><p><strong>应该把这些数据看作是机器检索你的页面的信号,而这其实是个好消息。</p>这意味着你的页面被机器多次选为回答用户问题的信息来源,并且这些搜索结果通常出现在比较靠前的位置。我自己的页面上就有一些这样的“虚拟查询”:人们会向助手询问如何获取与某个特定页面内容相关的帮助。虽然这些查询并没有直接转化为用户的点击行为,但它们确实说明你的页面被机器认为是有参考价值的。这不是一个关于页面可见性的问题,而是一个关于信息归因机制的问题,需要用完全不同的方法来解决。如果你想直接测量这种被机器引用的情况,我开发的<a href="https://citability.dev">citability.dev</a>工具正好可以帮你做到这一点。</p>
</li>
</ol>
<p>关键就在于区分这两者。“我的页面没人看到”和“机器能看到我的页面,但分析数据却显示它不存在”,这两种情况需要采取完全不同的应对措施。</p>
<h2 id="heading-faq">常见问题解答</h2>
<p><strong>这是否意味着AI模式下的搜索记录毫无价值?</strong></p>
<p>并不如此。这些记录虽然不能算作点击行为,但仍然值得被关注和测量。它们说明机器在回答用户问题时选择了你的页面作为信息来源,这一事实是非常有参考价值的。</p>
<p><strong>我可以在Search Console界面中不使用脚本来实现这些分析吗?</p>
<p>可以部分实现。你可以筛选出某个特定页面,并按照搜索记录的数量对查询结果进行排序,这样那些以句子形式出现的查询就会显示出来。不过,该界面无法将某个页面的搜索记录分成不同的位置区间来进行分析,而正是这种区分才能帮助你把直觉转化为具体的决策。因此,脚本的作用就在于完成这一计算步骤。</p>
<p><strong>如果一个页面既有来自人类的搜索记录,也有来自机器的搜索记录,该怎么办?</p>
<p>大多数页面都是这种情况。这些数据会被分为不同的区间,有些区间会显示为点击行为,而有些区间则不会。在这种情况下,应该将这个页面视为“混合类型”的页面,而不是“虚拟查询”类型。只有当所有搜索记录的数量都为零时,才有必要将这个页面从点击率统计中剔除;否则,就应该继续正常优化它。</p>
<p><strong>如果阻止AI爬虫访问我的网站,这些搜索记录还会存在吗?</p><p>不,这就是我经常看到的最常见的错误。在《robots.txt》文件中添加<code>GPTBot</code>或<code>Google-Extended</code>这样的代码,会阻止那些用于收集文本以训练模型的爬虫程序的运行。查询请求实际上就是信息检索过程,而这些检索操作是使用谷歌普通的搜索索引来进行的,而负责提供这些搜索结果的也正是谷歌的爬虫系统。阻止这些爬虫程序的运行,并不会减少任何一条搜索结果;它只会让你自己的网站内容从被收录的数据集中消失而已。</p><strong>我应该多久运行一次这个分析脚本呢?</strong>
<p>每个季度对每个目标页面进行分析一次就足够了。因为这种分类方式能够准确反映该页面所匹配的查询类型,而不是那些会随时间变化的排名结果。</p>
<h2 id="heading-what-you-accomplished">你取得了哪些成果?</h2>
<p>Search Console只会显示页面的展示次数,但并不会告诉你是否有用户真正点击了这些页面。</p>
<p>通过以下四个步骤,你可以利用已有的数据来进行分析:</p>
<ol>
<li><p>获取该页面的各项数据总量,但不要相信平均排名这一指标。</p></li>
<li><p>将展示次数分成不同的区间进行统计。如果所有区间的点击次数都为零,尤其是前十大排名区间内都没有任何点击记录,那么这个页面就存在严重问题。</p></li>
<li><p>仔细阅读查询列表,分析其中出现的完整句子、指令内容、排列组合形式以及机器生成的文本片段等。</p></li>
<li><p>在相同的时间内,也对你的最佳页面运行同样的分析脚本。通过对比分析结果,就能发现问题所在。</p></li>
</ol>
<p>在下一轮标题修改之前,先在自己的网站上运行这个分析脚本吧。花20分钟进行这项工作,总比花费一个月的时间去优化那些根本不存在的目标受众要好得多。</p> </div> <section class="mt-12 border-t border-slate-200 pt-10 dark:border-slate-800"><h2 class="text-xl font-bold text-slate-900 dark:text-white">相关文章</h2><div class="mt-6 grid gap-6 md:grid-cols-2"><article class="group flex h-full flex-col overflow-hidden rounded-3xl border border-slate-200 bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-md dark:border-slate-800 dark:bg-slate-900"> <a href="/articles/How-to-Build-a-Knowledge-Graph-with-Python-and-Neo4j-%5BFull-Handbook%5D" class="relative block aspect-[16/10] overflow-hidden bg-slate-900"> <div class="absolute inset-0 bg-gradient-to-br from-blue-600 via-cyan-700 to-slate-900"> <div class="absolute inset-0 bg-[radial-gradient(circle_at_20%_80%,rgba(255,255,255,0.2),transparent_45%)]"></div> </div>   <div class="absolute inset-0 flex flex-col justify-end p-5"> <span class="inline-flex w-fit rounded-full px-3 py-1 text-xs font-semibold bg-blue-50 text-blue-700 dark:bg-blue-950/50 dark:text-blue-200">技术实践</span>  </div> </a> <div class="flex flex-1 flex-col p-5"> <p class="flex items-center gap-2 text-sm text-slate-500 dark:text-slate-400"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="h-4 w-4" data-icon="tabler:calendar">   <use href="#ai:tabler:calendar"></use>  </svg> <time datetime="Mon Aug 24 2026 05:03:16 GMT+0800 (China Standard Time)">2026年8月23日</time>  </p> <h3 class="mt-3 text-lg font-bold leading-snug text-slate-900 dark:text-white"> <a href="/articles/How-to-Build-a-Knowledge-Graph-with-Python-and-Neo4j-%5BFull-Handbook%5D" class="transition hover:text-violet-600 dark:hover:text-violet-300">如何使用Python和Neo4j构建知识图谱【完整指南】</a> </h3> <p class="mt-3 flex-1 text-sm leading-7 text-slate-600 dark:text-slate-300">你所处理的大部分数据实际上都反映了各种关系:一个客户属于某个账户,某次事件会影响某种服务,而一名工程师负责维护某个代码库。你把所有这些信息存储在表格中,长期以来,这种存储方式一直运行得非常顺利。 然而,有时会有人提出这样的问题: 哪些工程师最近了解过昨晚那次事件所影响的服务情况? 这类问题很容易理解,但编写相应的SQL查询却相当困难。通常需要使用四到五次连接操作,每次连接都会生成一个比最终结果范围更广的中间数据集,而大部分这些中间数据最终都会被丢弃。随着表格规模的扩大,查询速度会变得越来越慢,而且每次查看这个查询语句时,都很难理解其具体逻辑。 为了解决这类问题,人们才创造了图数据库。 在这本手</p> <a href="/articles/How-to-Build-a-Knowledge-Graph-with-Python-and-Neo4j-%5BFull-Handbook%5D" class="mt-4 inline-flex items-center gap-1 text-sm font-semibold text-violet-600 transition hover:text-violet-700 dark:text-violet-300">
阅读全文
<svg width="1em" height="1em" class="h-4 w-4 transition group-hover:translate-x-0.5" data-icon="tabler:arrow-right">   <symbol id="ai:tabler:arrow-right" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14m-6 6l6-6m-6-6l6 6"/></symbol><use href="#ai:tabler:arrow-right"></use>  </svg> </a> </div> </article><article class="group flex h-full flex-col overflow-hidden rounded-3xl border border-slate-200 bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-md dark:border-slate-800 dark:bg-slate-900"> <a href="/articles/Cloudflare-Adds-Agent-Tracing%2C-with-Truncation-Limits-and-Uneven-Payload-Defaults" class="relative block aspect-[16/10] overflow-hidden bg-slate-900"> <div class="absolute inset-0 bg-gradient-to-br from-blue-600 via-cyan-700 to-slate-900"> <div class="absolute inset-0 bg-[radial-gradient(circle_at_20%_80%,rgba(255,255,255,0.2),transparent_45%)]"></div> </div>   <div class="absolute inset-0 flex flex-col justify-end p-5"> <span class="inline-flex w-fit rounded-full px-3 py-1 text-xs font-semibold bg-blue-50 text-blue-700 dark:bg-blue-950/50 dark:text-blue-200">技术实践</span>  </div> </a> <div class="flex flex-1 flex-col p-5"> <p class="flex items-center gap-2 text-sm text-slate-500 dark:text-slate-400"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="h-4 w-4" data-icon="tabler:calendar">   <use href="#ai:tabler:calendar"></use>  </svg> <time datetime="Sun Aug 16 2026 04:15:16 GMT+0800 (China Standard Time)">2026年8月15日</time>  </p> <h3 class="mt-3 text-lg font-bold leading-snug text-slate-900 dark:text-white"> <a href="/articles/Cloudflare-Adds-Agent-Tracing%2C-with-Truncation-Limits-and-Uneven-Payload-Defaults" class="transition hover:text-violet-600 dark:hover:text-violet-300">Cloudflare新增了代理跟踪功能,该功能设置了数据截断限制,并为数据负载的大小设定了默认值。</a> </h3> <p class="mt-3 flex-1 text-sm leading-7 text-slate-600 dark:text-slate-300">Cloudflare推出了代理追踪功能,为代理调用、模型运行、工具执行以及相关审批操作添加了新的追踪数据。会话记录会按顺序依次回放,但文档中也提醒用户:这些追踪数据并非无损存储的,因此数据内容可能会被截断。不同框架在数据记录方面的默认设置也有所不同;从2026年10月1日起,所有的追踪数据都将被视为可计费的事件。 作者:Steef-Jan Wiggers</p> <a href="/articles/Cloudflare-Adds-Agent-Tracing%2C-with-Truncation-Limits-and-Uneven-Payload-Defaults" class="mt-4 inline-flex items-center gap-1 text-sm font-semibold text-violet-600 transition hover:text-violet-700 dark:text-violet-300">
阅读全文
<svg width="1em" height="1em" viewBox="0 0 24 24" class="h-4 w-4 transition group-hover:translate-x-0.5" data-icon="tabler:arrow-right">   <use href="#ai:tabler:arrow-right"></use>  </svg> </a> </div> </article><article class="group flex h-full flex-col overflow-hidden rounded-3xl border border-slate-200 bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-md dark:border-slate-800 dark:bg-slate-900"> <a href="/articles/How-to-Build-an-Automated-Workload-Model-for-Peak-Readiness" class="relative block aspect-[16/10] overflow-hidden bg-slate-900"> <div class="absolute inset-0 bg-gradient-to-br from-blue-600 via-cyan-700 to-slate-900"> <div class="absolute inset-0 bg-[radial-gradient(circle_at_20%_80%,rgba(255,255,255,0.2),transparent_45%)]"></div> </div>   <div class="absolute inset-0 flex flex-col justify-end p-5"> <span class="inline-flex w-fit rounded-full px-3 py-1 text-xs font-semibold bg-blue-50 text-blue-700 dark:bg-blue-950/50 dark:text-blue-200">技术实践</span>  </div> </a> <div class="flex flex-1 flex-col p-5"> <p class="flex items-center gap-2 text-sm text-slate-500 dark:text-slate-400"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="h-4 w-4" data-icon="tabler:calendar">   <use href="#ai:tabler:calendar"></use>  </svg> <time datetime="Wed Jul 29 2026 04:22:00 GMT+0800 (China Standard Time)">2026年7月28日</time>  </p> <h3 class="mt-3 text-lg font-bold leading-snug text-slate-900 dark:text-white"> <a href="/articles/How-to-Build-an-Automated-Workload-Model-for-Peak-Readiness" class="transition hover:text-violet-600 dark:hover:text-violet-300">如何构建用于确保在高峰时段能够正常运行的自动化工作负载模型</a> </h3> <p class="mt-3 flex-1 text-sm leading-7 text-slate-600 dark:text-slate-300">如果你曾经花费两天时间从APM工具中提取数据,只是为了回答“在我的负载测试中应该使用多少个虚拟用户?”这个问题,那么这个教程非常适合你。 通过学习这个教程,你将了解到如何在不到五分钟的时间内,直接从生产环境中的实时数据中计算出工作负载模型中所需的各个数值,而无需进行任何估算。 我们的应用场景: 每年,在黑色星期五之前的几周,性能工程师和运维人员都会面临同样的问题:有人需要为高峰期的负载测试建立工作负载模型,而且时间非常紧迫。 通常的做法是登录APM工具,导出CSV文件,在电子表格中对数据进行处理,然后根据这些数据对用户行为进行推测。这个过程需要花费数天的时间,还需要多个人参与,但最终得到的结果</p> <a href="/articles/How-to-Build-an-Automated-Workload-Model-for-Peak-Readiness" class="mt-4 inline-flex items-center gap-1 text-sm font-semibold text-violet-600 transition hover:text-violet-700 dark:text-violet-300">
阅读全文
<svg width="1em" height="1em" viewBox="0 0 24 24" class="h-4 w-4 transition group-hover:translate-x-0.5" data-icon="tabler:arrow-right">   <use href="#ai:tabler:arrow-right"></use>  </svg> </a> </div> </article><article class="group flex h-full flex-col overflow-hidden rounded-3xl border border-slate-200 bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-md dark:border-slate-800 dark:bg-slate-900"> <a href="/articles/Firestore-Data-Modeling-Guide%3A-Embedded-Documents-vs-Referencing-with-a-Blog-Case-Study" class="relative block aspect-[16/10] overflow-hidden bg-slate-900"> <div class="absolute inset-0 bg-gradient-to-br from-blue-600 via-cyan-700 to-slate-900"> <div class="absolute inset-0 bg-[radial-gradient(circle_at_20%_80%,rgba(255,255,255,0.2),transparent_45%)]"></div> </div>   <div class="absolute inset-0 flex flex-col justify-end p-5"> <span class="inline-flex w-fit rounded-full px-3 py-1 text-xs font-semibold bg-blue-50 text-blue-700 dark:bg-blue-950/50 dark:text-blue-200">技术实践</span>  </div> </a> <div class="flex flex-1 flex-col p-5"> <p class="flex items-center gap-2 text-sm text-slate-500 dark:text-slate-400"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="h-4 w-4" data-icon="tabler:calendar">   <use href="#ai:tabler:calendar"></use>  </svg> <time datetime="Sat Jul 25 2026 04:16:42 GMT+0800 (China Standard Time)">2026年7月24日</time>  </p> <h3 class="mt-3 text-lg font-bold leading-snug text-slate-900 dark:text-white"> <a href="/articles/Firestore-Data-Modeling-Guide%3A-Embedded-Documents-vs-Referencing-with-a-Blog-Case-Study" class="transition hover:text-violet-600 dark:hover:text-violet-300"> Firestore数据建模指南:内嵌文档与引用方式的选择(结合一个博客案例进行分析)</a> </h3> <p class="mt-3 flex-1 text-sm leading-7 text-slate-600 dark:text-slate-300">当开发人员从关系型数据库世界(如MySQL、PostgreSQL)转向Firebase这种NoSQL文档数据库时,他们往往会沿用原有的习惯,试图在新的系统中复制表结构、外键以及关联操作。 其结果是什么呢?复杂的查询语句、飞涨的读取成本,以及那种在添加少量功能后就变得难以维护的数据库结构。 要理解Firestore的工作原理,我们首先需要对比它所基于的关系型模型。只有弄清楚SQL是如何处理数据的,才能清楚地看到Firestore与它的区别所在,从而了解如何正确地构建NoSQL数据结构。 在本指南中,我们将介绍NoSQL的设计原则、数据嵌入与引用机制,以及各种类型的关系建模方法(1-1、1-N、N</p> <a href="/articles/Firestore-Data-Modeling-Guide%3A-Embedded-Documents-vs-Referencing-with-a-Blog-Case-Study" class="mt-4 inline-flex items-center gap-1 text-sm font-semibold text-violet-600 transition hover:text-violet-700 dark:text-violet-300">
阅读全文
<svg width="1em" height="1em" viewBox="0 0 24 24" class="h-4 w-4 transition group-hover:translate-x-0.5" data-icon="tabler:arrow-right">   <use href="#ai:tabler:arrow-right"></use>  </svg> </a> </div> </article></div></section> </article> <div class="w-full shrink-0 lg:w-56"> <aside class="w-full min-w-0 space-y-8 lg:sticky lg:top-24"> <section> <h2 class="text-sm font-semibold tracking-wide text-slate-900 dark:text-white">内容栏目</h2> <ul class="mt-3 flex flex-col gap-1"> <li> <a href="/articles/category/industry" class="block truncate rounded-lg px-2.5 py-1.5 text-sm font-medium transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300"> 行业洞察 </a> </li><li> <a href="/articles/category/technology" class="block truncate rounded-lg px-2.5 py-1.5 text-sm font-medium transition bg-violet-50 text-violet-700 dark:bg-violet-950/50 dark:text-violet-300"> 技术实践 </a> </li><li> <a href="/articles/category/product" class="block truncate rounded-lg px-2.5 py-1.5 text-sm font-medium transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300"> 产品动态 </a> </li> </ul> </section> <section> <h2 class="text-sm font-semibold tracking-wide text-slate-900 dark:text-white">文章分类</h2> <ul class="mt-3 flex flex-col gap-1"> <li> <a href="/articles/categories/%E5%AE%89%E5%85%A8" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="安全"> 安全 </a> </li><li> <a href="/articles/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="操作系统"> 操作系统 </a> </li><li> <a href="/articles/categories/product" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="产品方案"> 产品方案 </a> </li><li> <a href="/articles/categories/%E4%BA%A7%E5%93%81%E8%BF%90%E8%90%A5" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="产品运营"> 产品运营 </a> </li><li> <a href="/articles/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="大数据"> 大数据 </a> </li><li> <a href="/articles/categories/da-shu-ju" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition bg-violet-50 font-medium text-violet-700 dark:bg-violet-950/50 dark:text-violet-300" title="大数据"> 大数据 </a> </li><li> <a href="/articles/categories/printorder" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="电商打单"> 电商打单 </a> </li><li> <a href="/articles/categories/%E6%95%85%E9%9A%9C%E9%A2%84%E8%AD%A6" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="故障预警"> 故障预警 </a> </li><li> <a href="/articles/categories/%E6%9E%B6%E6%9E%84" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="架构"> 架构 </a> </li><li> <a href="/articles/categories/openapi" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="开放平台"> 开放平台 </a> </li><li> <a href="/articles/categories/uncategorized" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="默认"> 默认 </a> </li><li> <a href="/articles/categories/allsite" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="全渠道OMS+WMS"> 全渠道OMS+WMS </a> </li><li> <a href="/articles/categories/hotnews" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="热点关注"> 热点关注 </a> </li><li> <a href="/articles/categories/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="人工智能"> 人工智能 </a> </li><li> <a href="/articles/categories/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="软件开发"> 软件开发 </a> </li><li> <a href="/articles/categories/%E6%95%B0%E6%8D%AE%E5%BA%93" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="数据库"> 数据库 </a> </li><li> <a href="/articles/categories/%E7%A7%BB%E5%8A%A8" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="移动"> 移动 </a> </li><li> <a href="/articles/categories/%E4%B8%93%E5%AE%B6%E8%A7%82" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="专家观"> 专家观 </a> </li><li> <a href="/articles/categories/expertpoint" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="专家观点"> 专家观点 </a> </li><li> <a href="/articles/categories/iot" class="block truncate rounded-lg px-2.5 py-1.5 text-sm transition text-slate-600 hover:bg-slate-50 hover:text-violet-700 dark:text-slate-300 dark:hover:bg-slate-900 dark:hover:text-violet-300" title="IoT"> IoT </a> </li> </ul> </section> <section> <h2 class="text-sm font-semibold tracking-wide text-slate-900 dark:text-white">文章标签</h2> <ul class="mt-3 flex flex-wrap gap-1.5"> <li class="max-w-full"> <a href="/articles/tags/%E6%95%B0%E6%8D%AE" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="数据"> 数据 </a> </li><li class="max-w-full"> <a href="/articles/tags/strong" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="strong"> strong </a> </li><li class="max-w-full"> <a href="/articles/tags/data" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="data"> data </a> </li><li class="max-w-full"> <a href="/articles/tags/code" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="code"> code </a> </li><li class="max-w-full"> <a href="/articles/tags/span" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="span"> span </a> </li><li class="max-w-full"> <a href="/articles/tags/ai" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="AI"> AI </a> </li><li class="max-w-full"> <a href="/articles/tags/li" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="li"> li </a> </li><li class="max-w-full"> <a href="/articles/tags/%E6%95%B0%E6%8D%AE%E5%BA%93" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="数据库"> 数据库 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E6%A8%A1%E5%9E%8B" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="模型"> 模型 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E4%BD%BF%E7%94%A8" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="使用"> 使用 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="人工智能"> 人工智能 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E4%B8%AD" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="中"> 中 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E6%9C%8D%E5%8A%A1" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="服务"> 服务 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E4%BC%9A" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="会"> 会 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E6%8A%80%E6%9C%AF" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="技术"> 技术 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E7%B3%BB%E7%BB%9F" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="系统"> 系统 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E5%AE%89%E5%85%A8" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="安全"> 安全 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E7%94%A8%E6%88%B7" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="用户"> 用户 </a> </li><li class="max-w-full"> <a href="/articles/tags/em" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="em"> em </a> </li><li class="max-w-full"> <a href="/articles/tags/%E4%BB%A3%E7%A0%81" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="代码"> 代码 </a> </li><li class="max-w-full"> <a href="/articles/tags/%E4%BB%A3%E7%A0%81%EF%BC%8C%E4%BC%9A%E7%9A%84%E3%80%82" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="代码,会的。"> 代码,会的。 </a> </li><li class="max-w-full"> <a href="/articles/tags/nbsp" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="nbsp"> nbsp </a> </li><li class="max-w-full"> <a href="/articles/tags/ltr" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="ltr"> ltr </a> </li><li class="max-w-full"> <a href="/articles/tags/variable" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="variable"> variable </a> </li><li class="max-w-full"> <a href="/articles/tags/iot" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="iot"> iot </a> </li><li class="max-w-full"> <a href="/articles/tags/%E8%AE%BE%E5%A4%87" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="设备"> 设备 </a> </li><li class="max-w-full"> <a href="/articles/tags/href" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="href"> href </a> </li><li class="max-w-full"> <a href="/articles/tags/kafka" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="kafka"> kafka </a> </li><li class="max-w-full"> <a href="/articles/tags/python" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="python"> python </a> </li><li class="max-w-full"> <a href="/articles/tags/%E4%BA%91" class="inline-flex max-w-full truncate rounded-full px-2.5 py-1 text-xs font-medium transition bg-slate-100 text-slate-600 hover:bg-violet-50 hover:text-violet-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-violet-950/40 dark:hover:text-violet-300" title="云"> 云 </a> </li> </ul> </section> </aside> </div> </div> </div>  </main>  <footer class="relative not-prose border-t border-slate-200/80 bg-gradient-to-b from-slate-50 to-white dark:border-slate-800 dark:from-slate-950 dark:to-slate-900"> <div class="relative mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 intersect-once intersect-quarter intersect-no-queue motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade"> <div class="grid grid-cols-12 gap-10 py-12 md:gap-8 md:py-14 lg:gap-12"> <!-- Brand + WeChat --> <div class="col-span-12 lg:col-span-4"> <a class="inline-block" href="/" aria-label="返回首页"> <span class="inline-flex items-end gap-3 self-center whitespace-nowrap"> <img src="data:image/png;base64,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" alt="Cheeli" width="108" height="32" loading="eager" decoding="async" class="block h-8 w-auto shrink-0 invert hue-rotate-180 dark:invert-0 dark:hue-rotate-0"> <span class="relative pb-px pl-3 text-[15px] font-semibold leading-none tracking-[0.14em] text-slate-800 before:absolute before:bottom-0 before:left-0 before:h-3.5 before:w-px before:bg-slate-300/80 dark:text-slate-100 dark:before:bg-slate-600/80 md:text-base">
知力科技
</span> </span> </a> <p class="mt-4 text-sm font-semibold text-slate-800 dark:text-slate-100">蜂巢数字商业平台</p> <p class="mt-2 max-w-sm text-sm leading-6 text-slate-600 dark:text-slate-400">连接商业生态,赋能企业智能经营。</p> <div class="mt-6 inline-flex items-start gap-4 rounded-2xl border border-slate-200/80 bg-white p-3 shadow-sm dark:border-slate-700 dark:bg-slate-900/80"> <img src="/_astro/wechat-cheeli-tech-qrcode.CYWhZFv0.jpg" alt="知力科技官方微信公众号二维码" width="88" height="88" class="block h-[88px] w-[88px] shrink-0 rounded-xl bg-white object-contain" loading="lazy" decoding="async"> <div class="pt-1"> <p class="text-sm font-semibold text-slate-900 dark:text-white">官方公众号</p> <p class="mt-1 text-xs leading-5 text-slate-500 dark:text-slate-400">扫码关注,获取产品动态与行业洞察</p> </div> </div> <div class="mt-6 flex flex-wrap gap-x-4 gap-y-2 text-sm"> <a class="text-slate-500 transition hover:text-blue-600 dark:text-slate-400 dark:hover:text-blue-300" href="/privacy"> 隐私政策 </a><a class="text-slate-500 transition hover:text-blue-600 dark:text-slate-400 dark:hover:text-blue-300" href="/terms"> 服务条款 </a> </div> </div> <!-- Navigation columns --> <div class="col-span-12 grid grid-cols-2 gap-8 sm:grid-cols-3 lg:col-span-8 lg:gap-10"> <div> <p class="text-xs font-semibold uppercase tracking-[0.18em] text-slate-400 dark:text-slate-500"> 产品 </p> <ul class="mt-4 space-y-3"> <li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/products/open-platform"> 蜂巢开放平台 </a> </li><li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/products/omnichannel"> 蜂巢全渠道 </a> </li><li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/products/ai-agent"> AI智能应用 </a> </li> </ul> </div><div> <p class="text-xs font-semibold uppercase tracking-[0.18em] text-slate-400 dark:text-slate-500"> 解决方案 </p> <ul class="mt-4 space-y-3"> <li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/solutions/ecommerce-omnichannel"> 电商全渠道解决方案 </a> </li><li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/solutions/digital-goods"> 虚拟商品与数字权益解决方案 </a> </li><li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/solutions/order-fulfillment"> 企业订单履约解决方案 </a> </li><li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/solutions/private-mall"> 私域商城解决方案 </a> </li><li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/solutions/digital-connection"> 企业数字化连接解决方案 </a> </li><li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/solutions/ai-operations"> AI智能运营解决方案 </a> </li> </ul> </div><div> <p class="text-xs font-semibold uppercase tracking-[0.18em] text-slate-400 dark:text-slate-500"> 生态与内容 </p> <ul class="mt-4 space-y-3"> <li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/developers"> 开发者中心 </a> </li><li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/cases"> 客户案例 </a> </li><li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/articles"> 蜂巢洞察 </a> </li><li> <a class="text-sm text-slate-600 transition hover:text-blue-600 dark:text-slate-300 dark:hover:text-blue-300" href="/about"> 关于我们 </a> </li> </ul> </div> </div> </div> <!-- Legal bar --> <div class="flex flex-col gap-4 border-t border-slate-200/80 py-6 md:flex-row md:items-center md:justify-between dark:border-slate-800 md:py-7"> <div class="text-xs leading-6 text-slate-500 dark:text-slate-400"> <p class="text-slate-600 dark:text-slate-300">2026 Copyright © 上海知力信息科技有限公司 · All Rights Reserved</p> <p class="mt-1.5 flex flex-wrap items-center gap-x-2 gap-y-1"> <a class="transition hover:text-blue-600 dark:hover:text-blue-300" href="https://beian.miit.gov.cn/" rel="noopener noreferrer" target="_blank"> 沪ICP备09012674号 </a> <span class="text-slate-300 dark:text-slate-600" aria-hidden="true">|</span> <a class="inline-flex items-center gap-1 transition hover:text-blue-600 dark:hover:text-blue-300" href="https://www.beian.gov.cn/portal/registerSystemInfo?recordcode=31011502018658" rel="noopener noreferrer" target="_blank"> <img src="/_image?href=%2F_astro%2Fbeian-logo.hBd0lRJE.png&w=16&h=16&f=webp" loading="lazy" decoding="async" alt style="object-fit:cover;object-position:center;width:16px;height:16px;object-position:top left" width="16" height="16" class="block h-4 w-4 shrink-0"> 沪公网安备 31011502018658号 </a> <span class="text-slate-300 dark:text-slate-600" aria-hidden="true">|</span> <span>增值电信业务许可证:沪B2-20220251</span> </p> </div> <ul class="flex shrink-0 gap-1 md:justify-end"> <li> <a class="inline-flex items-center rounded-lg p-2.5 text-slate-500 transition hover:bg-slate-100 hover:text-slate-800 dark:text-slate-400 dark:hover:bg-slate-800 dark:hover:text-slate-100" aria-label="RSS" href="/rss.xml"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="h-5 w-5" data-icon="tabler:rss">   <use href="#ai:tabler:rss"></use>  </svg>  </a> </li> </ul> </div> </div> </footer>   <aside id="cheeli-float-panel" class="cheeli-float" data-collapsed="false" aria-label="客服联系方式" data-astro-cid-lduetl6a> <button type="button" class="cheeli-float__toggle" data-float-toggle aria-expanded="true" aria-controls="cheeli-float-panel-body" data-astro-cid-lduetl6a> <span class="cheeli-float__toggle-open" aria-hidden="true" data-astro-cid-lduetl6a>收起</span> <span class="cheeli-float__toggle-closed" aria-hidden="true" data-astro-cid-lduetl6a>客服</span> </button> <div id="cheeli-float-panel-body" class="cheeli-float__body" data-astro-cid-lduetl6a> <div class="cf-card cf-card--avatar" data-astro-cid-lduetl6a> <div class="cf-avatar" data-astro-cid-lduetl6a> <img src="/_astro/ocpm.2osPe16p.png" alt="蜂巢客服顾问" width="120" height="130" loading="lazy" decoding="async" data-astro-cid-lduetl6a> </div> <a class="cf-phone" href="tel:400-002-5767" data-astro-cid-lduetl6a>☎ 400-002-5767</a> </div> <div class="cf-card" data-astro-cid-lduetl6a> <img class="cf-qrcode" src="/_astro/wechat.BcEd01Bh.png" alt="客服微信二维码" width="130" height="140" loading="lazy" decoding="async" data-astro-cid-lduetl6a> <div class="cf-title" data-astro-cid-lduetl6a>扫码添加客服微信</div> </div> <a class="cf-btn white" href="https://wpa.qq.com/msgrd?v=3&uin=273785004&site=qq&menu=yes" target="_blank" rel="noopener noreferrer" aria-label="QQ 客服 273785004" data-astro-cid-lduetl6a> <img src="/_astro/qq.Bq_2h58v.png" alt="" width="16" height="18" loading="lazy" decoding="async" data-astro-cid-lduetl6a> <span data-astro-cid-lduetl6a>:273785004</span> </a> </div> </aside>  <script type="module">const c="cheeli-float-contact-collapsed";function d(t){if(t.dataset.bound==="true")return;t.dataset.bound="true";const e=t.querySelector("[data-float-toggle]");if(!e)return;const l=n=>{t.dataset.collapsed=n?"true":"false",e.setAttribute("aria-expanded",n?"false":"true");try{localStorage.setItem(c,n?"1":"0")}catch{}};let a=!1;try{a=localStorage.getItem(c)==="1"}catch{a=!1}l(a),e.addEventListener("click",()=>{l(t.dataset.collapsed!=="true")})}function o(){const t=document.getElementById("cheeli-float-panel");t instanceof HTMLElement&&d(t)}o();document.addEventListener("astro:page-load",o);</script> <script>(function(){const defaultTheme = "system";

  if (window.basic_script) {
    return;
  }

  window.basic_script = true;

  function applyTheme(theme) {
    if (theme === { elem.addEventListener(event, (e) => fn(e, elem), false); }); } } const onLoad = function () { let lastKnownScrollPosition = window.scrollY; let ticking = true; attachEvent('#header nav', 'click', function () { document.querySelector('[data-aw-toggle-menu]')?.classList.remove('expanded'); document.body.classList.remove('overflow-hidden'); document.getElementById('header')?.classList.remove('h-screen'); document.getElementById('header')?.classList.remove('expanded'); document.getElementById('header')?.classList.remove('bg-page'); document.querySelector('#header nav')?.classList.add('hidden'); document.querySelector('#header > div > div:last-child')?.classList.add('hidden'); }); attachEvent('[data-aw-toggle-menu]', 'click', function (_, elem) { elem.classList.toggle('expanded'); document.body.classList.toggle('overflow-hidden'); document.getElementById('header')?.classList.toggle('h-screen'); document.getElementById('header')?.classList.toggle('expanded'); document.getElementById('header')?.classList.toggle('bg-page'); document.querySelector('#header nav')?.classList.toggle('hidden'); document.querySelector('#header > div > div:last-child')?.classList.toggle('hidden'); }); attachEvent('[data-aw-toggle-color-scheme]', 'click', function () { if (defaultTheme.endsWith(':only')) { return; } Observer.removeAnimationDelay(); document.documentElement.classList.toggle('dark'); localStorage.theme = document.documentElement.classList.contains('dark') ? 'dark' : 'light'; }); attachEvent('[data-aw-social-share]', 'click', function (_, elem) { const network = elem.getAttribute('data-aw-social-share'); const url = encodeURIComponent(elem.getAttribute('data-aw-url')); const text = encodeURIComponent(elem.getAttribute('data-aw-text')); let href; switch (network) { case 'facebook': href = `https://www.facebook.com/sharer.php?u=${url}`; break; case 'twitter': href = `https://twitter.com/intent/tweet?url=${url}&text=${text}`; break; case 'linkedin': href = `https://www.linkedin.com/shareArticle?mini=true&url=${url}&title=${text}`; break; case 'whatsapp': href = `https://wa.me/?text=${text}%20${url}`; break; case 'mail': href = `mailto:?subject=%22${text}%22&body=${text}%20${url}`; break; default: return; } const newlink = document.createElement('a'); newlink.target = '_blank'; newlink.href = href; newlink.click(); }); const screenSize = window.matchMedia('(max-width: 767px)'); screenSize.addEventListener('change', function () { document.querySelector('[data-aw-toggle-menu]')?.classList.remove('expanded'); document.body.classList.remove('overflow-hidden'); document.getElementById('header')?.classList.remove('h-screen'); document.getElementById('header')?.classList.remove('expanded'); document.getElementById('header')?.classList.remove('bg-page'); document.querySelector('#header nav')?.classList.add('hidden'); document.querySelector('#header > div > div:last-child')?.classList.add('hidden'); }); function applyHeaderStylesOnScroll() { const header = document.querySelector('#header[data-aw-sticky-header]'); if (!header) return; if (lastKnownScrollPosition > 60 && !header.classList.contains('scroll')) { header.classList.add('scroll'); } else if (lastKnownScrollPosition <= 60 && header.classList.contains('scroll')) { header.classList.remove('scroll'); } ticking = false; } applyHeaderStylesOnScroll(); attachEvent([document], 'scroll', function () { lastKnownScrollPosition = window.scrollY; if (!ticking) { window.requestAnimationFrame(() => { applyHeaderStylesOnScroll(); }); ticking = true; } }); }; const onPageShow = function () { document.documentElement.classList.add('motion-safe:scroll-smooth'); const elem = document.querySelector('[data-aw-toggle-menu]'); if (elem) { elem.classList.remove('expanded'); } document.body.classList.remove('overflow-hidden'); document.getElementById('header')?.classList.remove('h-screen'); document.getElementById('header')?.classList.remove('expanded'); document.querySelector('#header nav')?.classList.add('hidden'); }; window.onload = onLoad; window.onpageshow = onPageShow; document.addEventListener('astro:after-swap', () => { initTheme(); onLoad(); onPageShow(); }); })();