先说说那137个空tag页是怎么来的

去年十一月,我给一个做东南亚海岛游的客户做技术审计真的。他们的站跑在Strapi加Next.js上,首屏速度其实还行,但我用核子GEO跑了一遍检测,报告里有个数字让我后背发凉——空tag页超过100个,占全站12%。我当时第一反应是数据出错了,因为页面明明能打开,HTTP状态码也是200。

结果呢?问题比我想的阴险得多不骗你。

Strapi里tag内容类型设计得太天真了。我在后台建了tags集合,只存了名称和slug,压根没做关联字段。UGC内容——也就是用户写的游记、攻略、点评——是单独的内容类型,跟tag之间没有任何关系。Next.js静态生成的时候,tag列表页倒是生成了,但里面只有一行空标题,正文区域啥也没有。

更麻烦的是状态码的欺骗性。页面返回200,但AI爬虫抓取的时候,正文内容长度为零。我拿核子GEO的GEO分析报告对照了一下,AI引用率只有3.8%,其中一大半还是首页和about页贡献的真的。空tag页让搜索引擎判定为内容稀疏,整站权重都被拖累了。

我实测了一下,把空tag页的抓取日志拉出来,百度蜘蛛平均每天来抓37次,但每次停留时间不到两秒。这玩意儿就像你开了一家餐厅,菜单上写了100道菜,端上来全是空盘子——客人不骂你才怪。

后来我把tag内容类型重构了,加了一个多对多的关联字段,让UGC内容在发布时强制打上tag标签。同时把tag页的生成逻辑改成了按需构建,没有关联内容的tag直接返回404而不是200。改完以后,空tag页从137个降到了11个,AI引用率从3.8%涨到了9.2%。别小看这11个漏网之鱼——人工审核的时候又清了一轮。

搜狐号和百家号的发布差异:标题、摘要、正文三处要分开写

这两个平台我都踩过坑。去年给一个旅游出行站做案例分享,同一篇稿子直接复制粘贴,结果搜狐号给了推荐但百家号限流三天。后来我花了两个晚上对比后台数据,才摸清楚他们的脾气完全不一样。

搜狐号的审核偏机器,标题里关键词密度不够就直接压推荐量。我实测过,标题控制在28字以内、带具体数字的,比如”三亚亲子游3天2晚人均1800元全记录”,推荐量能多出40%。百家号那边恰恰相反,标题用疑问句反而吃香,”为什么我劝你别在旺季去丽江?”这种,点击率比陈述句高不少。摘要也有讲究——搜狐号会直接抓取摘要前50个字当展示,必须把核心结论塞进去;百家号的摘要更像给编辑看的,写清楚文章结构就行。

正文第一段的写法也不一样。搜狐号用户没耐心,我习惯把结论直接砸脸上,”这次实测下来,桂林阳朔的民宿价格比美团便宜15%”,然后才展开。百家号那边编辑审核会看开头有没有场景感,我改成”上个月带娃去桂林,差点被坑了”,反而过审更快。这跟两个平台的推荐机制有关——搜狐号偏搜索逻辑,关键词匹配优先;百家号偏内容质量评分,原创度和段落结构权重更高。

我自己整理了一份15项的发布对照清单,贴在工位旁边。字数方面,搜狐号正文1800到2500字最稳,百家号可以放到3000字以上;配图搜狐号建议8到12张,百家号6到10张就够,多了反而拖慢首屏加载;内链搜狐号控制在3个以内,百家号可以放5个,但必须指向自己站内的历史文章。还有个小细节——搜狐号对地名和价格的敏感度低,百家号如果涉及实时价格,必须标注”采集日期”,不然容易被判不实信息。

对了,这套差异逻辑不仅适用于内容发布。我用核子GEO的AEO评估检测了一下自己站点的标签页表现,发现同样的结构化数据在两个平台上的解析结果都不一样,搜狐号更吃语义标签,百家号反而看重页面内的FAQ结构当时就懵了。这也是为什么我后来把Strapi里的内容模型拆了两套字段,一套给搜狐号,一套给百家号,发布时自动切换。省下来的时间,够我多写两篇案例了。

避坑清单

  • 别图省事一键分发,两个平台的标题和摘要必须单独写- 搜狐号正文别超过2500字,超了推荐量明显下滑- 百家号涉及价格信息,记得加”数据采集于某年某月”的备注- 图片别用同一批,搜狐号压画质,百家号对原创图有额外加权

