进阶经营 · 整理与归档

一、Shopify 平台层面的默认优化

商店性能不只是技术指标, 直接影响转化率与 SEO 排名 。Google 自 2021 年起将 Core Web Vitals 纳入排名信号;Akamai 与 Shopify 的多项联合研究显示, LCP 每提升 1 秒,移动端转化

商店性能不只是技术指标,直接影响转化率与 SEO 排名。Google 自 2021 年起将 Core Web Vitals 纳入排名信号;Akamai 与 Shopify 的多项联合研究显示,LCP 每提升 1 秒,移动端转化率提升约 7-10%。但实际项目中,Lighthouse 跑分 90 分以上的 Shopify 主题很少见——多数店铺停留在 40-60 分之间。

本文按”评估 → 诊断 → 优化 → 持续监控”四阶段展开。

一、Shopify 平台层面的默认优化

Shopify 在基础设施层已经做了多项性能优化,不需要额外配置:

  • 全球 CDN:所有静态资源通过 Cloudflare 分发,Shopify 状态  与 Cloudflare 状态  可查看可用性
  • 图片 CDN(cdn.shopify.com):自动转换 WebP/AVIF 格式,按浏览器能力派发
  • HTTP/2 + Brotli 压缩:所有响应默认启用
  • 静态资源缓存:CSS、JS 默认长缓存

这些是免费且自动的,不需要”开启”或”配置”。性能问题几乎不来自 Shopify 基础设施,而来自店铺自定义内容。

二、Core Web Vitals 三项指标

Google 用三项指标评估真实用户体验:

指标 含义 良好 需改进
LCP(Largest Contentful Paint) 最大内容元素绘制时间 ≤ 2.5s 2.5-4s > 4s
CLS(Cumulative Layout Shift) 累积布局偏移 ≤ 0.1 0.1-0.25 > 0.25
INP(Interaction to Next Paint) 交互到下次绘制 ≤ 200ms 200-500ms > 500ms

INP 自 2024 年 3 月起取代了旧的 FID 指标。三项的衡量基准都是75 分位的真实用户数据(CrUX 数据集),不是 PageSpeed Insights 的实验数据。

在哪看真实数据

  • Google Search Console → 网页体验:来自 Chrome 用户的真实数据,最权威
  • Shopify 后台 → Web Performance Dashboard:Shopify 提供的真实用户监控
  • PageSpeed Insights → “实际数据”标签页:CrUX 数据,与 GSC 一致

不要用 PageSpeed Insights 的”实验数据”做决策——那是单次模拟,波动很大。

三、LCP 优化(最高优先级)

LCP 元素 90% 的情况是首屏 hero 图片第一个 H1 区域

常见瓶颈与对策

瓶颈 1:首屏图片未压缩

最常见。原图 3-5MB 直接上传,LCP 普遍 > 4 秒。

