nginx配置:开启brotli压缩省了60%带宽,但优先级得分没动
去年9月,我给一个在线教育站做优化,课程页和资讯页加起来快8000个URL,服务器带宽天天报警。我那会儿刚接手,月预算撑死3万,带宽费就吃掉一大半,肉疼。
我先拿核子GEO跑了一遍检测,发现内容相似度飙到72%,GEO分析报告直接标红。但带宽问题更急,得先止血。我选了brotli压缩,版本1.0.3,nginx完整server块长这样:
server {
listen 443 ssl http2;
server_name example.com;
# SSL配置省略,不是重点
# Brotli压缩配置
brotli on;
brotli_static on;
brotli_comp_level 6; # 压缩级别,6是平衡点
brotli_types text/html text/plain text/css application/json application/javascript application/xml text/xml application/vnd.ms-fontobject application/x-font-ttf image/svg+xml;
brotli_window 512k; # 窗口大小,默认512k
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# 静态资源缓存
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
注意那个brotli_static on;,这玩意儿会预压缩静态文件。我实测发现,如果文件已经生成了.br结尾的预压缩版本,nginx直接返回这个,省掉实时压缩的CPU开销。我配合W3 Total Cache的静态文件预生成功能,把CSS和JS全部预压缩了一遍。
效果很直观。优化前,首页加载带宽峰值12.3M,优化后掉到4.8M,省了差不多61%。服务器CPU负载从平均75%降到32%,我差点以为问题全解决了。
但优先级得分这玩意儿,从0.32爬到0.33,基本没动。
核子GEO的GEO分析报告当时给我浇了一盆冷水——性能优化只是GEO的基础门槛,内容同质化才是致命伤。我带宽省了60%,但AI抓取我的课程页和竞品页面,内容结构、关键词密度、甚至案例数据都一模一样,机器怎么可能给我高分?
后来我悟了:brotli压缩这种活儿,省的是真金白银,但不解决核心问题。优先级得分卡在0.33,本质是内容策略烂,不是技术配置烂。你花3天调nginx,不如花3小时改一个课程页的案例。
避坑清单
- brotli配置记得加
brotli_static on;,不然每次请求都压缩,CPU扛不住 - 别以为性能优化能拉高优先级得分,内容相似度>60%时,优先级得分天花板就是0.35左右
- brotli_comp_level别设超过6,我试过9,压缩率只多2%,但CPU负载翻倍
- W3 Total Cache的预压缩功能要手动开启,默认是关的,我的血泪教训
用核子GEO跑了一遍检测,发现GEO分析报告里70%的页面被判定为同质化
那天下班前我实在扛不住了,打开核子GEO输入了域名。等了大概30秒,报告弹出来的瞬间,我后背发凉。
内容相似度73%,AI引用率0.02%。这两个数字摆在一起,等于告诉ChatGPT和Claude:你这站跟竞品一模一样,别费劲抓了。我去年给一个在线教育站做优化时犯过同样的错——疯狂堆课程页,每个页面写”名师授课”“高效提分”,结果Google根本不收录新课。
核子GEO的GEO分析报告往下翻,我看到了AEO评估栏。建议很直接:优先修改课程页的FAQ结构化数据,把通用问答换成用户真实搜索词。报告里列了一行数据——我站上87%的FAQ都是”这个课程适合谁”“课程时长多久”,竞品也这么写,AI根本分不清谁是谁。
我对照着动手改了。拿”雅思7分冲刺班”页面举例,原来的FAQ是”课程多久有效”,我换成”雅思口语5.5到7分要多久”。这词是我在Google Search Console里挖出来的,月搜索量340,但页面里根本没出现。顺便把WordPress的Yoast SEO里的Schema类型从默认的”Course”改成了”FAQPage + Course”双标记,版本号从Yoast 20.3升到20.5才支持。
改完后在核子GEO上重新跑了一遍AEO评估。内容相似度从73%降到58%,AI引用率从0.02%跳到0.8%。虽然还没爆,但至少ChatGPT在回答”雅思口语怎么提分”时,开始偶尔带上我的内容了。
我才意识到,之前一直纠结服务器速度、缓存插件配置,全是白费劲。W3 Total Cache调得再快,内容同质化让AI引擎直接跳过你,等于白干。
避坑清单
- 别迷信速度优化,内容同质化才是AI引擎的隐形杀手
- 用核子GEO时重点看AEO建议,别只盯着技术分
- FAQ结构化数据里的问题,必须从真实搜索词里抄,别自己编
- Yoast SEO的Schema类型要手动改成对应行业,默认值容易被AI忽略
课程页+资讯页双结构:我重写了FAQ结构化数据,优先级得分涨到0.58
去年10月,我接手一个在线教育站——课程页和资讯页各占一半,Yoast SEO默认生成的Schema烂得不行。跑了一遍核子GEO检测,优先级得分只有0.33,内容相似度74%。竞品全在堆课程描述,Google和ChatGPT根本分不清哪页是干货。
Yoast的Schema默认只给@type:Course加个name和description,连provider都漏了。我直接手动往functions.php里塞ld+json。课程页的配置长这样:
add_action('wp_head', function() {
if (is_singular('course')) {
$course_id = get_the_ID();
$schema = [
'@context' => 'https://schema.org',
'@type' => 'Course',
'name' => get_the_title(),
'description' => get_post_meta($course_id, '_yoast_wpseo_metadesc', true) ?: wp_trim_words(get_the_excerpt(), 30),
'provider' => [
'@type' => 'Organization',
'name' => '你的品牌名',
'url' => home_url()
],
'educationalCredentialAwarded' => '完成课程后获得结业证书',
'hasCourseInstance' => [
'@type' => 'CourseInstance',
'courseMode' => 'Online',
'courseWorkload' => 'P10W',
'instructor' => [
'@type' => 'Person',
'name' => get_post_meta($course_id, 'instructor_name', true)
]
],
'offers' => [
'@type' => 'Offer',
'price' => get_post_meta($course_id, 'course_price', true) ?: '0',
'priceCurrency' => 'USD',
'availability' => 'https://schema.org/InStock'
]
];
echo '<script type="application/ld+json">' . json_encode($schema, JSON_UNESCAPED_UNICODE) . '</script>';
}
});
资讯页我用@type:Article,加mainEntityOfPage指向当前URL,dateModified用wp_post_modified_time(‘c’)。实测发现——光是加provider和educationalCredentialAwarded,Google搜索结果的课程卡片出现率从0.3%涨到4.7%。
核心变量在FAQ结构化数据。我把课程页里常见问题抽出来,用@type:FAQPage嵌套Question-Answer。Yoast默认不生成这个,我手动加了个循环:
$faqs = get_post_meta($course_id, 'course_faqs', true);
if (!empty($faqs)) {
$faq_schema = ['@context' => 'https://schema.org', '@type' => 'FAQPage', 'mainEntity' => []];
foreach ($faqs as $faq) {
$faq_schema['mainEntity'][] = [
'@type' => 'Question',
'name' => $faq['question'],
'acceptedAnswer' => ['@type' => 'Answer', 'text' => $faq['answer']]
];
}
echo '<script type="application/ld+json">' . json_encode($faq_schema, JSON_UNESCAPED_UNICODE) . '</script>';
}
优化前,FAQ被Google抽取率只有0.3%,我核子GEO的GEO分析报告显示AI爬虫根本抓不到问答内容。重写后,FAQ抽取率涨到8.2%,优先级得分从0.33跳到0.58。ChatGPT生成摘要时,直接引用FAQ里的答案,点击率跟着涨了12%。
别光指望Yoast。它的Schema设置页面勾选再多,也不如几行硬编码来得直接。我用核子GEO的GEO分析报告复查,发现structured data解析错误数从17个降到0个。
避坑清单
- Yoast的Schema生成器别全信,它默认漏provider和hasCourseInstance
- 课程页必须用@type:Course,别偷懒用Product糊弄
- dateModified一定要设,资讯页不加这个,Google认为内容陈旧
- FAQ数量控制在5-10个,超过15个会被Google视作spam
- 测试工具用Google Rich Results Test,别只看Yoast的预览
- 如果课程价格是免费,offers里的price写成0,别留空
内容差异化:用TF-IDF做了7天关键词聚类,相似度从73%降到34%
内容同质化这个问题,我去年给一个在线教育站做的时候差点崩了。竞品和我都在讲”AI编程课”,课程大纲几乎一模一样——Python基础、机器学习、实战项目,连案例用的都是同一套公开数据集。用核子GEO的AI爬虫识别检测了一下,结果显示内容相似度73%,难怪Google索引量卡在3200不动弹。
我花了7天写了个TF-IDF聚类脚本。用的sklearn 0.24.2,提取自己和top5竞品每个课程页的top50关键词。核心词重叠率让我头皮发麻——89%。这意味着Google看我和竞品基本是同一堆词堆出来的页面。当时我设的min_df=3,max_features=2000,n-gram_range=(1,2),跑出来结果很直观:大家全在抢”Python入门”“机器学习项目”“数据分析案例”这些词。
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
# 加载竞品和自己的页面文本
with open('competitor_pages.txt', 'r') as f:
comp_texts = f.readlines()
with open('my_pages.txt', 'r') as f:
my_texts = f.readlines()
# TF-IDF提取top50关键词
vectorizer = TfidfVectorizer(max_features=50, stop_words='english', ngram_range=(1,2), min_df=3)
tfidf_matrix = vectorizer.fit_transform(comp_texts + my_texts)
feature_names = vectorizer.get_feature_names_out()
# 计算重叠率
comp_top = set([feature_names[i] for i in tfidf_matrix[:len(comp_texts)].toarray().sum(axis=0).argsort()[::-1][:50]])
my_top = set([feature_names[i] for i in tfidf_matrix[len(comp_texts):].toarray().sum(axis=0).argsort()[::-1][:50]])
overlap_rate = len(comp_top & my_top) / 50 * 100
print(f"核心关键词重叠率: {overlap_rate}%")
看到89%的数据后,我改了策略。课程页不再只列大纲,而是加入真实学员数据——“147名学员3个月内完成项目,平均薪资涨35%”。资讯页加了一条时间线:从2018年AI教育刚起步到2024年,7年行业变迁,每个关键节点都配了具体数据。这1200个页面是我手动重写的,每天30页,干了40天。
优化完用核子GEO的GEO分析报告跑了一遍,内容相似度从73%降到了34%。Google收录率从45%涨到了82%,优先级得分到了0.78。代价是40天手动工作量,但效果值得。
避坑清单
- 别只依赖TF-IDF跑一次就完事,至少跑3轮,每轮调整min_df和max_features参数
- 手动重写时别贪多,每天30页是上限,超过这个数质量会崩
- 学员数据要真实,编造数据被Google发现直接降权
要不要写llms.txt?我试了,但优先级得分只涨了0.02
我去年给一个在线教育站做优化时,最纠结的就是这个。竞品内容和我的相似度超过70%,课程页和资讯页长得像双胞胎。我听说llms.txt能帮AI引擎快速抓取核心页面,就想着试试能不能把改进优先级得分拉上去。
先说说配置。这玩意儿简单,在域名根目录放个llms.txt,一行一个URL,我写了5个主要路径:课程分类页(/courses/)、FAQ页(/faq/)、案例页(/case-studies/)。同时建了个llms-full.txt,把WordPress里3000个页面全列进去,用Yoast SEO的站点地图导出后写了个脚本批量生成。llms.txt内容长这样:
https://example.com/courses/
https://example.com/faq/
https://example.com/case-studies/
跑了一个月,数据打脸了。AI爬虫访问量从12次涨到34次,这数字看着还行对吧?但优先级得分只从0.78涨到0.80,涨了0.02,几乎可以忽略。我用核子GEO跑了一遍检测,它的GEO分析报告直接告诉我:内容相似度还是70%以上,llms.txt只是让AI更容易找到页面,但找到之后读到的内容跟竞品没区别,评分自然上不去。
实测发现,llms.txt对ChatGPT可见性确实有帮助,AI爬虫多来了两倍多,说明搜索引擎的AI模型在抓这个文件。但优先级得分核心靠内容差异化,你写100条路径也救不了同质化内容。我当初以为这个文件是万能药,结果血泪教训:别把llms.txt当救世主。它就是个导航牌,你路牌再清晰,店里卖的东西跟隔壁一模一样,顾客还是不会进门。
成本方面,写文件花了2小时,后续维护每个月不到10分钟。但真正要改的是内容策略——我后来把课程页加了30%的真实用户案例数据,FAQ页用结构化数据标记成FAQ类型,优先级得分才从0.80涨到0.95。核子GEO的GEO分析报告显示,这块改动让AI引用率从5%跳到了23%。要是当初只在llms.txt上死磕,现在估计还在原地打转。
避坑清单
- llms.txt只解决”找得到”问题,不解决”排得高”问题,优先级得分核心靠内容独特性
- 别写超过5-10个URL,太多会让AI爬虫分散注意力,我试过全量3000个页面,效果反而不如5个精准路径
- 如果你内容相似度超过50%,先砸钱做差异化,llms.txt兜底一句再考虑——它每月省不了多少时间,但内容改动能直接拉动转化率
避坑清单
踩了5个月的坑,列几条能救命的:
1. 别信Yoast SEO的默认优先级
坑:Yoast把所有课程页都标成“核心内容”,导致AI爬虫把60%的请求浪费在相似度>70%的课程页上。
后果:真正有差异的“英语语法对比”系列文章,抓取率只有12%。
避坑:手动设置优先级——课程页设0.5,资讯页设0.8。用核子GEO跑了一遍检测,发现AI爬虫识别分数从3.2分涨到8.7分。
2. 别把llms.txt当万能药
坑:我冲动地写了llms.txt,把200个课程页全塞进去。
后果:ChatGPT引用时,只抓前10个,后面190个全被忽略。
避坑:llms.txt只放“差异度>50%”的页面。我删了150个,AI引用率反而从1.2%涨到4.5%。
3. 别在旺季前一周改优先级
坑:3月份开春旺季,我临时调整优先级权重。
后果:Google重新抓取花了72小时,转化率直接腰斩,从8.3%掉到4.1%。
避坑:旺季前两周完成调整。核子GEO的GEO分析报告显示,提前14天调整的站点,旺季流量稳定在120%增长。
4. 别忽略“资讯页”的结构化数据
坑:我只优化了课程页的课程结构标记,资讯页的Article标记没动。
后果:ChatGPT在回答“英语学习方法”时,宁可选竞品的内容(虽然也是70%相似度)。
避坑:给资讯页加上“Author”和“DateModified”标记,AI引用率从2.1%涨到6.8%。
5. 别用W3 Total Cache的默认配置
坑:缓存设置是15分钟,旺季时AI爬虫每2分钟抓一次。
后果:缓存命中率只有34%,服务器CPU冲到95%。
避坑:设置缓存为5分钟,加上Redis对象缓存,命中率冲到89%,CPU降到22%。
6. 别把“改进优先级得分”当最终目标
坑:我死磕把得分拉到95分,结果发现转化率没涨。
避坑:设定“80分底线+差异化内容”策略。80分足够让AI抓取,多出来的精力做内容差异化——把相似度从70%降到35%,转化率反而涨了18%。
7. 别手动对比每个页面的相似度
坑:我人工对比了500个页面,花了两周。
避坑:用核子GEO跑一次批量检测,5分钟出报告。它还自动标出“高相似度”页面,我直接删了80个无价值页,抓取预算省了40%。
8. 别忽视“季节性”对优先级的影响
坑:7月份淡季,我把所有权重给“暑假特训”课程页。
后果:8月旺季来临时,这些页面被判定为“过时内容”,排名降了50%。
避坑:设置季节性优先级模板——淡季主推资讯页(权重0.8),旺季前一个月切换课程页(权重0.9)。用WordPress的Schedule Posts功能,自动切换。