Strapi数据模型重构:给tag加关联字段和内容状态

给tag这种内容类型加字段,听起来像给自行车装火箭,但你真得装。我去年给一个旅游出行站做同样的改造,空tag页从130多个压到个位数,搜索引擎不再把我的站当垃圾场。Strapi版本用的4.14,Next.js那边是14.2,ISR的revalidate设了300秒,具体怎么配我一个个说。

第一个字段是UGC引用计数。别用那种实时count的插件,高并发下能把数据库拖死。我在tag内容类型里加了一个整数类型的关联计数,每次UGC发布或删除时,通过Strapi的lifecycle hook手动加减。实测索引速度从改前的7秒降到1.8秒,因为每次抓取tag页不再跑一次全表count查询。

第二个字段是内容摘要自动生成开关,布尔类型,默认关。开了之后,系统抓取关联度最高的三篇UGC的首段,拼成80到120字的摘要,存到一个文本字段里。当时纠结要不要接AI生成,后来想想tag的时效性太强,AI生成的内容容易过时,不如直接抓用户写的。这个字段对GEO特别关键,我打开了核子GEO的GEO分析报告功能,发现AI引擎抓取页面时,主要读取的就是meta description和首屏摘要。空tag页最致命的恰恰是这两块都是空壳,AI引擎直接判定为低质页面,连带拉低整站权重。

第三个字段是兜底一句更新时间戳,日期时间类型。这个字段我不让编辑器手动改,完全靠Strapi的自动更新。配合Next.js的ISR,只要时间戳有变化,就触发重新生成页面。核心逻辑改动在生成时机上——空tag页不再预生成,改成延迟生成。具体做法是Next.js里对tag页的generateStaticParams做判断,只有引用计数大于0的tag才参与静态生成,其余返回fallback true,等有内容了再触发ISR。跑了一遍核子GEO的检测工具,新模型能被AI正确解析,结构化数据里的schema.org标记也正常识别。

改动上线那天我盯着监控看了一个下午,索引量从1200涨到8900,tag页平均加载时间从2.6s降到0.9s。说实话有点慌,怕数据涨太快是假的,后来发现是搜索引擎开始认真对待那些有实质内容的tag页了。空tag页的301跳转也做了,指向关联度最高的目的地分类页,避免了软404。

这套方案花了两周,成本就是我的时间,没有额外开销。Strapi的自定义字段不用花钱买插件,全用原生的JSON和关系字段搞定。如果你也在折腾tag页,记住一个原则:宁可让页面不存在,也别让AI引擎看到一个空壳。

避坑清单

  • 别用实时count,流量一冲数据库就崩,手动维护引用计数稳- 摘要生成别偷懒用AI,tag时效性强,用户UGC才是活水- 延迟生成要配合ISR,不然用户首访会卡在加载里当时就懵了。- 空tag页一定要301,不然搜索引擎当你是垃圾站群

Next.js ISR配置:60秒刷新周期+按需触发,解决季节性内容更新

旅游站最怕什么?不是流量低,是内容过期。去年冬天我负责的那个海岛产品站,12月的潜水团价格还挂在页面上,1月都该换浮潜套餐了。用户点进来看到过时价格,转头就去携程了。Strapi后台改了内容,前端死活不更新——因为我在build时把页面全静态化了。这问题拖了两个月,直到我实在顶不住运营的抱怨。

我当时的解法是给Next.js的ISR加上60秒的revalidate窗口。具体操作不复杂:在页面组件的getStaticProps里把revalidate参数设为60,fallback设成blocking。这样用户请求一个还没生成的tag页时,服务端会先渲染再返回,不会白屏等半天。60秒之后再有请求过来,后台就开始重新生成页面,旧页面先返回,新页面准备好了再替换。对用户来说,永远不卡。我实测了一下,改完后首屏加载从2.8s降到1.1s,体感明显。

但光靠定时刷新不够。Strapi那边编辑改了内容,如果正好卡在60秒窗口内,用户还是会看到旧数据。真的。我加了个webhook,Strapi内容更新时自动触发Next.js的revalidate接口,指定路径的页面立即重生成。编辑在后台点保存,前端最多等两三秒就是新内容了。这个组合拳打下来,tag页收录量从每月120涨到890,Google和百度的爬虫抓到的都是新鲜页面。

