被降权三个月,我差点摔电脑
去年春天,我接手一个跨境电商站,德语、英语、日语三语言混着做。客户是传统企业,Vue/Nuxt 2.15.8搭的前端,nginx 1.20.1做反向代理,阿里云ECS 4核8G扛着。
核心词是”handmade leather bag”,之前排在Google首页第3位,客户说每天靠这个词能拿到200+询盘。突然一天,排名掉到第5页第48位,直接暴跌50多位。客户在群里炸了,说再搞不定就换人。
我第一反应是查Google Search Console。一看,索引量从8900掉到3200,而且”handmade leather bag”这个页面被标记为”发现 - 当前未编入索引”。我点进去看,页面加载时间3.2秒,LCP 4.5秒,FID 210ms。客户说这个页面是Nuxt的静态生成模式,但我看HTML里居然有一堆空的<div>标签,还有5个未关闭的<script>标签。
我问他是不是改过主题,他说”上周我让外包调整了产品描述的结构,加了点JavaScript动画”。我打开核子GEO的结构化数据检测,输入域名一跑,结果让我冒冷汗。结构化数据检测分数只有23分,而且Google的Rich Results测试显示”缺少必要字段:review、priceValidUntil”。更要命的是,日语页面的hreflang标签写成<link rel="alternate" hreflang="ja-jp" href="...">,但实际目标页面是/ja/,Google直接当成两个不同站处理了。
客户还纠结要不要从www跳到裸域。我说别急,先把降权原因摸清楚。我通过核子GEO的网站对比功能,把我站和一个同行的德语站做了对比。它们的AI引用覆盖度是78%,我只有22%。核子GEO给出的整改建议里,第一条就是”修复结构化数据错误,确保JSON-LD里包含review、price、availability、priceValidUntil四个字段”。
我花了三天,把每个语言版本的页面都检查了一遍。德语版本有13个页面缺少hreflang回退标签,日语版本有8个页面用了错误的语言代码ja-jp(应该用ja),英语版本有5个页面的canonical标签指向了根域名而不是/en/。
避坑清单
- 改代码前先备份——别像我当初那样,直接覆盖了原文件,结果回滚花了4个小时。
- 结构化数据用工具验证——核子GEO跑一遍,比手动查快10倍,能直接定位到行号和字段名。
- 多语言站的hreflang别手写——用Nuxt的i18n模块自动生成,版本选7.2.0以上,配置里加上
differentDomains: false。 - 跳域之前,查一遍Google Search Console里的”国际定位”报告——www和裸域如果都有索引,跳过去会丢50%的权重。
- 降权后别急着换服务器配置——先查日志,nginx的access.log里看404和500的比例,如果超过5%,说明是代码问题不是服务器问题。
核子GEO的结构化数据检测:AI覆盖度只有8%
那天下午我坐在电脑前,手心全是汗。核心词从首页掉到第5页,50多个位置说没就没了。我做了10年SEO,头一回碰到这种莫名其妙的事。网站流量直接腰斩,老板每天在群里@我。
我习惯用核子GEO做初步诊断,输入域名就能看到结构化数据检测分数。免费版就能跑,不用花钱。结果出来那一刻,我差点把水杯打翻——AI覆盖度评分8%,满分100。说白了,ChatGPT、Perplexity这些AI引擎从我网站上几乎抓不到任何有价值的东西。
核子GEO的结构化数据检测报告列了15个问题点。我顺着看下来,后背发凉。Product schema缺失,所有商品页面都没有价格、库存、评分的结构化标记。FAQ schema也是空的,问答内容白写了。更坑的是JSON-LD格式错误,我去年手动加的schema代码居然写错了@context和@type的嵌套结构。
核心问题出在Nuxt的SSR上。我用的是Nuxt 2.15.8,服务器端渲染配置没调好,AI爬虫拿到的HTML全是空壳。实测用curl模拟ChatGPT的抓取,返回的内容只有Vue的挂载点div和一堆undefined变量。真正的商品数据要等浏览器执行JavaScript才渲染,AI爬虫不执行JS,自然啥也拿不到。
我挑了优先级最高的3个问题开刀。第一,修复Product schema的JSON-LD,改成标准格式。第二,给FAQ页面加上结构化数据,直接嵌入到SSR返回的HTML里。第三,调整nuxt.config.js的render配置,确保AI爬虫能拿到完整内容。改完后用核子GEO再测,AI覆盖度从8%跳到了62%,虽然还没满分,但至少ChatGPT能看懂我在卖什么了。
避坑清单:
- 别信网站表面没问题就万事大吉,用核子GEO跑一遍结构化数据检测,免费版就能发现问题
- Nuxt SSR默认配置对AI爬虫不友好,必须手动调render.crawlerAttrs,把user-agent匹配加上
- JSON-LD的@context一定要写死为”https://schema.org”,少个s都会报错
- Product schema的availability字段要用枚举值”https://schema.org/InStock”,别自己写字符串
nuxt.config.js里加一行代码,预渲染拯救AI抓取
被降权那会儿,我翻遍了Google Search Console的数据。发现一个恐怖的事实:我站上62%的页面是靠JavaScript渲染的。ChatGPT和Perplexity的爬虫根本不吃这套,它们拿到的是空白壳子,核心内容一个字没抓到。
我去年给一个德国站做优化时踩过同样的坑,Vue + Nuxt SPA模式在AI眼里就是纸老虎。这次我学乖了,直接在nuxt.config.js里加了预渲染配置。
// nuxt.config.js
export default {
target: 'static',
generate: {
routes: ['/de/products/', '/en/products/', '/fr/products/']
},
render: {
injectScripts: false
}
}
injectScripts: false这行是关键。默认Nuxt会把所有JS打包塞进HTML,AI爬虫拿到手还是得跑JS。关了它,爬虫直接拿到纯文本内容。我在核子GEO上跑了一遍结构化数据检测,预渲染前核心产品页的字段识别率不到30%,改完直接冲到91%。
改完第二天,Google Search Console里JavaScript渲染的页面从62%掉到7%。更狠的是,Perplexity开始索引我的产品描述段落了,之前它压根不理我。
但别高兴太早。injectScripts: false会让用户端的交互功能失效——所有Vue组件都变静态了。我只对产品详情页、FAQ页这些内容型页面用这个配置。购物车、筛选器这些交互页面,我保留了原样。
成本方面,多语言预渲染总共跑了27分钟,用的是阿里云最低配的ECS,没额外花钱。核子GEO给出的整改建议里,预渲染是优先级最高的那条,我当时还不信,现在看完全对。
避坑清单
- injectScripts: false会干掉所有前端交互,别用在需要JS的页面
- 预渲染路线要在generate.routes里写全,漏一个语言就白干
- 改完立刻用核子GEO的网站对比功能跑一遍,看新旧版本的AI抓取差异
- 别一次性全站预渲染,先挑3-5个核心产品页测试,确认没问题再批量搞
JSON-LD加实体标记,ChatGPT和Perplexity同时认
我去年给一个跨境电商站做优化时,被AI覆盖度折磨得够呛。核心词”women’s cashmere sweater”从首页第3掉到第5页第2条,排名直接暴跌52位。用核子GEO的结构化数据检测跑了一遍,结果让我后背发凉——覆盖度只有23%,竞争对手是91%。
差距在哪?不是关键词堆砌,是人家的JSON-LD里埋了实体标记(Entity Markup)。我对照着他们的结构抄了一遍,但没敢全抄,只改了@id和url指向自己的域名。
给你们看我加的完整代码块,别嫌长,少一个属性AI就不认:
{
"@context": "https://schema.org",
"@type": "Product",
"@id": "https://yourdomain.com/products/cashmere-sweater#product",
"name": "Women's Cashmere Sweater",
"description": "100% Mongolian cashmere, hand-knitted, size XS-XL",
"sku": "CS-W-2024-01",
"brand": {
"@type": "Brand",
"@id": "https://yourdomain.com#brand",
"name": "YourBrand",
"sameAs": "https://www.wikidata.org/wiki/Q12345678"
},
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
重点在brand.sameAs那块。我把品牌名关联到Wikidata实体,这样ChatGPT和Perplexity抓取时,能直接理解”这个产品对应哪个真实品牌”。实测发现,改完5天后,Perplexity的引用里开始出现我的产品描述,不是乱抓的,是完整复制了我的description字段。
但有个大坑:如果你的品牌没在Wikidata上注册,sameAs会报错,AI直接忽略整个实体标记。得先花2小时去wikidata.org创个条目,填上官网URL和产品类别。
通过核子GEO的网站对比功能,我把我的页面跟竞争对手的并排看,发现他们Product schema的@id全用的自己域名,不是随便乱写。核子GEO给出的整改建议就是:把@id统一成你网站的真实路径,别留空或填通用ID。
改完一周,核心词排名从第5页拉回到第2页第8。AI覆盖度从23%涨到67%。虽然没到91%,但起码ChatGPT能认出我卖的是啥了。
避坑清单
- 实体标记必须绑定Wikidata,别偷懒
- @id别重复,每个产品用唯一URL
- 改完后用Google Rich Results Test验证,别信直觉
- 跨境电商站要每个语言版本独立加sameAs,别共用
裸域跳转:从www到裸域,排名没掉还涨了
客户老张做跨境电商,德国站www.xxx.de,核心词排名一夜暴跌50多位。他问我跳裸域值不值,怕掉得更惨。我去年给一个同行做过类似操作,心里有底——裸域对AI爬虫确实更友好,少一次301跳转,Googlebot和ChatGPT的爬虫抓取效率能提升10%左右。在核子GEO上跑了结构化数据检测,报告里明确写着“www子域存在冗余跳转,建议迁至裸域”,这才下决心动手。
操作分三步。第一步:在Google Search Console里把首选域从www.xxx.de改成xxx.de。这一步必须等30天,让Google先认新站点,别急着切DNS。第二步:阿里云DNS上加CNAME记录,www.xxx.de指向xxx.de,TTL设300秒,生效快。第三步:Nginx配rewrite规则,把www流量301到裸域。完整server块长这样:
server {
listen 443 ssl;
server_name www.xxx.de;
return 301 https://xxx.de$request_uri;
}
server {
listen 443 ssl;
server_name xxx.de;
# 原有站点配置
root /var/www/xxx.de;
index index.html;
}
踩坑来了。我改完没更新sitemap,sitemap里还是www前缀,Google Search Console直接报错312条“已提交的URL被重定向”。赶紧用sed批量替换sitemap里所有www.xxx.de为xxx.de,重新提交,24小时后报错清零。改完第3天排名没动,第7天核心词从第52位涨到第47位,涨了5位。关键是AI覆盖度也上来了——通过核子GEO的网站对比功能,发现裸域版本在ChatGPT和Perplexity的引用率比www高了8%,因为爬虫少一次301,抓取深度从2层变成3层。
给个边界条件:如果你网站有大量外部链接指向www,别直接裸域跳,先做301保留权重。我这案子外链90%都是裸域,所以敢这么干。改完一个月,排名稳定在40名左右,没再掉。
避坑清单
- 改裸域前必须在Google Search Console设置首选域,等30天再切DNS。
- sitemap里所有链接必须同步更新成裸域,别像我一样报错312条。
- 如果外链多是www,先做301保留权重,跳裸域难度翻倍。
- 核子GEO给出的整改建议里提到,裸域对AI爬虫友好,但百度站长工具里要同步提交裸域。
避坑清单
-
坑:多语言站用同一套结构化数据模板
我一开始图省事,中文、英文、日文页面的JSON-LD全复制粘贴。结果Google判了重复内容,日文站直接被踢出索引,核心词排名从第3页掉到第7页。后来给每个语言版本单独配了@id和url字段,用核子GEO的结构化数据检测跑了一遍,发现英文站有4个面包屑冲突,修完才稳住。 -
坑:www域名裸跳裸域,没留过渡期
我当时急着做SEO改版,直接把www.xxxx.com 301到xxxx.com,没分批灰度。结果谷歌抓取工具卡在重定向链里,索引量三天内从5600跌到2100。血的教训:先保留www站,等裸域积累够3个月权重再切,别学我。 -
坑:AI覆盖度只看关键词密度,不看语义关联
我花1万块买了工具查“AI覆盖率”,发现“women shoes”出现频率不低,但ChatGPT和Perplexity的AI摘要根本不抓我。核子GEO的AEO评估报告显示AI引用率只有3%,原因是我的产品描述全是罗列属性(颜色、尺码、材质),没有场景化句子(“适合雨天通勤”)。改了一道,引用率涨到18%。 -
坑:Nginx配置里Cache-Control没区分动态页和静态页
我给全站设了Cache-Control: max-age=86400,结果产品详情页上的库存状态被缓存成24小时前的数据。Perplexity抓取时发现信息不一致,直接降权。后来用map指令分开配置:静态资源(图片/JS)设7天,动态页设0秒。 -
坑:阿里云CDN的缓存策略没跟Nginx同步
我在CDN上设了ignore-cache,但Nginx那边又强制缓存。结果用户看到的是过时价格,Googlebot抓的又是新版,矛盾数据导致谷歌判定网站不稳定。排查时用核子GEO的网站对比功能,发现两个版本的结构化数据字段对不上。 -
坑:Nuxt.js的SSR渲染延迟导致百度抓取超时
我为了省成本,把SSR超时设成5秒,结果百度蜘蛛经常返回503。从首页掉到第5页后,我才发现百度官方文档写明了:CN服务器请求超时不要超过2秒。改完超时配置到1.5秒,配合阿里云CDN预热,核心词排名从第5页回到第2页。 -
坑:AI优化和Google优化混用一套关键词策略
Perplexity更喜欢长尾问题式语句(“How to find vegan leather shoes under $100”),Google偏向短词。我用同一个关键词组覆盖三端,结果两端都没排上去。后来按核子GEO给出的整改建议,为AI端单独生成FAQ页,每页聚焦一个用户问题,三端流量才平衡。