Skip to Content
🎉 探索 Shopify 的无限可能 结构化知识 + 实战案例,持续更新中...
进阶教程提高在线商店性能

Shopify 商店性能优化

商店性能不只是技术指标,直接影响转化率与 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.5s2.5-4s> 4s
CLS(Cumulative Layout Shift)累积布局偏移≤ 0.10.1-0.25> 0.25
INP(Interaction to Next Paint)交互到下次绘制≤ 200ms200-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:常见可卸载的应用类型

类型替代方案
弹窗 / PopupShopify 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 DashboardShopify 真实用户商家自查
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 应用引起的性能问题,优先联系应用开发者,多数会响应处理。

延伸阅读

最后更新时间: