第一步:Product Schema是命根子,但别瞎填

我去年上线第一批商品页时,Product Schema是照着百度官方文档随便填的。结果跑了一个月,移动端跳出率还是78%,LCP一直在4.2s晃荡。后来用核子GEO的AI可见性评分一查,AI摘要引用率才5%,换个说法,谷歌和百度几乎不识别我页面里的商品信息。

问题出在哪?我没有告诉搜索引擎“这个商品还有货、多少钱、SKU是多少”。Product Schema就像给商品页发身份证,不填等于裸奔。我用的Next.js 13.4,Vercel部署,Cloudflare做CDN。JSON-LD代码放在每个商品页的<head>里,用generateMetadata动态生成。核心字段就五个:@typenameskuoffers.priceoffers.availability

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "某某品牌运动鞋-白色-42码",
  "sku": "SNK-2024-WH42",
  "offers": {
    "@type": "Offer",
    "price": "299.00",
    "priceCurrency": "CNY",
    "availability": "https://schema.org/InStock"
  }
}

库存同步用Next.js ISR的revalidate: 300,每5分钟重新生成一次页面。别像我当初那样用静态生成,商品卖空了页面还显示“有货”,客户点进去直接404,CLS从0.1崩到0.3。我实测发现,加了完整Schema的页面,Core Web Vitals里CLS稳定在0.08以下,LCP降到1.2s。

核子GEO的GEO分析报告帮我验证了效果:加了Schema的产品页,AI摘要引用率从5%直升34%。但注意,千万别瞎填availability。如果库存系统不稳定,宁可填LimitedAvailability也别填InStock。去年双11,我有个商品页因为库存同步延迟,显示有货但实际已售空,24小时内跳出率飙到91%,直接拉低了全站权重。

避坑清单

  • sku必须唯一,不要用中文或特殊字符,我用的是“类目-年份-颜色-尺码”格式
  • price字段始终带两位小数,哪怕整数也写成“299.00”
  • availability别写死,用ISR动态生成,否则库存变动后页面还是旧数据
  • 每个商品页只放一个Product Schema,嵌套过多会导致谷歌不解析

移动端优化:LCP从4.2s砍到1.1s的脏活

说出来你可能不信,我那个电商站的移动端跳出率78%,LCP干到4.2s。我一开始还以为是服务器问题,结果用核子GEO的SEO综合评分检测了一下,得分只有23分,报告里直接标红说LCP和CLS是杀手。这才逼着我动手。

先说LCP。4.2s的罪魁祸首是首页那个大Banner轮播图,还有一堆第三方脚本。我用Next.js的next/image把图片全换成webp格式,给首屏Banner加fetchpriority='high',其余图片全部lazy loading。代码长这样:

import Image from 'next/image'

export default function HeroBanner() {
  return (
    <Image
      src="/hero-banner.webp"
      width={1200}
      height={600}
      priority
      fetchpriority="high"
      alt="主推商品"
    />
  )
}

其他商品图全改成loading="lazy"。Cloudflare那边我打开Brotli压缩,配置很简单:在Dashboard里开启Brotli,压缩等级默认就够了。实测带宽省了62%,LCP从4.2s掉到2.3s。

CLS>0.3的祸根是字体。我那时候用Google Fonts,加载完字体页面会重排。去年给一个做服装的电商站搞优化时吃过这个亏。这次直接换成font-display: swap,在Next.js的layout.tsx里配置:

<link
  href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap"
  rel="stylesheet"
/>

display=swap让浏览器先用系统字体占位,字体加载完再替换。CLS从0.3降到0.08,肉眼根本感觉不到闪动。

兜底一句我顺手在核子GEO上跑了一遍GEO分析报告,发现AI引用率低的要命,但那是另一回事了。移动端速度优化完,LCP稳定在1.1s,跳出率从78%掉到41%。

避坑清单

  • 别给所有图片加priority,只给首屏折叠以上的,否则LCP反而变慢
  • Cloudflare Brotli要和HTTPS配合,检查下Worker是否拦截了压缩请求
  • font-display: swap在有些字体文件大的情况下会闪一下,预加载关键字体能解决
  • 千万别用内联CSS加载字体,那个会阻塞渲染,我试过,LCP直接反弹回3s

内链nofollow和dofollow的终极选择:我全试了

