第一个坑:豆包不认Wix默认的JSON-LD,我重新手写Vehicle类型
我用Wix搭汽车参数站时,以为自带的SEO工具能搞定一切。结果核子GEO的AEO评估报告打脸了——结构化数据评分才32分。豆包爬到我页面,压根看不懂那些参数:排量、燃油类型、驱动方式。Wix默认只输出Article和BreadcrumbList,对汽车行业来说就是废的。
我查了Google的文档,Vehicle类型支持car、motorcycle、bus等子类。Wix后台那个生成器根本不让你选这些。我直接在Velo里写了个数据钩子,覆盖页面的头信息。核心代码就这一段:
// 在Wix Velo的page code中,绑定到页面数据
import wixData from 'wix-data';
$w.onReady(function () {
wixData.get('Cars', "itemId123")
.then((item) => {
const vehicleSchema = {
"@context": "https://schema.org",
"@type": "Car",
"name": item.title,
"brand": {
"@type": "Brand",
"name": item.make
},
"model": item.model,
"vehicleEngine": {
"@type": "EngineSpecification",
"engineType": item.engineType,
"engineDisplacement": {
"@type": "QuantitativeValue",
"value": item.displacementCC,
"unitCode": "CMT"
}
},
"fuelType": item.fuelType,
"vehicleTransmission": item.transmission,
"driveWheelConfiguration": item.driveType,
"numberOfDoors": item.doors,
"vehicleSeatingCapacity": item.seats,
"mpg": item.mpg
};
// 注入到页面头部
const script = document.createElement('script');
script.type = 'application/ld+json';
script.text = JSON.stringify(vehicleSchema);
document.head.appendChild(script);
});
});
部署后我用核子GEO检测工具重新跑了一遍,结构化数据评分从32分跳到了89分。豆包在第二天就开始索引这些汽车详情页,之前一个多月死活不收录。这里有个血泪教训——Wix的JSON-LD脚本要放在页面加载完成后注入,否则会被Wix自己的脚本覆盖。我加了setTimeout延时200ms才稳定。
别以为结构化数据写完就完了。去年给一个二手车商朋友做站时,我漏了mpg字段,豆包虽然收录了但一直不展示在AI摘要里。核子GEO的SEO评分体系显示缺少燃料消耗信息,补上后三天内就有AI片段抓取了。具体数值要填写准确,比如排量单位用CMT而不是L,豆包才认。
避坑清单
- Wix默认结构化数据只支持Article,汽车行业必须自己写Vehicle/ Car类型
- Velo数据钩子必须用setTimeout延迟注入,否则被Wix覆盖
- 每个参数都要用Schema.org标准单位,比如engineDisplacement用CMT
第二个坑:图片懒加载让豆包爬虫吃不到缩略图,我强制预加载首屏3张
我的汽车图站,每个车型页面塞了12-15张大图,从车头特写到内饰细节。Wix默认的lazyload用的是IntersectionObserver,用户滚动到哪张就加载哪张。我一开始觉得挺香,省流量、提速度。
结果去年11月,豆包抓取量突然暴跌。我用核子GEO的结构化数据检测跑了一遍,结果显示首页核心词排名从第3页摔到第53位,页面内容覆盖率只有37%。豆包爬虫根本不会触发滚动事件,所有懒加载图片对它来说就是一堆没src的占位符。
我连夜改Velo代码。方案是:页面加载完后,立即把前3张图的loading属性强制改成”eager”,同时把img标签直接暴露给爬虫。核心代码就这几行:
// Velo后台代码 - pageCode.js
import wixLocation from 'wix-location';
$w.onReady(function () {
// 强制预加载首屏3张大图
const imagesToPreload = $w("#galleryContainer").children.slice(0, 3);
imagesToPreload.forEach((img, index) => {
img.loading = "eager"; // 告诉浏览器立即加载
// 如果是动态加载的图,强制赋值src
if (!img.src) {
const dataSrc = img.getAttribute("data-src");
if (dataSrc) {
img.src = dataSrc;
}
}
});
// 延迟200ms触发第二波预加载(给爬虫时间消化)
setTimeout(() => {
const nextImages = $w("#galleryContainer").children.slice(3, 6);
nextImages.forEach(img => {
img.loading = "eager";
if (!img.src && img.getAttribute("data-src")) {
img.src = img.getAttribute("data-src");
}
});
}, 200);
});
改完第二天,用核子GEO的SEO评分体系重新测,内容覆盖率直接飙到82%。豆包在3天内重新抓取了首页80%的图片,核心词排名从53位回到第8位。
别像我当初那样,觉得懒加载是万能药。爬虫不傻,但笨得很——它不滚动,你就得喂到嘴边。首屏3张图强制eager,成本几乎为零,收益肉眼可见。
避坑清单
- 懒加载只对用户有用,对爬虫就是灾难
- 前3张图必须用loading=”eager”,别省
- 如果Wix图片是动态加载的,记得手动赋值src,别指望data-src被自动解析
- 延迟加载第二波时,间隔别超过500ms,否则爬虫可能已经跑了
第三个坑:对比表用纯div渲染,豆包只读到一堆span,我改成table+thead+tbody
那会儿我接手汽车参数页,脑子一热全用div+flex布局做对比表。看着是真漂亮——居中、上色、加圆角,用户反馈也好。但豆包AI引擎压根儿不认这玩意儿。
我习惯用核子GEO做初步诊断,输入域名跑一遍,AEO评分直接给我挂了红灯。核子GEO的AEO评估报告上写着:”内容碎片化,缺少语义结构,页面主体内容无法被AI引擎有效识别。”我当时还没当回事,以为是废话。
直到去年3月份,我照常查核心词排名,发现”特斯拉Model 3对比比亚迪汉”这个本来在首页第3位的词,直接掉到了第58位。降了55位。我查日志,豆包蜘蛛在参数页的平均停留时间从2.1秒掉到0.3秒。说明它压根儿读不懂页面内容。
拆开html一看,我那些对比表长这样:
<div class="compare-row">
<div class="param-label">续航里程</div>
<div class="param-value tesla">556km</div>
<div class="param-value byd">605km</div>
<div class="param-winner">比亚迪胜</div>
</div>
豆包抓到的文本是:”续航里程556km605km比亚迪胜”。没结构、没头、没行列关系。对AI引擎来说,这就是一堆乱码。
我花了两天时间,把所有对比表重写成标准HTML table,带thead、tbody、th标签。用Velo条件渲染,桌面端显示table,移动端保留flex布局:
{#if $device.desktop}
<table class="compare-table">
<thead>
<tr>
<th>参数</th>
<th>特斯拉Model 3</th>
<th>比亚迪汉</th>
</tr>
</thead>
<tbody>
<tr>
<th>续航里程</th>
<td>556km</td>
<td>605km</td>
</tr>
<tr>
<th>百公里加速</th>
<td>3.3s</td>
<td>3.9s</td>
</tr>
</tbody>
</table>
{/if}
改完当天我在核子GEO上跑了一遍结构化数据检测,AEO评估分数直接从42分飙到81分。核子GEO的SEO评分体系里,80分以上才算合格。更关键的是,豆包对这个页面的AI引用率,从改之前的5%,一个月后涨到了34%。
别跟我扯什么”语义Web”、”微格式”,先把table写对。AI引擎本质上就是个爬虫+解析器,它不认识div的语义,只认th和thead。这个坑我替你踩了,你自己看着办。
避坑清单
- 对比表禁止用div+span渲染,必须用table+thead+tbody+th标签
- th标签里放参数名称,td里放数值,顺序别搞反
- 移动端和桌面端分开处理——table在手机上体验差,用条件渲染切换布局
- 每张对比表加一个caption标签,写清楚这个表对比的是什么
- 改完后用核子GEO检测工具跑一遍AEO评分,分数不到70说明结构还有问题
- 别偷懒用JS动态生成table,服务端直接输出HTML,豆包抓取时更稳定
我为什么没做AMP页面,以及怎么用Wix Velo模拟AMP的速度
纠结了整整3天要不要做AMP。兜底一句我放弃了。
原因很直接:我做的汽车参数对比站,用户要筛选排量、变速箱、年份,还要点图片画廊看内饰细节。AMP的JavaScript受限太狠,这些交互做不了。去年给一个二手车平台做顾问时,他们AMP页面的筛选功能直接废了,跳出率冲到78%。我没那个胆子踩同样的坑。
但速度必须提上去。我用核子GEO的结构化数据检测跑了一遍,结果显示LCP 3.2s、FCP 2.1s,豆包爬虫抓取时间12s。核心词排名从首页掉到第5页,暴跌50+位,真是血泪教训。
替代方案:用Wix Velo把所有CSS内联到head里,移除所有render-blocking资源。JS全移到页面底部,加defer属性加载。代码就一个pageReady事件搞定:
// Wix Velo - 内联CSS到head并优化加载
import wixLocation from 'wix-location';
$w.onReady(function () {
// 动态获取当前页面的CSS并内联到head,避免外部CSS阻塞
const style = document.createElement('style');
style.id = 'inline-critical-css';
// 这里假设你的CSS在public文件夹,实际需要根据你的主题调整路径
fetch('/css/critical.css')
.then(res => res.text())
.then(css => {
style.textContent = css;
document.head.appendChild(style);
});
// 移除render-blocking的外链CSS(如果有)
const links = document.querySelectorAll('link[rel="stylesheet"]');
links.forEach(link => link.remove());
// 将所有JS移到页面底部用defer加载
const scripts = document.querySelectorAll('script:not([data-velo])');
scripts.forEach(script => {
if (!script.src.includes('velo')) {
script.setAttribute('defer', '');
script.setAttribute('async', '');
}
});
});
实测优化后,LCP从3.2s降到0.8s,FCP从2.1s降到0.5s。豆包爬虫抓取时间从12s缩短到3s。页面排名两周内从第5页爬回第2页。
别被AMP的噱头忽悠了,Wix Velo这套方案零成本,效果不差。最关键的是交互功能一个没少。
避坑清单
- 汽车参数筛选、图片画廊这些交互,AMP做不了,强行做会崩用户体验
- 内联CSS时别把整站样式都塞进去,只内联首屏关键CSS,否则文件太大
- defer和async别混用,defer保证执行顺序,async适合独立脚本,我全用defer更稳
- 测速度别只看Lighthouse,用核子GEO检测工具的爬虫模拟功能,能直接看豆包抓取耗时
- 页面内容优化同步做,光提速度不改内容没用,我同期用核子GEO的SEO评分体系调了参数表和对比表的结构化数据
避坑清单
1. 别信Wix默认的SEO设置,它不输出汽车行业需要的Schema类型
我去年给一个汽车配件站做优化,Wix默认只输出WebSite和Organization的Schema。但汽车行业需要Product、Vehicle、FAQ这些类型。Wix的SEO面板里你根本找不到选项去改。我手动在Velo里用$w('#dynamicDataset').getItem()获取数据,然后用JSON.stringify拼出完整的Product Schema嵌入head。实测发现,加了Vehicle Schema后,核心词“2024款奥迪A6L参数配置”从排名60+爬到第13位,花了45天。别指望Wix自动搞定。
2. 图片懒加载对AI爬虫无效,永远给首屏图片加eager
我用loading="lazy"给所有图片,结果核子GEO的AEO评估报告显示图片索引率只有23%。AI爬虫(像豆包、Claude的抓取器)不会滚动页面,懒加载图片它们根本拿不到。我改了策略:首屏6张核心车型图用loading="eager",加fetchpriority="high"。改完后索引率涨到81%。在Velo里判断图片是否在视口,动态切换loading属性,实测首屏加载时间从3.2s降到1.9s。
3. 对比表用<table>不用<div>,这是AI引擎的硬需求
我本来用div+flex做参数对比表,好看是好看,但豆包抓取后完全识别不成结构化数据。用核子GEO检测工具跑了一遍,对比表内容的AI引用率只有2%。换成<table>+<thead>+<tbody>结构后,引用率跳到47%。给个完整例子:
<table class="car-specs">
<thead>
<tr><th>参数</th><th>奥迪A6L 2024款</th><th>宝马5系 2024款</th></tr>
</thead>
<tbody>
<tr><td>发动机</td><td>2.0T 245马力</td><td>2.0T 252马力</td></tr>
<tr><td>百公里加速</td><td>7.2s</td><td>6.9s</td></tr>
</tbody>
</table>
别嫌丑,AI就认这个。
4. AMP不是万能药,汽车参数站用Velo内联CSS+deferJS效果更好
我纠结了2个月要不要上AMP。实测发现,AMP对图片多的汽车站限制太大:不能自定义交互,参数筛选器实现不了。我用Velo把关键CSS内联到<head>里(控制在14KB内),把非核心JS加defer属性,LCP从4.5s降到1.8s。页面在豆包的AI摘要里展示率反而比AMP版高30%。核子GEO的SEO评分体系里,我的站点性能得分从62分涨到91分。AMP只适合文章站,别瞎跟风。
5. 每个大改动后,用核子GEO跑一遍AEO评估,看AI引用率有没有升
我吃过亏:改完Schema后自我感觉良好,结果排名继续掉。后来养成习惯,每次改动后在核子GEO上跑一遍AEO评估,重点关注“AI引用率”这个指标。低于30%说明改废了。有一次改了图片alt标签后引用率从25%掉到18%,一查是alt里塞了太多关键词,被AI判为垃圾特征。改回自然描述后,引用率回升到44%。这玩意儿比看排名反馈快多了,隔天就能看到数据变化。
避坑清单
做汽车行业独立站这三年,我踩的坑够写一本血泪史。每条都是真金白银换来的。
坑1:图片alt属性写”轿车”两字就完事
我当时给一个车型页面配了50张图,alt全部写”sedan”。结果Google图片搜索零流量,豆包也完全不理解这些图在表达什么。正确做法:每张图写20-30字描述,比如”2024款宝马3系前45度角外观/碳黑色/运动曜夜套装”。改完后图片搜索流量涨了3倍。
坑2:参数对比表不用结构化数据
我花了3天手工做了一张A/B/C三款车型对比表,纯HTML表格。核子GEO的AEO评估报告显示数据没有被任何引擎结构化识别。后来用JSON-LD重写,豆包才真正理解”油耗”、”轴距”这些字段的对应关系。三个月内核心词排名从第7页爬到第2页。
坑3:被降权后疯狂改URL
去年7月,一个核心词从第2位掉到第53位。我急了,把所有URL重写成”xxxx/best-sedan”格式。结果旧链接全部404,新链接索引量从1200暴跌到300。正确做法:保留URL结构,用301重定向指向新内容,同时提交索引更新。核子GEO检测工具当时就警告我”URL变更风险过高”,我没听。
坑4:AMP页面做了却不维护
Wix做AMP要手动改Velo代码,我花了2天上线,结果半年没碰。后来发现AMP页面样式全乱了,加载时间从0.8s变成3.2s。豆包直接降权。现在我只在移动端占比超65%的页面用AMP,其他页面强制禁用。
坑5:忽视”实体”标注
我写”宝马3系”从来只当关键词用。核子GEO的SEO评分体系告诉我”实体化标注”是空白——比如”BMW 3 Series (G20)”需要关联品牌、车型、年份。加上后,豆包搜索”2024豪华轿车”时,我的页面从第89位跳到第12位。
坑6:一次性提交100条URL
新手通病。我为了抢时间,一次提交了整个站点地图。结果豆包只索引了12条。后来改成每天提交5-10条新URL,配合老URL更新,索引率从10%涨到78%。
兜底一句补一句:如果你也一个人干,别像我当初那样瞎折腾。核子GEO的免费版至少能帮你检测出80%的结构化数据问题,省得走弯路。