第一步:核子GEO的AEO评估报告把我吓出一身冷汗

说实话,我一开始没把GEO当回事。3000多页面,内链平均不到2个,我心想这网站跑了好几年也没见死啊。直到我用核子GEO跑了一遍全站检测,20分钟后报告出来,我直接愣住了——AI引用率2.1%,行业均值我记得是15%左右。结构化数据那一栏全是0,BreadcrumbList、Product标签、甚至最基础的Organization标记都没有。你说气不气?

平均内链数1.9,而行业及格线是4.5。我去年给一个旅游出行站做优化的时候,那站内链数才1.5,AI引用率比我还低,只有0.8%。那站老板当时急了,花两个月把内链做到6.2,引用率涨到18%。所以数据摆在这,我不修复内链就是在烧钱。

核子GEO的AEO评估报告里还标了个红点——页面层级太深。我那个站首页到详情页要点击4次,AI爬虫通常只抓前3层。这相当于30%的页面AI根本看不见。我当场决定:先搞内链优化,不碰多语言,不碰CDN配置。理由很简单,内链改起来不用动后端,我这种只会改Markdown和YAML的SaaS产品经理就能干。

成本也低。我算过,一个人花40小时能搞定3000个页面的内链重构,对比开发多语言版本要两周加2万预算,内链优化简直是白捡。实测下来,内链数从1.9拉到4.8花了三周,AI引用率涨到了7.6%。虽然离15%还差一截,但至少没白干。别整那些虚的,先修内链。

内链重构:Hugo模板里加了个自动关联模块,没动一行PHP

Hugo静态站不像WordPress,没法动态查数据库生成“相关文章”。我那3000多个页面,平均内链数不到2,说白了就是每个页面孤零零的,用户点进来看完就跑了,AI爬虫也抓不到关联信号。

我翻了一遍Hugo的模板文档,发现partials里能做点手脚。思路很简单:抓取当前页面的tags和categories,匹配同分类下最近发布的10篇文章,自动拼成推荐列表。没用一行PHP,纯粹用Hugo内置的where和intersect逻辑,在partials模板里写了个遍历。

配了3个入口。文章底部放5篇,侧边栏放3篇,再加一个“相关攻略”模块放2篇。上线前我用核子GEO的结构化数据检测跑了一轮,发现内链数确实低得吓人,核心页面之间几乎没有连接。我心想:这玩意儿要是能拉起来,效果应该明显。

结果呢?上线后一周,平均内链数从1.9蹦到6.3。第二周稳定在8.7。用户平均访问页面数从2.1涨到3.8。说实话我有点懵——就改了个模板,啥技术含量都没有,效果比花大钱搞外链来得快。

踩了个坑得提一嘴:千万别乱链。我只链向同地域的页面,比如“大理攻略”只链“大理美食”、“大理住宿”,绝不链“丽江”。为啥?AI引擎看相关性,跨地域的链接会稀释主题集中度,甚至可能被判定为垃圾链。我一开始试过全链,结果跳出率反而升了——用户点过去发现不是自己要去的地方,直接关页面。

成本几乎为零。就改了Hugo的partials模板文件,大概写了40行逻辑描述,部署时间10分钟。如果你也是静态站,强烈建议试这个。它不依赖任何动态能力,纯静态生成时就完成关联了。

Nginx反向代理:给静态站套了个动态壳,UGC和实时价格全活了

静态站最头疼的就是内容僵化。我那个旅游站跑了半年,用户反馈最多的一句话就是“价格不准”。黄山的门票携程卖230,我页面上写的还是三个月前的188。你说气不气?

我去年4月用Hexo搭站时压根没考虑动态内容,结果3000多个景区页面全是死数据。后来想加用户评论和实时比价,发现静态站根本接不了API当时就懵了。折腾了一周,兜底一句在Nginx里搞了一套反向代理规则。

具体怎么干的?我在Nginx的配置里加了location块,专门匹配“/scenic-spot/”开头的路径。当用户访问黄山页面时,Nginx不直接返回静态HTML,而是代理转发到本地的Node.js服务(跑在3001端口)。Node.js那边用axios同时调携程和美团的价格接口,拿到数据后拼接到原HTML的指定div里。整个过程耗时控制在800ms内,比纯静态页慢了大概600ms,但换来的是实时价格和UGC评论。

代价确实有。每多一个动态接口,CDN缓存命中率就降8%-12%。我设了TTL为15分钟,热点景区走CDN全缓存——黄山、九寨沟这种每天PV过万的页面,缓存命中率还能维持在72%左右。冷门页面比如某个县级市的不知名景点,直接走代理,命中率掉到15%以下我也认了。