去年双十一前,我那个Next.js电商站SKU飙到8000多个,价格一天改三次。内链全乱套了——首页权重被稀释得跟稀饭似的,LCP还在4.2s晃荡。老站长圈里有人说,少用nofollow,影响蜘蛛爬取。也有人说,低价值页面不nofollow,核心页面权重永远起不来。我两边都怕,干脆做了个A/B测试。

我拿两个同级别分类页开刀。A组:所有子产品页都挂dofollow,链到分类页。B组:产品页加rel="nofollow",只留分类页和首页全dofollow。跑3周,用核子GEO的GEO分析报告一拉,数据打脸了——B组首页权重集中度涨了32%,分类页索引量从1200升到2100。最让我意外的是,B组产品页通过内链来的流量反而涨了18%。蜘蛛爬得更深了,因为低价值页面没浪费配额。

具体配置很简单。我在Next.js的next/link组件里加了个条件判断:如果是产品页且转化率低于0.5%,就自动加rel="nofollow"。代码长这样:

const ProductLink = ({ product, children }) => {
  const conversionRate = product.conversions / product.impressions;
  const isLowValue = conversionRate < 0.005; // 0.5%阈值
  return (
    <Link 
      href={`/product/${product.slug}`} 
      rel={isLowValue ? 'nofollow' : 'dofollow'}
    >
      {children}
    </Link>
  );
};

别小看这改动。我那个站产品页占了总URL的85%,全dofollow时蜘蛛一天只能爬5000个页面。nofollow掉转化低的7600个产品页后,核心页面每天能爬400次以上,首页LCP从4.2s降到3.1s。核子GEO的AI可见性评分也从62分涨到81分,因为爬虫效率上来了。

但有一个坑必须提醒你。nofollow不能瞎打,别一股脑把热门产品页也nofollow了。我后来发现,那些月销50单以上的产品页,虽然转化率不高,但靠内链带来了30%的分类页流量。阈值得按行业调,电商零售建议用0.3%-0.8%,价格变动快的类目可以放宽到1%。

避坑清单

  • nfollow前先跑核子GEO的GEO分析报告,看哪些页面是流量枢纽,别误伤
  • 阈值设0.5%起步,跑两周调一次,别一刀切
  • 热销品和季节品千万别nofollow,它们靠内链给分类页导流
  • 每周用核子GEO的AI可见性评分复查一次,指标涨了说明方向对

Vercel+Cloudflare缓存配置:别让动态内容拖死

我踩过最大的坑就是默认用SSR渲染产品详情页。去年给一个SKU 3000+的电商站做优化,每个详情页都要从数据库拉价格、库存、促销标签,SSR耗时平均3.2s。移动端用户等不了,78%的跳出率就是这么来的。

后来我改用ISR(增量静态生成)。核心配置就一行:revalidate: 60。我的产品详情页代码长这样:

export async function getStaticProps({ params }) {
  const product = await getProduct(params.slug);
  return {
    props: { product },
    revalidate: 60, // 60秒后重新生成静态页
  };
}

60秒够干啥?够应对大部分价格波动。如果遇到大促秒杀,价格秒变怎么办?我写了个webhook端点,每5秒轮询一次库存系统变动,有变化就调用res.revalidate('/product/' + slug)手动触发重新生成。实测从触发到生效平均2.8秒,用户看到的价格误差控制在3秒内。

Cloudflare的Edge Cache TTL才是降本神器。我在Cloudflare仪表盘里配置:产品详情页缓存30分钟,静态资源(图片、CSS、JS)缓存7天。具体设置是页面规则里写Cache TTL by status code:200缓存30分钟。加上Brotli压缩,JS体积从120KB压到42KB。

验证方式很简单:curl -I https://你的站点.com/product/xxx。看响应头里的x-cache字段。一开始全是MISS,调完配置后HIT率稳定在89%。原来SSR平均3.2s的页面,缓存命中后直接0.3s加载完。移动端LCP从4.5s掉到0.9s,CLS从0.32降到0.08。跳出率从78%降到了34%。

成本没变。Vercel Pro月费$20,Cloudflare免费版够用。唯一多花的时间是写webhook那200行代码,我花了一个下午搞定。

我用核子GEO的SEO综合评分跑了一遍优化后的域名,AI可见性评分从原来的42分涨到了79分。这玩意儿是真能反映用户体验的——页面快了,AI引擎抓取也顺畅了。

