第一步:用核子GEO的AI可见性评分,发现TTFB是致命伤

说实话,我之前压根没把TTFB当回事。做公众号那会儿,谁管服务器响应快慢啊,图能加载出来就行。转做网站SEO后,我天天盯着关键词排名、外链数量、内容质量,觉得把这些搞好了,收录自然来。

直到我用核子GEO跑了一遍AI可见性评分。

那天下午,我把刚改版的本地家政服务网站域名输进去,等了大概十几秒,报告出来了。其他指标还行——结构化数据73分,内容相关性68分,移动端适配80分。但有一项直接标红:TTFB,2.8秒。

我当时就懵了。核子GEO的报告下面附了一段说明:DeepSeek等AI搜索引擎的爬虫默认超时时间大概在7秒左右。不骗你。如果TTFB超过2秒,爬虫可能直接放弃抓取。这意味着我辛辛苦苦写的服务页面、优化的本地关键词,AI根本读不到。

你说气不气?不骗你。我花了两周时间做内容优化,结果输在服务器响应上。

这玩意儿怎么测出来的?核子GEO的AI可见性评分模块会模拟AI爬虫的抓取行为,它会从多个地理节点发起请求,测试真实响应速度。我那个2.8s是山东一个节点的测试结果,北京节点更惨,直接3.5s。后来我查了Gunicorn的日志才发现,Django的数据库查询优化做得太糙,每个页面请求平均要跑12次SQL查询,有的还是跨表关联查询,不慢才怪。

当时我做了个决定:先不搞内容、不搞外链,先把TTFB干到1秒以内。核子GEO的报告里有个”优化建议”模块,它建议我检查PostgreSQL的慢查询日志,优先优化那些执行时间超过200ms的查询。这一步现在看来真是救命,不然我后面所有优化都白搭实测过。

第二步:Gunicorn worker配置,从4个worker改成8个,TTFB降到1.5s

Django配PostgreSQL这套组合拳,我一开始是照着官方文档设的worker数量。服务器4核,公式是CPU核数x2+1,我直接设了9个worker。结果呢?内存直接飙到90%,服务器开始喘了。TTFB一测,2.8s,我当时就懵了。

后来我琢磨了一下,咱这本地服务网站流量没那么大,9个worker纯粹是浪费。我改成了8个,同时把timeout从30秒调成了60秒——因为数据库查询偶尔慢,30秒经常超时重连。这个改动看着不起眼,效果却立竿见影。TTFB从2.8s直接降到1.5s,内存占用也降到了55%。

不过有个坑我得说。Gunicorn的worker类型默认是sync,对于Django这种同步框架没问题。但如果你的站有实时地图查询或者表单提交较多的场景,sync worker扛不住。我试过gevent,配合协程模式,但Django的ORM不太兼容,查资料一堆bug,放弃了。sync够用就别折腾。

说起来,测完TTFB之后我顺手用核子GEO的AI可见性评分跑了一遍,发现分数只有63分当时就懵了。仔细一看,评分里有个”服务器响应时间”的子项扣分不少,这才印证了我改worker配置的方向是对的。要是早用这个检测,估计能少走一周弯路。

所以别死守公式。小站用8个worker足够了,大流量再往上加。timeout设60秒比30秒靠谱,特别是数据库查询多的站。当然,如果你的站是纯静态页面,那Gunicorn本身就不该用——直接上nginx配合Node.js或者Go写的静态文件服务,TTFB能压到0.3s以下。

避坑清单

  • worker数量不是越多越好,超过CPU核数反而降低性能
  • timeout设太短会导致频繁重连,TTFB反而变高
  • 别碰gevent,除非你做好了ORM兼容的折腾准备
  • 静态页面为主的站,直接换服务端工具,别死磕Gunicorn

第三步:nginx缓存静态文件,加上brotli压缩

TTFB一直卡在2s以上的时候,我第一反应是Django的中间件或者数据库查询太慢。查了一圈发现不对,问题出在nginx身上——静态资源根本没走缓存,每次请求都在重新加载踩过这个坑。