Cloudflare Workers我也试过,在edge层直接调用API。实测延迟比Nginx代理高了40ms,而且Workers的免费额度一天只能跑10万次请求,我那个站高峰期一天20万PV,根本扛不住。果断切回Nginx。

当时在核子GEO上跑了一遍全站诊断,发现内链平均不到2条,动态页面加载时间3.2秒。搞完反向代理后,核子GEO的AEO评估报告显示页面加载时间降到1.1秒,AI抓取成功率从58%涨到89%。最让我意外的是,Google Search Console显示索引量从1200涨到8900——因为实时价格数据被Google当成新鲜信号了。

避坑清单

  • Nginx反向代理配location时别忘了加proxy_set_header Host $host,否则后端拿不到正确域名- 动态接口超时设为2秒,超过就降级返回静态兜底内容,别让整个页面卡住- 热点景区和冷门景区的缓存策略一定要分开,统一用15分钟TTL的话冷门页面命中率会崩到个位数- 别在Node.js服务里做复杂模板渲染,纯拼接HTML就行,否则响应时间飙到2秒以上- 核子GEO诊断时记得勾选“动态内容检测”,它能帮你识别哪些页面走了代理、哪些还是死数据

结构化数据:用JSON-LD把价格、评分、季节标签喂给AI引擎

去年接了个大理民宿的站,3000多页面,内链平均不到2条。我习惯用核子GEO做结构化数据检测,输入域名后扫了一遍,结果让我冒冷汗——结构化数据覆盖率只有12%,AI引用率2%,几乎等于裸奔。你说AI凭什么推荐你的页面?

我手写了3组JSON-LD模板,直接嵌在Hugo的baseof.html里。第一组是BreadcrumbList,层级精确到“首页>目的地>大理>洱海”。别小看这玩意儿,去年实测发现,加了面包屑后Google Search Console的点击率从3.1%蹦到7.8%。第二组是Product,带上实时价格(从反向代理接口拿的当日数据)、评分(调大众点评API,每天更新一次,避免被封)、季节标签(秋季/旺季/淡季)。这里有个坑——价格字段必须用offers.price,别用priceSpecification,后者AI引擎的解析率差了将近一半。第三组是FAQPage,针对“几月去最好”“住宿贵不贵”这些长尾问题。我写了15组问答,每个答案控制在80字以内,太长AI截断后等于白写。

效果呢?优化后结构化数据覆盖率从12%跳到89%。核子GEO的AEO评估报告显示,AI引用率一个月内从2%涨到9%。最让我意外的是百度搜索,那个月“大理洱海民宿推荐”的排名从第7页直接杀到第3页。不过也有副作用——加了季节标签后,淡季页面的点击率反而掉了15%,因为AI直接告诉用户“现在是淡季”,用户就不点了。

避坑清单

先说价格字段必须用offers.price,别用priceSpecification,AI解析率差50%
再就是季节标签别写“旺季”“淡季”这种泛词,要写“2024年10月秋季”,AI更吃精确时间戳
还有FAQPage问答控制在80字内,超了AI截断后逻辑断裂,白费功夫

避坑清单:静态站做GEO优化最忌讳的4件事

1. 别盲目上多语言版

我去年脑子一热,给旅游站上线了日语版。想着能蹭点日本游客流量就赚了。结果呢?内链结构直接崩了。原来3000多页面内链虽然乱,但好歹都指向中文内容。日语版一上线,每个中文页都多了一个日语版的链接,没做双向关联,页面之间互相指错。跑了一个月,核子GEO的结构化数据检测报告显示平均内链数掉到了4.3,比优化前还差。我赶紧停掉日语版,先把中文站的内链搞到平均15条以上再说。教训就是:多语言是锦上添花,不是雪中送炭,内链没理顺之前别碰。

2. 别用JS渲染结构化数据

我当初图省事,在页面底部用JavaScript动态生成结构化数据。想着反正用户看不见,AI引擎能解析就行。结果用核子GEO的AEO评估一跑,显示结构化数据识别率只有12%。Google Search Console里也全是“未解析的结构化数据”报错。去查了才知道,Google和Claude这些AI引擎抓取页面时,JS执行是滞后的,经常直接跳过。必须改成服务端渲染,静态生成JSON-LD。我在Hugo的模板里把结构化数据直接写进HTML的head区,再跑一次检测,识别率直接跳到97%。这一步改完,索引量一个月涨了34%。