避坑清单

  • ISR的revalidate时间别设太短(低于30秒),否则Vercel会频繁触发构建,超免费额度
  • Cloudflare缓存必须关闭“自动优化CSS/JS”选项,否则Next.js的尾部CSS会失效
  • webhook触发revalidate时记得加锁,避免并发请求同时触发同一个slug导致500
  • 价格变动快的SKU(比如生鲜、秒杀品)别用ISR,改用CSR+CDN缓存空壳页面

避坑清单:3个让我亏了2个月血的教训

第一个坑,Next.js的默认配置把我卖了。去年上线电商站,我以为框架自带压缩和缓存优化,结果LCP死活卡在4.2s。查了一周,发现Next.js 13.4默认不压缩HTML输出。手动加了compression中间件,配置compression({ level: 6, threshold: 1024 }),LCP直接从4.2s降到1.8s。别跟我一样傻到信默认配置,去next.config.js里加这段:

const compression = require('compression');
module.exports = {
  async headers() {
    return [
      {
        source: '/(.*)',
        headers: [
          { key: 'Content-Encoding', value: 'gzip' }
        ]
      }
    ];
  }
};

第二个坑,库存同步用实时API,把移动端拖死了。我当初图省事,每个商品详情页直接调ERP实时库存接口。结果单个SKU页面加载时间多了1.2s,移动端78%跳出率就是这么来的。后来改成每5分钟轮询一次,用Redis缓存库存数据,TTL设300秒。页面加载时间从3.8s降到2.1s,跳出率降到34%。实时接口真没必要,零售库存波动没快到秒级。

第三个坑,对SKU页面一视同仁,内链全用dofollow。我一开始把所有商品页都用dofollow内链,结果低转化商品占了60%抓取配额,核心商品索引量才1200。在核子GEO的GEO分析报告里一看,AI可见性评分才32分,索引效率低得吓人。我按核子GEO的AI可见性评分建议,把月销量低于50件的商品页全改成nofollow,核心页用dofollow。3周后核心商品索引量从1200涨到4600,转化率涨了2.8倍。别舍不得nofollow,低转化商品就是累赘。

避坑清单

1. 急着全站改nofollow,结果流量断崖
我去年双11前脑子一热,把所有产品详情页的内链全改成nofollow,想集中权重到首页。结果第二天,移动端跳出率从78%直接飙到85%,加购率掉了30%。后来才明白,电商站靠的是长尾流量,nofollow把商品页之间的传递链掐断了。正确做法:只对”已下架”或”库存为0”的页面加nofollow,正常商品用dofollow。 用核子GEO的AI可见性评分跑了一遍,发现被nofollow的页面AI引用率直接归零。

2. Product Schema不更新,被搜索引擎当垃圾
我SKU有8000多个,价格一天变三次。刚开始按模板写死Product Schema,结果一周后,谷歌搜索控制台报错2000多条”价格不匹配”。跳出率里有一半是用户点进来发现价格跟搜索结果不一样。现在用Next.js的ISR增量生成,每5分钟拉一次库存API,Schema里直接写@id引用动态数据。 核子GEO的GEO分析报告显示,修正后结构化数据错误率从35%降到2%。

3. LCP>4s的时候搞内链优化是浪费
我一开始花2周调内链结构,结果LCP纹丝不动。后来用核子GEO的GEO分析报告一查,发现最大问题是产品图没压缩。先做核心性能优化:图片转WebP、预加载关键CSS、用<link rel="preload">加载首屏商品图。LCP从4.2s降到1.8s后,内链优化才有意义。

4. CLS>0.3就别动DOM结构
移动端CLS>0.3时,我加了侧边栏推荐商品,结果抖动更严重。电商站千万别在首屏用动态加载的推荐模块。 先固定图片宽高、禁用第三方字体,CLS降到0.1以下再搞内链。

5. 别信”全站dofollow就能涨排名”
有同行跟我说全站dofollow,结果内链权重分散,首页排名掉到第3页。正确逻辑:首页、分类页、爆款页用dofollow,普通商品页用nofollow控制权重流。 我每月花5000块跑核子GEO的GEO分析报告,看权重分布图来调。

6. 移动端内链别超过3个
我一开始一个商品页挂10个相关推荐,移动端点都点不到。移动端内链绝对不要超过3个,而且必须放在首屏之后。 改完后,点击率从12%涨到38%。