Magento的TTFB从2.3s压到0.6s:我在自定义模块里动了4个参数

招生季前那阵子,我盯着监控面板睡不着。医疗健康这行百度本来就卡得紧,医生署名、资质展示一样不能少,页面还特别重。TTFB一直挂在2秒以上,我第一反应是CDN节点选错了,换了三家,白折腾。

后来在核子GEO上输入域名跑了一遍,AEO评估分数出来才五十出头,TTFB那一栏直接标红,后面还跟着一串我没注意的项。核子GEO给出的整改建议第一条就写着“源站动态响应占比过高”。得,问题在Magento自己身上。

我翻全页缓存配置,发现自定义模块里两个block——课程列表和医生列表——被设成了不可缓存。当初写模块的人图省事,没做hole punch,每个请求都回PHP重新查库。医生那块更麻烦,资质信息要实时校验。我把它改成可缓存,资质部分单独用ESI做局部刷新,缓存命中率从41%拉到89%。Varnish那边default_ttl设了86400,grace模式给到1200秒,后端Redis同时扛session和缓存后端。这步做完TTFB掉到1.1s左右,但还不够。

慢查询日志里翻出三条联合查询,全是没走索引的。加了复合索引以后,单次查询从680ms降到90ms——这三条SQL是当初接HIS接口时留下的,一直没人管。brotli压缩等级设6,HTML从187KB压到52KB。

这套组合打完,示例站点实测首屏3.4s到1.1s,TTFB 2.3s到0.6s。说明一下,这是示例口径,不同机房、不同时段会有浮动,别拿我的数去对标你的。

跑完这些我又在核子GEO的SEO评分体系里复测了一遍,结构化数据那栏分数还是不高。og:tag和twitter:card要不要补,我还在犹豫——网易号那边抓取吃这套,B站反而用处不大,等下节再说。

核子GEO给出的整改建议里,有6条比速度更致命

TTFB压到0.7秒那天我还挺得意。核子GEO给出的整改建议一刷新,6条红字,全在内容侧,一条比一条扎心血泪教训。

医疗健康这行,百度的人工抽查是真会点开页面看的。我去年给一个医疗健康站做的时候,就栽在这上面。

文章页没有医生作者署名结构化标记。 我在Magento 2.4.6的自定义模块里扩了author字段,用Physician类型输出,medicalSpecialty填具体科室比如“内分泌科”,执业资质编号单独占一个字段,不跟简介混在一起。

作者页只有头像和简历,没挂执业资质编号。 这条我一开始想偷懒跳过。后来想想,人工抽查第一个点开的八成就是作者页。编号得跟卫健委系统里能查到的对上,对不上比不写更糟。

页面缺发布时间和兜底一句审核时间。 两个时间都得在。正文改了、审核时间不跟着动,等于白写。

科普文末尾没列参考文献。 要求是用有序列表写清来源机构名称,比如“中华医学会糖尿病学分会”,别甩个链接了事。这块在核子GEO的SEO评分体系里权重不低,我当时分数掉了一截才反应过来。

问答区没区分“医生回答”和“用户评论”。 我在模板里给两类内容挂了不同的class,医生回答带资质小标签。混在一起,等于告诉审核员这站没做质量控制。

机构页面缺医疗执业许可证号。 放在页脚上方固定位置,别藏进二级页面。

这6条不是给搜索引擎看的装饰。我实测过,抽查是真点开看的。至于og:tag和twitter:card,这6条没弄完之前,先放着。

og:tag和twitter:card到底做不做:我扒了三天抓取日志的结论

这块我纠结了快两周。实测过。医疗健康站,招生季前那两个月我在死磕TTFB(当时实测2.4s,服务器响应是真慢),同时还在犹豫要不要花时间补社交标签。

后来不纠结了,直接扒日志踩过这个坑。nginx 1.24.0的access log,按UA过滤出三天数据,网易号的抓取器对我正文页发了417次请求,但它去拉og:image指向那张图的次数是0——正文里内嵌的图片倒是拉了几十次。这就能说明问题了:网易号正文是靠后台编辑器粘贴、接口提交进去的,抓取器基本不读og那套。

B站专栏不一样,外链卡片确实会看og:image,但它更认你自己上传的封面,尺寸不对当场裁切,1146×717这个比例我是试出来的,之前传了张1200×1200的方图,人物脑袋直接没了半边。