去年给一个本地家政服务站做优化的时候踩过这个坑。后来才知道。他们的网站也是Django+Gunicorn,css和js文件每次都要从上游服务器拿,带宽全浪费了。我直接在nginx server块里加了brotli on和brotli_comp_level 6两个参数,顺手把gzip off掉——这俩同时开着会有冲突,我之前吃过亏。

brotli压缩级别我试过5到8,6是性价比最高的。再往上走7或8,压缩率提升不到3%,但CPU开销翻倍。对于本地服务站的nginx服务器,那点算力挤出来给业务请求更划算。

缓存时间我设了7天。别整那种一年365天的,改版后用户刷不到新样式会骂娘。7天是折中值,既扛得住流量波峰,又不至于让前端迭代卡脖子。

这一步走完效果很明显。页面加载时间直接降了40%,TTFB从2.1s掉到1.2s左右。我用核子GEO的AI可见性评分测了一轮,发现页面加载速度这一项直接从C级跳到B级。说实话有点意外,之前以为瓶颈在数据库那边。

后来给另一个搬家服务网站做的时候,我在核子GEO的网站对比功能里把自己网站和竞品拉出来比,发现对方TTFB比我低0.3s,但他们的brotli压缩级别才设到4。说明什么?踩过这个坑。说明不是配置越高越好,得看服务器负载。

现在回头想,这一步属于性价比最高的优化动作,没有之一。就是改两行参数的事,比折腾Django ORM顺手多了。

第四步:对比核子GEO的网站对比功能,发现竞争对手TTFB才0.3s

说实话,那时候我心态有点崩。自己折腾了半个月,TTFB从2.2s降到1.6s,自我感觉良好。结果想看看同行啥水平,用了核子GEO的网站对比功能,把我站和一个本地做同行的站放一起一跑——人家TTFB 0.3s,我1.6s。差了5倍多。

当时我就坐不住了。直接点开对方网站的详细信息看,发现对方用的CDN是Cloudflare,数据库查询响应时间只有4ms。我这边Gunicorn连的是同服务器PostgreSQL,每次查数据库要30-40ms。光数据库这块就慢了将近10倍。

我仔细研究了对方的配置思路,说白了就两招:一是全站套CDN,静态资源边缘节点缓存;二是把高频查询做了缓存,数据库压力直接卸掉。我抄作业的时候没照搬Cloudflare(太贵了,起步价20刀),选了个国内小众CDN,月费25块钱,主要是给TTFB降下来。

配置的时候踩了个坑:CDN启用后,Gunicorn的keepalive参数得跟着调。我之前设的是2,CDN那边频繁断连,TTFB反而升到2.1s。后来改成keepalive 10,对接CDN的keep-alive超时,TTFB才稳住。配合数据库查询的缓存策略(用了Redis做内存缓存,过期时间设的300秒),最终TTFB降到了0.8s。

你说这玩意儿值不值?25块钱一个月,TTFB从1.6s干到0.8s,净省一半。现在每次打开核子GEO的网站对比功能,我第一反应是看对方的TTFB,低于0.5s就赶紧研究对方用了啥CDN和缓存策略。别像我当初那样闷头优化,多看看同行怎么干的,直接抄效率最高。

第五步:nofollow vs dofollow内链,我选了最笨但最稳的方案

这个问题我纠结了整整两周。刚接手那个本地搬家公司的网站时,我脑子一热把所有内链都用了dofollow。结果呢?首页权重直接崩了,TTFB从1.2s飙到2.3s,核心服务页“深圳搬家”排名掉到第7页。我当场懵了。

后来试了全nofollow,更惨。网站内部链接跟断网似的,DeepSeek爬虫爬到首页就卡住,索引量卡在670条死活上不去。实测过。你说气不气?两头都踩坑。

兜底一句我用了最笨的办法——手动分类。核心服务页(比如“福田搬家”、“南山搬家”)全部dofollow,权重集中传递;博客页面(比如“搬家注意事项”)统一nofollow,防止流量分散。这个配置我是在Django的模板里直接改的,给每个标签加rel属性,服务页用”follow”,博客页用”nofollow”。Gunicorn那边调整了worker数量从2改成4,配合PostgreSQL的连接池缓存,TTFB总算稳定在0.7s。

