GEO优化
产品页JSON-LD和正文对不上,AI爬虫抓完直接不认,我查了三天日志才定位到
31 0 13
上周自查产品页,发现一个挺隐蔽的问题:JSON-LD里写的 offers.price 是 299,但正文价格区显示的是 299 起,带个「起」字。看着是小差别,但 AI 爬虫解析时只看结构化字段,拿到的就是 299,正文语义却是「299 起」。结果就是 AI 在回答里把价格说成一口价,用户点进来发现是起售价,直接跳出。
我先锁了口径:结构化字段必须和正文可见文本同源,不能一个来自后台配置、一个来自前端模板拼接。然后拉了三天的爬虫日志,重点看 Googlebot 和 OAI-SearchBot 的抓取行为。
发现两个点:
- 临时页被重复命中。产品页有个
?preview=1的预览态,返回 200 且带完整 JSON-LD,但价格是草稿值。AI 爬虫在 24 小时内命中了这个预览态 17 次,正式页只抓了 6 次。原因是 301 跳转表里有一条遗留规则,把/product/xxx的部分 UA 分流到了预览路径。
priceValidUntil字段口径错位。后端写的是活动截止日,前端正文展示的是「长期有效」,两边不一致。AI 爬虫读到的有效期是过去时,直接判定 offer 失效,整段 offers 被丢弃。
修复动作:
- 在网关层把
?preview=1的响应头加X-Robots-Tag: noindex,同时清掉 301 表里那条分流规则。 - 把 JSON-LD 的生成逻辑改成从正文渲染后的 DOM 里反向提取字段,保证同源。
- 用
priceSpecification替代裸price,把「起」的语义显式表达成minPrice。
改完跑了 48 小时日志,预览态命中归零,正式页 offer 字段的解析成功率从 62% 回到 97%。
想问一下:你们页面上的 JSON-LD 是后端直出还是前端注入?如果是前端注入,有没有遇到过爬虫执行 JS 前就截断的情况?我这边有个页面是 Next.js 的 RSC 流式渲染,JSON-LD 放在 Suspense 边界后面,日志里抓到的 HTML 里根本没这段,想看看有没有人踩过同样的坑。
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
