最佳实践
ShopFaaS 运营与开发最佳实践——商品管理、订单履约、SEO 优化、性能调优、安全加固、应用扩展开发规范。
本页汇总 ShopFaaS 运营与开发的最佳实践,帮助商家与开发者避开常见坑、提升效率与稳定性。
商品管理
商品信息优化
库存管理
| 实践 | 说明 |
|---|---|
| 设置库存预警 | 在商品详情设置最低库存阈值,低于时后台提醒 |
| 定期盘点 | 每月对比系统库存与实际库存,调整差异 |
| 预售商品单独标记 | 预售商品设置较长发货时间,避免影响常规订单履约 |
| 下架滞销品 | 90 天无销量的商品考虑下架或促销清仓 |
集合(分类)组织
- 主导航 3–7 个集合:过多会让客户迷失
- 自动集合:按标签或条件自动归类(如「新品」=创建时间 30 天内)
- 手动集合:用于精选、促销等需要人工挑选的场景
- 集合封面与描述:提升 SEO 与视觉一致性
订单履约
履约时效
退款与退货
| 实践 | 说明 |
|---|---|
| 明确退换货政策 | 在「设置 → 政策」编写清晰的退换货政策页面 |
| 快速响应退货申请 | 24 小时内响应,避免升级到平台投诉 |
| 退款优先选择原路退回 | 避免线下转账产生纠纷 |
| 记录退货原因 | 用于分析产品质量问题与改进方向 |
营销与折扣
折扣码策略
- 新客优惠:首单 9 折码,降低首次购买门槛
- 满减促销:满 ¥199 减 ¥20,提升客单价
- 清仓折扣:临期/滞销品 5–7 折,设置使用次数上限
- 老客回馈:会员专享码,提升复购率
- 节日大促:限时折扣码,配合倒计时营造紧迫感
弃单召回
- 首次召回:弃单后 1 小时发送,提醒完成结账
- 二次召回:弃单后 24 小时发送,附 5% 折扣码
- 停止召回:已下过同 SKU 订单的客户不再召回
- A/B 测试:测试不同邮件标题与发送时间,优化转化率
SEO 优化
技术 SEO
| 实践 | 说明 |
|---|---|
| 自定义 URL Handle | 商品/集合/博客设置语义化 URL(如 /products/cotton-tshirt) |
| 编辑页面标题与描述 | 每个页面独立设置 SEO 标题与描述,含目标关键词 |
| 提交站点地图 | 在 Google Search Console / 百度站长平台提交 sitemap |
| 结构化数据 | 商品页自动包含 Product schema,提升搜索富摘要 |
| 页面加载速度 | 图片压缩、懒加载,目标 LCP < 2.5 秒 |
内容 SEO
- 博客内容:每周 1–2 篇行业相关文章,吸引长尾流量
- 商品描述:原创描述,避免直接使用供应商文案(重复内容降权)
- Alt 文本:每张商品图片添加描述性 alt 文本
- 内链:博客文章链接到相关商品,商品页链接到相关集合
性能调优
前台性能
-
图片优化
- 使用
img_urlfilter 按需生成缩略图(如{{ image | img_url: '800x800' }}) - 首屏图片优先加载,非首屏懒加载
- 使用 WebP 格式(ShopFaaS 自动转换)
- 使用
-
减少应用安装
- 每个应用会增加前端资源(JS/CSS)
- 仅安装实际使用的应用,定期清理不用的应用
- 高性能需求的店铺建议安装数 ≤ 10 个
-
主题优化
- 避免主题中加载大型第三方库(如 jQuery)
- CSS 精简,移除未使用的样式
- 使用 CSS 变量驱动主题化,避免重复样式
-
CDN 加速
- 托管服务默认启用 CDN
- 私有化部署建议配置 Nginx 缓存或接入第三方 CDN
后台性能
- 批量操作用后台提供的批量功能,避免单条循环
- 大数据量导出用 CSV 而非页面渲染
- 私有化部署用户定期清理审计日志(保留 90 天即可)
安全加固
私有化部署安全清单
-
修改所有默认密码
- PostgreSQL
POSTGRES_PASSWORD - Redis
REDIS_PASSWORD - RustFS
RUSTFS_SECRET_KEY - JWT
JWT_SECRET(至少 32 字符随机字符串)
- PostgreSQL
-
配置 HTTPS
- 使用 Nginx 反向代理 + Let’s Encrypt 证书
- 设置
COOKIE_SECURE=true - 启用 HSTS
-
限制访问
- 数据库仅监听本地或内网
- Redis 仅监听本地
- 后台管理路径可配置 IP 白名单(通过 Nginx)
-
定期备份
- 每日自动备份数据库
- 备份文件加密存储
- 定期验证备份可恢复
-
监控与告警
- 监控服务健康状态(
/health端点) - 监控磁盘空间,避免日志撑满
- 设置异常登录告警
- 监控服务健康状态(
API Key 安全
应用扩展开发规范
权限最小化
// ✅ 正确:仅声明实际使用的权限
{
"permissions": ["order:view"]
}
// ❌ 错误:声明了不需要的权限(审核会拒绝)
{
"permissions": ["order:view", "order:fulfill", "order:refund", "product:view"]
}
错误处理
// ✅ 正确:捕获错误并返回有意义的消息
const handler: WebhookHandler<"order.created"> = async (event, ctx) => {
try {
const order = await ctx.api.orders.get(event.payload.order_id);
await sendNotification(order);
} catch (error) {
ctx.logger.error("订单通知发送失败", { orderId: event.payload.order_id, error });
throw error; // 抛出错误让平台重试
}
};
// ❌ 错误:吞掉错误,问题无法被发现
const handler: WebhookHandler<"order.created"> = async (event, ctx) => {
try {
const order = await ctx.api.orders.get(event.payload.order_id);
await sendNotification(order);
} catch (error) {
// 什么都不做
}
};
幂等性
性能要求
| 指标 | 要求 |
|---|---|
| Webhook 响应时间 | < 5 秒(超时会被平台终止并重试) |
| Action 响应时间 | < 3 秒 |
| 内存使用 | < 128 MB |
| CPU 使用 | < 500 ms(单次执行) |
多店铺运营
统一品牌 vs 独立品牌
| 策略 | 适合场景 | 实践 |
|---|---|---|
| 统一品牌 | 同品牌不同地区/品类 | 共用主题模板,仅差异化币种/语言/物流 |
| 独立品牌 | 多品牌矩阵 | 每个店铺独立主题与域名,独立运营团队 |
| 混合策略 | 主品牌 + 子品牌 | 主店铺用高端主题,子店铺用简约主题 |
数据隔离与共享
- 隔离:商品、订单、客户、营销按店铺隔离,避免互相影响
- 共享:主题、应用可跨店铺复用(每个店铺独立安装配置)
- 不共享:ShopFaaS 不提供跨店铺数据汇总,需通过 API 导出后在外部汇总
相关文档
教程
端到端实战教程。
故障排查
常见问题与解决方案。
安全与合规
安全架构与合规承诺。
开发者指南
主题与应用扩展开发规范。