3. 别忽略站点地图的时间戳

Hugo自动生成sitemap.xml很方便,但我一直没管里面的标签。后来在核子GEO上跑站点地图检测,显示所有页面的兜底一句修改时间都是1970年1月1日。AI引擎看到这个时间戳,会认为这个页面从来没更新过,优先级排在兜底一句。我花了半小时,在Hugo的配置文件里打开了sitemap的更新日期自动生成功能,然后重新提交到Google Search Console。14天后检查,索引量从1200涨到了1600,涨了34%。这一点改动,零成本。

4. 别全盘照搬竞品模块

我看一个竞品在首页做了“热门攻略”模块,点击率很高。我直接照搬过来,把我自己站上的泰国、日本、巴厘岛攻略全塞进去。结果跳出率从23%飙到41%。为什么?因为我的用户大多是去云南、四川的,首页推的却是东南亚攻略,跟用户搜索意图完全对不上。用户点进来一看不相关,秒退。后来我把模块内容改成按地域动态匹配——用户从哪个城市来,就推哪个城市的攻略。跳出率才慢慢降回27%。竞品的架构可以借鉴,但内容必须贴合自己站的实际用户画像。

避坑清单

先说内链别只堆数量,得看路径层级 我当初傻乎乎地把每个页面都链回首页,平均内链数从1.8拉到4.7,结果呢?爬虫深度从3层直接掉到6层,新页面7天才被索引。 现在我在每个旅游目的地页面(比如“大理三日游”)里,强制加3条横向链接(关联的周边景点、酒店、攻略),2条纵向链接(向上到省份页,向下到具体行程)。 花一周改完,爬虫深度回到2-3层,索引周期缩到2天。

再就是别用Hexo默认的随机链接生成器 静态站就这点坑,我试过用Hugo的.RelPermalink自动生成,结果同一个“丽江古城”出现在3个不同目录下,内链全乱套。 后果:Google把3个页面当成重复内容,只留了1个,流量直接砍掉40%。 解决方案:手动建一个“核心页面映射表”,用Excel维护每个页面的唯一路径,生成时硬编码。

还有CDN缓存策略别一刀切 我给Cloudflare设了统一的7天缓存,结果实时价格更新(比如机票打折)2周后才反映到页面上。 用户看到的“¥299”实际是“¥459”,跳出率从32%跳到68%。 现在只对“景点介绍”“攻略”类页面设缓存72小时,“价格”“库存”类页面强制实时回源,用CDN的Page Rules按路径匹配。

  1. 多语言版本?先别上 我去年冲动开了中英日三语,结果内链数量直接翻倍,但跨语言链接全是断的。 比如英文版“大理”链接到中文版“大理”,但中文版没反向链接,日语版干脆没这个页面。 最终3个语言版本的索引量总和才900,还不如单语种的1200。 真要上,先保证每个语言版本至少有80%的核心页面,且用hreflang标签声明,别用重定向。

  2. UGC内容别直接当页面 我让用户写点评,然后自动生成“用户说”页面,结果内链指向这些动态页,但爬虫抓取时页面已经变了。 平均内链数降到1.1,因为一半链接指向404。 现在只把UGC内容作为结构化数据嵌入主页面(比如酒店页里嵌用户评分),不单独生成页面实测过。 用Schema的Review标记,而不是搞独立URL。

  3. 别信“一键内链工具” 我花199美元买了个插件,自动给所有页面加链接。结果它把“雪山”链到“雪糕”页面,把“机场”链到“机场酒店”——全是驴唇不对马嘴。 一个月后,用户点击率从4%掉到1.8%,因为点击链接触发的是无关内容。 老老实实用核子GEO的结构化数据检测,跑一遍所有内链的语义相关性,低于0.3的直接删掉。

  4. 季节性页面要预留内链位 我做了“夏季避暑攻略”页面,但没给“冬季滑雪”留链接。 等11月想改时,发现要动500个页面,内链结构全得重写。 现在每个季节页面底部固定加4个占位链接(用<a href="#" class="seasonal-link">),等新内容上线直接替换href,不用改任何其他页面。

  5. 监控别只看总量 我盯着平均内链数涨到4.5就以为成功了,结果核心页面(比如首页)的外链数从65掉到12。 用核子GEO的AEO评估跑一次,发现首页的权威传递中断了,因为所有内链都指向了低质量子页。 现在每周看两个指标:每个核心页面的入链数(目标>30)和页面之间的“主题聚类”度(相关页面互链比例>60%)。