对策:

  • Hero 图压到 ≤ 250KB
  • 主题文件中的背景图通过 image_url 指定合理尺寸:
{# 反例 #}
<img src="{{ section.settings.hero_image | image_url }}">
 
{# 推荐 #}
<img
  src="{{ section.settings.hero_image | image_url: width: 1920 }}"
  srcset="
    {{ section.settings.hero_image | image_url: width: 800 }} 800w,
    {{ section.settings.hero_image | image_url: width: 1200 }} 1200w,
    {{ section.settings.hero_image | image_url: width: 1920 }} 1920w"
  sizes="100vw"
  fetchpriority="high"
  width="{{ section.settings.hero_image.width }}"
  height="{{ section.settings.hero_image.height }}"
  alt="{{ section.settings.hero_image.alt | escape }}">

瓶颈 2:首屏图片错误地加了 lazy load

{# 反例:首屏图也用 lazy #}
<img src="..." loading="lazy">
 
{# 正确:首屏图禁用 lazy,加 fetchpriority="high" #}
<img src="..." fetchpriority="high">

fetchpriority="high" 是 2023 年新增的浏览器属性,告诉浏览器立即下载。结合 <link rel="preload"> 效果更好:

<link rel="preload" as="image"
      href="{{ section.settings.hero_image | image_url: width: 1920 }}"
      fetchpriority="high">

瓶颈 3:JavaScript 渲染 hero 区域

部分主题用 React / Vue / Alpine.js 异步加载首屏内容,导致 LCP 元素延后显示。

对策:

  • Hero 区域用纯 Liquid + HTML 渲染,不依赖 JS
  • 如必须用 JS,把 hero 用骨架屏 + Server-Side Rendering 预渲染

瓶颈 4:Web 字体阻塞渲染

{# 反例:阻塞渲染的字体加载 #}
<link rel="stylesheet" href="fonts.css">
 
{# 推荐:preconnect + font-display: swap #}
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="font" type="font/woff2"
      href="..." crossorigin>

在 CSS 中使用 font-display: swap 让文本立即用 fallback 字体显示,自定义字体加载完成后再切换。

深入调试

Shopify 官方有专题文档:针对 Shopify Liquid 店面加载缓慢的常见原因

四、CLS 优化

CLS 测量页面加载过程中元素跳动幅度。常见来源:

来源 1:图片缺少 width / height

浏览器在图片加载完成前无法知道占位高度,加载完瞬间挤动周围内容。

{# 反例 #}
<img src="{{ product.featured_image | image_url: width: 800 }}">
 
{# 推荐 #}
<img
  src="{{ product.featured_image | image_url: width: 800 }}"
  width="{{ product.featured_image.width }}"
  height="{{ product.featured_image.height }}">

显式声明 width / height 后,浏览器按比例预留空间。

来源 2:字体加载触发文本重排

Web 字体加载完成后,文本宽度可能变化。对策:

  • font-display: swap 让 fallback 字体先显示
  • size-adjust 让 fallback 与 web 字体度量接近:
@font-face {
  font-family: 'CustomFont';
  src: url('font.woff2') format('woff2');
  font-display: swap;
  size-adjust: 98%;  /* 调整使 fallback 字宽接近 CustomFont */
}

来源 3:动态注入的弹窗与 Banner

Cookie banner、邮件订阅弹窗、限时折扣条等会延迟注入挤动布局。

对策:

  • 弹窗用 position: fixed,不影响文档流
  • Cookie banner 在 <body> 顶部预留固定高度
  • 评论 widget 等用 <iframe> 包裹,预设高度

来源 4:广告位 / 嵌入内容

YouTube 嵌入、Instagram 嵌入等加载完高度会变。对策:用 aspect-ratio CSS 属性预设比例:

.youtube-embed {
  aspect-ratio: 16 / 9;
  width: 100%;
}

深入调试

Shopify 官方:如何在 Shopify 网站中优化 CLS

五、INP 优化

INP 测量交互(点击、输入)到下次屏幕绘制的延迟。主要瓶颈是 JavaScript 主线程阻塞

常见原因

原因 1:第三方脚本同步加载

Klaviyo、Pinterest、TikTok、Recart、Hotjar 等都通过 <script> 注入。每个脚本初始化时占用主线程。

对策:

  • 所有第三方脚本用 asyncdefer
  • 评估每个脚本的业务价值,删除非必要的
  • 把次要脚本延迟到首次交互后加载:
let scriptsLoaded = false;
function loadDeferredScripts() {
  if (scriptsLoaded) return;
  scriptsLoaded = true;
 
  // 加载非关键脚本
  const scripts = [
    'https://heatmap-script.com/script.js',
    'https://chat-widget.com/widget.js',
  ];
  scripts.forEach(src => {
    const s = document.createElement('script');
    s.src = src;
    s.async = true;
    document.head.appendChild(s);
  });
}
 
// 在用户首次滚动或点击时加载
['scroll', 'click', 'keydown'].forEach(event => {
  window.addEventListener(event, loadDeferredScripts, { once: true, passive: true });
});
 
// 兜底:5 秒后强制加载
setTimeout(loadDeferredScripts, 5000);

原因 2:主题 JavaScript 框架重

部分主题打包了完整的 React / Vue 用于简单交互,主线程负担重。

对策:

  • 简单交互用原生 JS 或 Alpine.js(< 8KB)
  • 复杂交互用 Web Components 而非全栈框架

原因 3:单个 section 输出过大

Liquid 渲染数百个产品的 collection 页面,HTML 单体超过 1MB,浏览器解析慢。

对策:

  • {% paginate %} 拆分页面
  • 折叠内容(FAQ、产品描述)用 <details> 而非 JS 控制
  • 长列表用虚拟滚动(仅渲染可见项)

原因 4:Cart Drawer 弹出卡顿

打开购物车时同步执行复杂逻辑(加载产品图、计算运费、显示推荐)。

对策:

  • 加购物车数据预先在页面加载时缓存
  • 弹出 Drawer 时仅显示骨架屏,数据异步加载
  • 推荐位置用 IntersectionObserver 懒加载

深入调试

Shopify 官方:找到对页面加载产生最大影响的 JavaScript 内容的 3 种方法

六、应用审计

每个安装的应用都可能向主题注入 <script><link>。多数店铺安装 10-20 个应用后,性能严重劣化。

审计流程

Step 1:用 Chrome DevTools 找罪魁祸首

  1. 打开 Chrome DevTools → Performance 标签
  2. 录制一次页面加载
  3. 在 “Bottom-Up” 视图按 “Total Time” 排序
  4. 找到最耗时的脚本,对照域名定位是哪个应用

Step 2:评估每个应用的 ROI

对每个应用问三个问题:

  • 这个功能能用 Shopify 原生功能替代吗?
  • 这个应用过去 30 天的实际使用频率?
  • 卸载后能挽回多少性能?

Step 3:常见可卸载的应用类型

类型 替代方案
弹窗 / Popup Shopify Email 自带、或简化为 Liquid 实现
评论展示 Judge.me / Loox 性能差异大,挑性能优的
推荐位 Shopify Product Recommendations API(原生)
计时器 / 紧迫感 一行 Liquid + 简单 JS 即可,不必装 App
多语言 Shopify Markets 原生(替代 Langify)

应用市场审核中的”性能影响”标签可以参考,但不绝对。最准的还是自己审计。

七、模板选择与定期更新

Shopify 主题性能数据

Shopify 官方维护 Theme Performance Data Table ,公布主流付费 / 免费主题的真实性能数据。可查询主题在生产环境的 LCP、CLS、INP 中位数。

性能良好的免费主题:

  • Dawn(Shopify 官方推荐,性能基准)
  • Sense
  • Crave
  • Studio

这些都是 Online Store 2.0 主题,原生支持 sections everywhere 与 metafields。

主题需要定期更新

很多店铺主题安装后两三年不更新,但 Shopify 主题持续接收 bug 修复与性能改进。建议每季度查看主题更新,谨慎升级(先在 unpublished 主题上测试)。

八、测试工具

真实用户监控(首选)

工具 数据类型 用途
Google Search Console → 网页体验 CrUX 真实用户 SEO 排名相关
Web Performance Dashboard Shopify 真实用户 商家自查
Chrome User Experience Report 全网 CrUX 数据 行业基准对比

实验性诊断(用于调试)

工具 用途
PageSpeed Insights 综合诊断,含建议
Chrome DevTools Lighthouse 本地详细诊断
WebPageTest 性能瀑布图、视频回放
Chrome DevTools Performance 主线程深度分析

实验数据与真实数据可能差很多——实验环境在固定网络、固定设备模拟,真实用户分布在各种设备与网络。优化决策以真实数据为准

九、持续监控与改进

月度复盘

每月在 Google Search Console 的”网页体验”报告中查看:

  • LCP / CLS / INP 三项的通过比例(75 分位)
  • 移动 vs 桌面分别看
  • 与上月对比,识别哪些页面退化

改动验证

每次主题改动 / 应用安装后:

  • 在 unpublished 主题上测试,PageSpeed Insights 比较前后
  • 上线后等 28 天,观察 CrUX 数据
  • 不要在大促期间做大改动

性能预算

为关键页面设置性能预算(performance budget),超出预算的改动不能上线:

指标 预算
主页 LCP ≤ 2.5s
产品页 LCP ≤ 2.5s
主页 JavaScript 总体积 ≤ 200KB
主页图片总体积 ≤ 1MB

预算超出时强制 review,决定是否值得为新功能牺牲性能。

十、获取专业帮助

Shopify 自带主题(Dawn 等)的基础性能问题可联系 Shopify 官方支持。

第三方主题或深度定制需要联系:

  • 主题原开发者
  • 主题代理 / Shopify Expert
  • 内部 / 外部 Shopify 开发者

Shopify 应用引起的性能问题,优先联系应用开发者,多数会响应处理。

延伸阅读