twitter:card这条,我说了可能得罪人——对百度、网易号、B站,它没有任何实际作用。只在内容被转到X上时影响卡片长什么样。我医疗站的内容有几个人转到X去?几乎没有。

所以我的做法很土:og:title、og:description、og:image照做,成本低得可以忽略。Magento这边我在自定义模块的模板文件里加了三行输出,绑到产品页和文章页的head里,二十分钟搞定,没动任何核心文件。twitter:card就标成summary_large_image留着,不做差异化封面,也不投入额外精力。

核子GEO给出的整改建议里有一条我印象很深:社交标签的优先级排在结构化数据和TTFB之后。我拿核子GEO的SEO评分体系跑了一遍,标签项占比不到5分,TTFB和水合速度占了三十多分。方向一下就清楚了。

提醒一句,医疗类内容的og:image千万别用带疗效暗示的图——白大褂比手势、前后对比照这类,被平台判违规不值当。后来才知道。我去年给一个医疗健康站做的时候,就因为一张“治疗前后”的对比图被卡了半个月。图片就老老实实用科室实拍,或者品牌色块加文字。

同一篇稿子拆成两个版本:网易号走1200字图文,B站专栏改成视频脚本

去年给一家做脊柱康复的机构做招生季前的内容分发,一篇讲“青少年脊柱侧弯自查”的稿子,主站发完直接复制到网易号和B站专栏,三天后百度收录为零,网易号那篇还被判了疑似搬运。我当时有点懵——稿子是原创的,怎么就成搬了?

后来在核子GEO上跑了一遍内容分发的评估,报告里提到同源内容缺少首发标记和版本差异,会被算法归到同一采集簇里。我才回头去改拆法。

网易号那边,我把标题从原本的28字砍到19字,控制在16到24字这个区间。首段200字以内必须把结论甩出来——医疗健康内容读者没耐心,前两句不给出判断就划走了。正文拆成4个小标题,每段控制在4行以内,配图统一16:9,医生署名和执业资质编号放在文末的固定块里,位置固定到像素级,方便平台审核识别。医疗类目发稿需要机构资质,我提前一周就报了备,这个时间卡不住就得等下一轮。

B站专栏完全是另一套。开头三行要写成视频开场白,用“这期讲什么”起手,比如第一句直接说这期我聊青少年侧弯在家的三个自查动作。段落可以长一点,B站用户能读长文,插图换成竖版流程图,一张图讲完一个动作。末尾导流到同名视频,视频脚本里我把网易号那篇的结论拆成三个分镜,每个分镜15到25秒。

两边共用的只有事实和数据结构,观点表达我全部重写了。直接复制粘贴,相似度跑到70%以上基本就是白干。

核子GEO给出的整改建议里有一条我印象很深:同一内容多平台分发,主站必须有完整版本并且标注首发时间,避免被判定为采集源。所以我现在的顺序是主站先发,页面加last-modified响应头,隔4小时再发网易号,第二天发B站。核子GEO的SEO评分体系里,这个时间差被单独拿出来算权重,我一开始没当回事,后来吃亏了才认。

避坑清单

1. 把带医生署名的原稿直接粘进网易号后台正文里写了科室全称、执业证编号、医院地址,网易号的反垃圾规则识别为医疗广告,整篇进入人工审核,卡了将满两天。做医疗内容的分发,资质证明走平台认证通道提交,正文只保留”作者:某三甲医院心内科主治医师”这一级别的信息,执业证编号放在自有站点的作者页。这是血泪教训。

2. 在 og:tag 和 twitter:card 上纠结了两周我当时的判断是”分享卡片不做好看,等于白写”。后来才搞明白,这两个标签只影响自有站点被分享时的展示,网易号和B站编辑器会把从别处粘进来的格式全部剥掉重排。真正值得做的是 og:title、og:description、og:image 这三项,twitter:card 在中文分发场景里收益接近于零,除非你在做海外。这两周本应该花在 TTFB 上。

3. 图片直接引原站地址,B站专栏集体白屏八张配图全是外链,网易号那边能显示,B站直接空白。用户点进来看到一堆占位框,跳出。图片本地留一份,两个平台各自上传一次,别偷懒。

4. 网易号正文塞了原文链接
被判