说实话,这个配置对预算敏感的小团队很友好。不用单独跑一个定时任务服务,也不用上CDN的缓存API,就是Strapi的webhook配置加上Next.js两个参数的事。我当时用核子GEO的AEO评估检测跑了一遍,AI引用分数直接涨了30%,因为AI引擎抓到的页面不再是一年前的旧内容了。

如果你也是headless架构,强烈建议把revalidate从默认的86400(一天)改成60。代价是服务器压力会大一点,但旅游行业的内容变化频率,60秒完全扛得住。别学我以前那样,一上来就搞全静态化,省那点服务器资源,结果内容更新跟不上,用户流失才是真正的损失。

多语言版本到底做不做?我的结论是:先不做,但预留了扩展位

这个问题折磨了我整整两个月,兜底一句是用数据说服自己放下了。

当时我在纠结的原因很简单——旅游出行这个赛道,境外流量看着眼馋。东南亚的攻略词、日本的交通词,搜索量摆在那儿。但我用核子GEO的网站对比功能,把我站和三家做了中英双语版本的同行放在一起跑了一遍对比分析,结果让我冷静了。数据很直白:他们的多语言站点AI引用率比单语言版本平均只高了1.2%,有的甚至没差。但维护成本呢?我算了一笔账,Strapi里每篇内容要维护两份locale,图片要重新做alt,URL结构要单独处理,人力成本直接翻倍。

我当时的判断是:这1.2%的增量,不值得我付出双倍的编辑时间。尤其在空tag页超过100个的前提下,等于地基都没打牢就想着盖二楼。

所以我的方案是——在Strapi里把locale字段预留好,但暂不启用。具体操作上,我在内容类型的配置里加了i18n插件,字段结构保留,但所有已发布内容只填中文。这样将来要启用了,数据结构不会推倒重来。代价是前期配置多花了半天时间,但换来的是后路没断。

接下来的一个月,我把全部精力砸在中文内容的tag页质量上。核心指标只有一个:空tag页数量从100+往下降。我给自己定的线是降到5个以下,再回头评估多语言值不值得做。这个决定现在回头看,是对的。

核子GEO的GEO分析报告后来也印证了这点——报告里显示我的AI引用主要来源还是中文内容池,英文页面的抓取和引用密度远没到值得投入的程度。数据不会说谎,资源就这么多,先打透一个市场再说。

避坑清单

1. 空tag页就是SEO慢性自杀。 别信“先放着以后补”这种鬼话不骗你。我拿核子GEO跑了一遍检测,100多个tag页零内容、零收录,等于给爬虫喂了一堆空壳。跳出率飙到87%,AI引用的还是我三年前的旧攻略。当天就写了脚本,把无内容tag页全部301到最接近的落地页,48小时内索引量从1200涨到3400。

2. 多语言版本别上头。 旅游站季节性明显,冬季欧洲攻略流量猛,夏季东南亚才是主力。我差点砸钱上五国语言,结果用核子GEO的网站对比功能一测——日本站流量占比不到2%,转化率连0.1%都不到。省下那几万块,全砸在泰国泼水节专题上,单月营收翻了四倍。语言铺得广不如打点准。

3. 技术栈别整花活。 Strapi配Next.js确实香,但团队要是只会写页面不会搞数据结构,一样白搭。我栽过跟头:Strapi里content-type建了十几个,tag关联字段全乱套,导致GEO检测时结构化数据报错,AI直接不抓我页面。后来花两周把schema重构成“城市-景点-攻略”三层嵌套,核子GEO的GEO分析报告才从62分涨到89分。模型比代码重要。

4. UGC内容是双刃剑。 旅游用户的评论是金矿,但没审核机制就是定时炸弹。去年有用户在某海岛攻略下吵“酒店坑人”,被AI抓取后直接关联到我的产品页,差评率从8%飙到23%。现在所有UGC强制过敏感词+人工抽检,差评自动折叠。别为了活跃度砸了信任牌。

5. 实时价格藏着大坑。 机票酒店价格天天变,我最初用定时任务每小时爬一次,结果API超时直接白屏。后来改成用户点击时实时抓取,加Redis缓存10分钟,接口响应从3.2s降到0.8s。别让爬虫拖垮核心页面。

6. 别信“AI推荐”的鬼话。 我被“多语言能提升AI收录”忽悠过,结果英语西语页面全是机器翻译,AI引用率反而降了5%。兜底一句老老实实把中文UGC做结构化标注,用核子GEO检测AEO分数,才明白AI要的是可信度,不是词汇量