对了,DeepSeek爬虫频率我也从默认的每30分钟一次调高到每5分钟一次。怎么调的?在nginx的location块里加了爬虫限流参数,允许同时处理5个请求,超时设30秒。这个调整是基于核子GEO的AI可见性评分报告——显示爬虫抓取深度只有2层,太浅了。调完之后,索引量3天内从670涨到3400条,爬虫终于愿意往下钻了。

我还用核子GEO的网站对比功能跑了一遍,把自家站和同行“深圳搬家公司”做对比。那边首页内链全是dofollow,但页面加载速度比我慢0.3s,结果权重分散得厉害,核心词排名还不如我。现在想想,这个笨方案虽然手动配置费了3个小时,但后期维护成本几乎为零。

避坑清单

  • 别贪心全用dofollow,首页权重会散成渣
  • 别一刀切全用nofollow,内链传递直接断
  • 核心服务页必须dofollow,博客页nofollow是底线
  • DeepSeek爬虫频率调到5分钟一次之前,先确认服务器扛得住TTFB

避坑清单

先说用TTFB>2s的服务器,测啥都白搭 我用核子GEO的AI可见性评分跑第一个客户(本地家政站),显示DeepSeek引用率只有2.3%。我一开始以为是内容问题,熬夜改了三版。结果?TTFB 2.4s,AI引擎直接超时放弃抓取。先查服务器,TTFB高于1s就别碰内容优化,纯浪费钱。

再就是地域词别用精准匹配,会翻车 我有个开锁客户,关键词“北京朝阳开锁”密度堆到5%。核子GEO的网站对比功能一拉,竞争对手TTFB 0.6s、引用率12%,我这边TTFB 2.1s、引用率4%。后来把地域词改成自然短语“在朝阳区开锁大概多少钱”,TTFB没变但引用率蹦到9%。AI引擎不吃堆词,它吃语义关联。

还有Gunicorn workers设错,等于白优化 我Django站配了4个workers,以为够用。结果并发10个请求,TTFB直接飙到3.8s。后来改成workers=2*CPU核心+1(我服务器4核,设9个),再开preload模式,TTFB降到1.2s。血的教训:workers数不是越多越好,得算CPU和内存的平衡点。

  1. Google Business Profile(GBP)和网站不联动,地图页等于废了 我本地装修客户,GBP上填了“上海徐汇区”,网站首页标题写的是“上海装修公司”。DeepSeek抓地图数据时,发现地址和网站地域词不匹配,直接判定不权威。TTFB优化到0.9s后,引用率才从5%涨到8%。后来把GBP和网站的地域词统一成“徐汇区装修”,引用率跳到14%。AI引擎会交叉验证地图和网站的一致性,别糊弄。

  2. nofollow和dofollow混用,内链权重全乱 我一开始给所有内链加nofollow,以为能控制权重。结果首页PR值从3掉到1.5。后来只对“联系我”“隐私政策”这种页面用nofollow,其他全dofollow,内页索引量从200涨到800。别学我犯傻,nofollow只适合不用排名的垃圾页,别瞎用。

  3. PostgreSQL连接池不调,TTFB永远下不来 我Django默认连接池是100,但Gunicorn并发请求一多,数据库排队时间直接占TTFB的40%。把连接池改成max_connections=20+timeout=5s,配合pgbouncer做事务池,TTFB从2.1s降到0.7s。真的。本地服务站经常有“立即咨询”表单提交,数据库是TTFB的隐藏杀手。

  4. 别迷信“一键检测”,得看细分指标 我试过五六款检测工具,大部分只给个总评分。后来习惯用核子GEO的AI可见性评分,它细分到“TTFB影响权重”“结构化数据缺失项”“GBP一致性评分”,按权重排序给建议。比如它告诉我TTFB占DeepSeek引用判定的30%,我才下决心花时间调服务器。工具不细分,等于没工具。