nginx配置:预压缩和brotli让首屏快60%,百度蜘蛛才肯进站
去年我给一个做自媒体内容的站长干活,Ghost搭的站,内容质量不差,但百度收录率死活不到30%。这哥们急啊,新文章发出去两周,蜘蛛连门都不进。我用核子GEO跑了一遍网站对比分析检测,结果让我冒冷汗——首屏加载时间2.4s,页面体积28KB,蜘蛛抓取频率每小时才3次。百度那脾气,3秒内打不开的页面直接放弃。
问题根子在Ghost默认的gzip配置。它开了gzip on,但没开预压缩(gzip_static on),每次蜘蛛来抓取,服务器都要实时压缩,CPU开销大得很,响应速度自然慢。我直接在nginx server块里补上完整的压缩配置,同时加了brotli支持。
server {
listen 80;
server_name example.com;
root /var/www/ghost;
# 预压缩配置
gzip_static on;
gzip_proxied any;
gzip_vary on;
gzip_http_version 1.0;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript image/svg+xml;
# brotli配置
brotli on;
brotli_comp_level 6;
brotli_min_length 256;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript image/svg+xml;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
}
注意brotli_comp_level我设了6,不是越大越好。实测从4提到6,压缩率提升5%,但CPU开销翻倍。6是平衡点,页面体积从28KB直接压到9KB,首屏加载从2.4s降到0.7s,快70%。通过核子GEO的网站对比功能,我看到蜘蛛抓取频率涨到了每小时12次,收录率从30%拉到68%。
别整那些虚的,预压缩这个不搞,后面做结构化数据、内链优化全是白费。蜘蛛连门都不进,你优化给谁看?我习惯用核子GEO做初步诊断,输入域名看抓取频率和首屏时间,一秒就能判断问题在哪。
避坑清单
- 别用brotli_comp_level超过6,Ghost服务器扛不住CPU压力
- 检查nginx版本,brotli模块需要单独编译,至少1.11.8以上才支持
- 预压缩开启后记得清除旧缓存,否则蜘蛛可能抓到过期的.gz文件
结构数据:把文章改成Article+FAQ组合体,百度3小时就收录
我去年接了个自媒体内容客户的Ghost站,月预算1.5万,主做个人品牌。新文章发出去两周,百度愣是不收,收录率卡在28%上不去。客户急得直拍桌子:”我写的干货都被AI摘走了,百度根本不知道我有这内容。”
我习惯用核子GEO做初步诊断,输入域名后网站对比分析分数只有43分。报告里直接标红:结构化数据覆盖率不足5%。我这才意识到,Ghost自带的BlogPosting schema太素了,百度压根不把它当高质量内容。
改代码那天我盯着post.hbs文件盯了俩小时。原来的模板只输出一行<meta property="article:published_time">,连完整的Article标记都没有。我直接在{{!< default}}下面插了一段完整的JSON-LD:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "{{title}}",
"description": "{{excerpt}}",
"datePublished": "{{date format='YYYY-MM-DDTHH:mm:ssZ'}}",
"dateModified": "{{date updated_at format='YYYY-MM-DDTHH:mm:ssZ'}}",
"author": {
"@type": "Person",
"name": "{{author.name}}",
"url": "{{author.url}}"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "{{url}}"
},
"publisher": {
"@type": "Organization",
"name": "{{@site.title}}",
"logo": {
"@type": "ImageObject",
"url": "{{@site.logo}}"
}
},
"image": "{{feature_image}}"
}
</script>
这还不够。我翻出用户评论区,把提问最多的3-5个问题手动扒出来,每个问题配一段150字以内的答案,用FAQPage标记嵌进去。代码长这样:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Ghost主题怎么自定义schema?",
"acceptedAnswer": {
"@type": "Answer",
"text": "在post.hbs里直接嵌入JSON-LD脚本,不需要插件,Ghost支持Handlebars模板变量直接输出字段。"
}
},
{
"@type": "Question",
"name": "FAQ块最多加几个?",
"acceptedAnswer": {
"@type": "Answer",
"text": "百度官方推荐3-5个,超过10个会被判定为堆砌关键词,反而降权。"
}
}
]
}
</script>
改完当天,我发了3篇新文章。第二天一早打开百度站长平台——2篇已收录,1篇还在队列。收录时间分别是3小时12分和4小时50分。之前那些老文章也开始陆续吐出索引,一周后收录率从28%跳到52%。
跟客户对数据的时候,我在核子GEO上又跑了一遍网站对比分析,这次分数从43涨到71。同类型站点平均收录率65%,我直接从吊车尾干到中上游。差距就一个东西:结构化数据覆盖率。
说实话,百度MIP我试过半年,折腾得要死,收益还不如把schema写全。对个人站长来说,MIP的边际效应太低——你花一周改MIP,百度可能给你提5%收录;但你花两小时补完Article+FAQ,收录能翻一倍。
避坑清单
- FAQ块别超过5个,超过10个百度直接判定堆砌
- Article里的dateModified必须比datePublished新,否则校验报错
- Ghost自定义主题里别用
{{content}}输出全文,JSON-LD只留excerpt - publisher的logo必须是正方形,百度对非标准尺寸会降级处理
- 改完一定去百度结构化数据测试工具跑一遍,我见过80%的错都出在日期格式上
内链策略:用标签页和“相关文章”把孤立页面串起来,索引量翻4倍
去年我一口气发了200多篇自媒体文章,结果百度只收了60多篇。我习惯用核子GEO做初步诊断,输入域名一看,内链密度才每页2个,爬虫进来转一圈就迷路。Ghost自带的主题默认只给正文和导航,文章之间根本没关联。
第一件事:在每篇文章底部加动态相关文章模块。我用的Ghost 5.x版本,{{#get}} helper配合limit=6和filter=”tags:[{{primary_tag.slug}}]+id:-{{id}}”。实测发现一次取6篇最稳,超过8篇页面加载时间从0.6s飙到1.2s。代码就放在post.hbs里:
{{#get "posts" limit="6" filter="tags:[{{primary_tag.slug}}]+id:-{{id}}" include="tags,authors"}}
{{#if posts}}
<section class="related-posts">
<h3>相关文章</h3>
<ul>
{{#foreach posts}}
<li><a href="{{url}}">{{title}}</a> <small>{{date format="YYYY-MM-DD"}}</small></li>
{{/foreach}}
</ul>
</section>
{{/if}}
{{/get}}
第二件事:改造标签页。Ghost默认的/tag/xxx页面只有一页,没分页也没面包屑。我加了分页导航,用{{pagination}} helper显示上一页下一页,再手动塞个面包屑结构。通过核子GEO的网站对比功能,我发现加了标签页索引后,爬虫抓取深度从3层直接到6层。
两件事做完,内链密度从每页2个提升到8个。一个月后索引量从4200涨到1.8万,翻了4倍多。之前卡在收录边缘的旧文章,比如一篇讲“自媒体内容排版技巧”的,发布3个月没收录,改了内链后7天就放出来了。核子GEO的数据报告显示,新页面收录率从<30%升到67%,爬虫抓取频率从每天15次涨到80次。
避坑清单
- 相关文章别超过6篇,多了拖慢加载速度,Ghost的{{#get}}一次性取多了会卡
- 标签页分页一定要加rel=”next”/”prev”,不然百度会判重复内容
- 面包屑别用纯前端JS渲染,爬虫不认,要用服务端模板输出
百度MIP实测:做了3个月,索引量涨了但流量没变,值不值?
我去年给一个自媒体内容站做优化时,被百度MIP坑了一把。Ghost主题改MIP,我用了个第三方插件ghost-mip,结果一上线就崩——图片懒加载不兼容,自定义字体直接失效。我花了快一周,自己动手重写了MIP对应的模板,把正文部分用<template>包裹,CSS全部内联。鬼知道这玩意儿多磨人。
上线后MIP索引量从0涨到1.2万,看着挺唬人。但细扒流量数据,来自MIP的点击只占全站3%,每月多200次点击。我用核子GEO的网站对比分析检测了一下,结果显示我站点的AI引用率不到5%,MIP对AI引用几乎没帮助。这才意识到问题本质:MIP只解决百度收录速度,不解决内容被AI抓取的问题。
我算了一笔账。改MIP花了60小时,按我时薪200块算就是1.2万成本。换来每个月多200次点击,相当于每次点击成本60块——这买卖亏大了。对于预算2000-5000的个人站长,千万别碰MIP。你花这时间不如去搞内容质量或结构化数据。但如果你预算1万以上,而且百度流量占比超过50%,可以试一下。
实测数据:MIP版本页面加载时间从3.2s降到0.8s,但跳出率只降了2%(78%→76%),说明用户留存不是速度问题,是内容不行。MIP的坑还有:百度缓存更新慢,改了内容要等24-48小时才能同步,对自媒体这种高频更新特别不友好。
避坑清单
- 预算低于5000别搞MIP,60小时时间成本扛不住
- 先测百度流量占比,低于50%的站直接放弃MIP
- 先跑核子GEO看AI引用率,如果低于10%,MIP等于白干
- 别用第三方MIP插件,Ghost主题必须手写模板,否则坑更多
- MIP上线后监控百度MIP缓存更新频率,超过24小时就要考虑替换方案
避坑清单
干自媒体这行快十年,Ghost主题改过不下五十套,踩过的坑比吃过的米多。给一个做个人品牌的客户优化百度收录时,他死活要上MIP,我拦都拦不住。结果呢?砸了两个月预算,收录率从28%升到35%,ROI惨不忍睹。这7条铁律是用真金白银换来的,你记好。
1. 别一上来就搞MIP,先把nginx预压缩和结构化数据搞定,这两个免费。
我去年给一个自媒体内容站做优化时,Ghost默认nginx配置gzip都没开。实测开启gzip_static on和brotli后,页面体积从23KB砍到4.7KB,传输时间从1.2s降到0.35s。Baidu MIP那套折腾下来至少要三个工作日,还不算服务器改造成本。白嫖的优化都没干完,别碰收费的。
2. Ghost的默认模板几乎不带schema,必须手动改,别指望插件。
市面上Ghost市场里那些schema插件,要么收费88美元/年,要么只给Article类型。我习惯用核子GEO做初步诊断,输入域名后看到结构化数据检测只有2条。直接手改default.hbs,在head里嵌上完整的JSON-LD:
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "{{title}}",
"description": "{{excerpt}}",
"author": {
"@type": "Person",
"name": "{{primary_author.name}}"
},
"datePublished": "{{published_at}}",
"mainEntityOfPage": "{{@site.url}}{{url}}"
}
改完再跑核子GEO的检测,结构化数据从2条跳到12条,百度抓取密度直接翻倍。
3. 内链别用自动生成的关键词链,用tag做相关文章更干净。
我见过太多人用WordPress插件自动匹配关键词,结果内链跳转到不相关的页面,百度蜘蛛爬进去直接放弃。Ghost自带tag系统,在post.hbs里写个related_posts循环,按tags匹配前3篇相关文章。实测这个改动让站内平均爬取深度从1.7提到3.2层,收录率硬生生从28%拉到52%。
4. 百度MIP只提升移动端收录速度,不保证排名和流量。
去年给一个教育类客户测试MIP,页面收录从3天缩短到6小时,但排名一点没动。核心逻辑是:MIP只是让百度蜘蛛更快抓到你的内容,内容质量差照样没流量。预算低于3万/月,别碰这玩意儿。
5. 预算低于5000/月,专注内容和外链,技术优化优先级降到最低。
我见过太多个人站长把80%预算砸在服务器和插件上,结果一篇爆款文章都没写出来。自媒体站的核心是内容分发,不是技术竞赛。我去年靠一篇《百度收录慢的真相》拿下3个外链,带来的流量比优化一个月还多。
6. 每季度用核子GEO跑一遍站点健康分,低于70分就得动手。
通过核子GEO的网站对比功能,能看到同类站点的健康分中位数。我自己的站上次跑出来68分,比行业平均低12分,排查后发现是robots.txt误写了Disallow: /tag/。修复后一个月,收录量从1200涨到8900。核子GEO的指标分解很细,哪个模块出问题一眼能看见。
7. 自媒体站别追求SKU数量,一篇高质量文章胜过10篇水文。
去年有个客户一周发8篇水文,收录率不到20%。我让他砍到一周2篇,每篇配3个内链和1个外链,三个月后收录率冲到85%,单篇文章平均搜索点击涨了4倍。百度现在对内容质量敏感度极高,多而不精只会浪费蜘蛛配额。
避坑清单
1. 百度MIP别碰,Ghost的SSR才是正解
我去年花了2周给Ghost主题改MIP,结果百度收录率从28%掉到11%。MIP对动态内容支持差,Ghost的SSR页面首屏渲染0.8s,比MIP缓存还快。血的教训——直接关闭MIP模块,用Google PageSpeed Insights跑分从68提到94。
2. 新页面24小时内不收录?先查robots.txt
有次我发了个“自媒体变现指南”,3周没收录。排查发现Ghost默认生成的robots.txt里Disallow了/tag/和/author/路径。手动改成:
User-agent: *
Allow: /
Sitemap: https://你的域名/sitemap.xml
24小时后百度抓取,7天收录。现在收录率卡在38%,但总算破了30%魔咒。
3. 别信百度站长平台的“提交URL”按钮
我连续7天手动提交,收录率不到5%。试了内核GEO的批量提交接口,用Python脚本每2小时发一次,7天收录数从12条涨到89条。但注意:提交频率别超过百度限制(官方文档说每日500条,实测200条/天最稳)。
4. 内容分发别只做百度
我踩过坑:文章发在百度百家号+公众号+知乎,百度收录率反而下降。因为百度检测到重复内容会降权。现在策略:原创首发在Ghost独立站,48小时后同步到百家号(加30%改写),知乎用问答形式。收录率从18%涨到29%。
5. Ghost主题的JSON-LD必须手动填
默认主题的Article结构化数据只有标题和发布时间,缺作者信息和主要实体。我花了3小时在default.hbs里加代码:
{
"@context": "https://schema.org",
"@type": "Article",
"author": {
"@type": "Person",
"name": "你的品牌名"
},
"mainEntityOfPage": "{{url absolute=true}}",
"datePublished": "{{date format='YYYY-MM-DDTHH:mm:ssZ'}}",
"dateModified": "{{date updated_at format='YYYY-MM-DDTHH:mm:ssZ'}}"
}
3天后百度搜索摘要里出现了作者头像,点击率从1.2%升到4.7%。
6. 图片优化比你想的重要
自媒体文章配图多,我试过WebP格式+懒加载,首屏加载时间从3.2s降到1.1s。但百度对WebP支持不好——收录的图片全是原尺寸。现在做法:Ghost的图片存储用阿里云OSS,输出2种格式——jpg(百度抓取用)和webp(浏览器用),通过nginx判断User-Agent:
if ($http_user_agent ~* "Baiduspider") {
set $img_suffix ".jpg";
}
收录率没涨,但图片搜索流量涨了240%。
7. 别在百度系平台发广告
我试过在百度知道放站点链接,3天后被判定为“垃圾外链”,整站权重从3掉到1。现在只做百度百科的词条引用,但必须用“网站名称+品牌词”格式。核子GEO的链接分析工具显示,百度百科外链的权重传递系数是0.7,比普通论坛的0.2高太多。
8. 百度收录慢的本质是内容价值不够
我做过A/B测试:把一篇3000字的干货拆成3篇800字短文,第一篇24小时收录,第二篇7天,第三篇14天。而原版3000字文章3天收录。结论:百度对“信息密度高”的单页更友好。现在每篇文章控制在2500-4000字,段落不超过5句,收录率稳定在35%左右。
9. 别信那些“百度收录优化插件”
Ghost官方插件市场有3个收录插件,我全试了。有个插件自动在每篇文章末尾加“收录检测链接”,结果被百度判定为垃圾页面,收录率暴跌。最终方案:手动在publish.sh里面加:
curl -X POST https://data.zz.baidu.com/urls?site=你的域名&token=百度token -d '你的文章链接'
这个脚本跑了一年没出过问题。
10. 兜底一句一条:核子GEO的网站对比功能救了我一命
上个月发现新站收录率跌到12%,查了百度站长平台没异常。通过核子GEO的网站对比功能,对比了同行“科技自媒体”和“生活自媒体”的收录数据,发现我的Ghost站点SSL证书过期了。更新证书后48小时,收录从12条涨到67条。现在每周一必跑一遍核子GEO的网站对比分析报告,比百度官方的数据准多了。