Shopify 搜索结果页(search)配方
搜索结果页的任务是回应一个具体的查询词:让顾客确认“搜到了什么”,找到目标或知道下一步去哪。它由 Shopify search template type 承载,路径样例 /search,只有一个默认业务页面,所以本文把入口与配方合并。顾客进入时只知道自己输入的词,没有浏览上下文,页面必须自己说明结果为何出现、没出现时怎么办。
search→ 可选 alternate(通常不需要)→ 搜索结果页 → 页面内容清单 → 内容 × 展现 → Theme 实现
搜索框、建议、匹配行为与日志的模块契约见站内搜索模块,结果集合、筛选、排序与翻页见集合浏览与筛选。本文只决定这一页放什么、按什么顺序、何时删掉。
先判断是否需要 alternate
默认 search.json 通常足够。官方 alternate 页面描述的是按资源在后台分配模板,没有说明 search 这种无关联资源的类型如何选用 alternate,该做法未核验。搜索任务是否分化(只搜商品,还是同时搜帮助文章),先用 Search & Discovery 的结果类型设置解决,不建第二个模板。一般规则见 Template type 与 alternate template。
页面内容清单
| 类别 | 优先级 | 页面内容 | 回答的问题 | 来源边界 |
|---|---|---|---|---|
| 运行时 | 核心 | 查询词回显 | 我搜的是什么 | search.terms;官方示例输出前经 escape |
| 运行时 | 核心 | 结果列表、总数、价格与可售 | 搜到什么、能不能买 | search.results、search.results_count 与商品当前数据;未执行搜索时 search.performed 为 false |
| 运行时 | 可选 | 筛选与排序 | 怎样缩小 | search.filters、search.sort_options,默认排序 relevance |
| 运行时 | 可选 | 建议、拼写容错回显 | 输入时有何建议、是否改词 | 预测搜索独立请求;容错回显字段未核验 |
| 编辑 | 无结果时 | 热门分类与联系入口 | 换个方式找、找不到怎么办 | 商品分类只列真实集合;客服渠道 |
| 编辑 | 可选 | 问答与政策入口 | 问句式查询的答案 | FAQ,退换、配送类问题指向对应页面 |
| 编辑 | 可选 | 特色商品 | 不知搜什么时看什么 | 特色商品,仅限空输入状态 |
页面组合
顺序是待验证假设,不是必备清单。
| 序 | 模块 | 回答的问题 | 缺失时 |
|---|---|---|---|
| 1 | 搜索框与查询词回显 | 我搜了什么、能否改 | 不可缺;页头已有唯一主搜索入口时,结果页只回显词,不另做第二套建议 |
| 2 | 结果数量与排序 | 搜到多少、按什么排 | 不足一页时删排序;数量始终保留 |
| 3 | 筛选 | 怎样缩小 | 平台不输出筛选或结果很少时删除,不留空面板 |
| 4 | 结果列表 | 具体是什么 | 不可缺;零项走无结果状态 |
| 5 | 分页 | 后面还有吗 | 不足一页时删除 |
| 6 | 无结果出口 | 下一步去哪 | 仅零项时出现 |
最小成立组合:搜索框(回显)→ 结果数量 → 结果列表 → 无结果出口。常见扩展:筛选与排序、分页、问答入口。
不应默认出现:促销弹窗、订阅表单、品牌故事、与查询无关的推荐商品。无关商品冒充结果会破坏“页面回应查询”的信任。
结果混合类型的处理
官方 Liquid search 对象页面写明:results 可以是文章、页面或商品,每项带 object_type 用于区分;types 是本次搜索覆盖的类型;results 分页每页最多 50 项。Search template 页面只要求遍历 search.results 输出,没有规定分类型渲染。
- 商品为主体,页面与文章为补充:商品用 Grid;页面与文章用单行 List并标明类型,不套用价格与加购结构。
- 类型可在后台收窄:Search & Discovery 帮助页写明结果页类型可设为商品、页面、博客文章(默认全含),主题请求里传了
type参数则覆盖后台设置。页面与文章没有搜索价值时,收窄为商品比在模板里过滤更可维护。 - 页面与文章数量受限:帮助中心搜索行为页(单页摘要)写明最多返回 2 个页面或文章,且只在第一页出现;这与 Liquid 对象页的分页描述并不完全对应,需在真实店铺实测后再定文案与布局。
- 筛选主要为商品设计:官方描述未说明筛选对页面与文章如何生效,混合结果下的作用范围未核验,页面不得暗示筛选对所有类型有效。
内容 × 展现形式
| 内容 | 首选形式 | 适用条件 | 退化方式 |
|---|---|---|---|
| 搜索框与查询词 | Inline Form | 始终 | 无 |
| 商品结果 | Grid | 商品卡与集合页一致 | List |
| 页面与文章结果 | List,标明类型 | 结果类型混合 | 后台收窄为仅商品后删除 |
| 筛选与排序 | 侧栏 / Drawer | 结果多且平台输出筛选 | 删除 |
| 分页 | Pagination | 超过一页 | 删除 |
| 无结果出口 | 分类链接加联系入口 | 零项 | 至少保留联系入口 |
与集合页的差异与共用
| 维度 | 搜索结果页 | 集合页 |
|---|---|---|
| 资源 | 查询词,无固定资源 | 集合,有说明与图片 |
| 入口状态 | 只知道查询词 | 顾客已选定范围 |
| 默认排序 | relevance | 后台集合默认排序 |
| 结果类型 | 商品、页面、文章可混合 | 商品 |
| 零项 | 正常状态,需给下一步 | 通常是配置问题 |
| 筛选数据 | search.filters 在超过 1,000 个商品时为空(Liquid 对象页所写) | collection.filters 在商品超过 5,000 时为空(见集合浏览与筛选) |
| 索引与抓取 | robots 输出与是否适合作落地页未核验,见 SEO 框架 | 同样按该框架 |
共用:商品卡、网格、筛选面板、排序与分页控件,以及“URL 表达状态”的规则。两页对同一商品必须显示同一变体的价格与图片。主题层的共用与分工见 Horizon 集合与搜索与 Dawn 筛选与分页。
状态与退化
| 状态 | 页面级处理 |
|---|---|
| 空输入 | 显示搜索框,不显示“没有结果”;可给热门分类,不读取顾客历史 |
| 零项 | 回显原词,提示检查拼写,给热门分类与联系入口;不用无关商品冒充结果 |
| 一项与多项 | 结构不变;一项时不显示分页与排序 |
| 加载与失败 | 保留输入与旧结果;失败时说明未完成并可重试,不显示为无结果 |
| 不可售 | 后台可显示、隐藏或排到末尾(默认末尾);页面不把不可售商品作首选结果 |
| 使用搜索语法 | 帮助中心写明使用引号、AND、OR 等语法时拼写容错等功能不生效;结果页应回显原查询 |
| 跨市场与语言 | 结果、价格与可售按当前市场;中文搜索质量未核验,见站内搜索 |
备用商品:部分主题在无结果时输出备用集合商品。若保留,必须写明“这些不是搜索命中”,Horizon 的这一分支见 Horizon 集合与搜索;更保守的做法是不显示,只给分类与联系入口。
搜索词日志:需求来源与隐私
Search & Discovery 报表包括点击率、购买率、按查询词统计的搜索、无结果搜索与无点击搜索;应用内显示最近 30 天,完整历史在 Analytics;预测搜索的互动不计入(报表页所写),所以“无结果”榜只反映提交到结果页的搜索。分流做法见站内搜索模块:高频无结果补别名或标签,问句式查询补 FAQ 或客服入口,售后诉求给出对应路径。
隐私边界,细则以站内搜索模块为准:
- 查询词可能含姓名、邮箱、电话或订单号,不得直接公开为“热门搜索”,除非聚合、设阈值并过滤个人信息形态;
- 查询词位于结果页 URL 的
q参数,回显必须转义;它会进入访问日志、分析脚本与外部引荐,这是本文推论,未在真实店铺核验; - 日志保留期限、访问人与告知义务取决于适用法规与隐私政策,需法务或合规确认,本文不给结论。
Shopify Theme 实现
| 层次 | 已核验的机制 / 建议职责 |
|---|---|
| Template | 官方 search 页面:渲染 /search,模板为 templates/search.json;HTML 与 Liquid 必须在被引用的 Section 中 |
| 必备要素 | 搜索表单 action="{{ routes.search_url }}",输入框 type="text"、name="q";结果遍历 search.results |
| Main Section | JSON templates 页面未规定必须有 main section;结果页示例为 Dawn 的 main-search.liquid,见 Dawn 预测搜索 |
| Sections / Blocks | 模板最多 25 个 Section,每个最多 50 个 Block;搜索框、结果、无结果出口分成可排序 Section;Block 为单个入口链接或热门分类 |
| Settings | 开放版式与入口内容;结果类型与缺货显示放在 Search & Discovery,不在主题重复实现,注意主题传 type 会覆盖后台 |
| 数据来源 | Liquid search:terms、performed、results、results_count、filters、sort_options、default_sort_by、types |
| 远程商品 | Search template 页面写明启用后其他店铺商品自动出现,无需改主题;基于 API 的搜索结果主题不支持,必须使用 search.results |
| 建议 | 预测搜索独立请求,见 Horizon 预测搜索 |
发布检查
- 查询词回显被转义,含引号与尖括号的词不破坏页面;
- 商品、页面、文章结果能分辨类型,类型设置与页面文案一致;
- 零项状态有原词回显、分类入口与联系入口,且不冒充搜索结果;
- 建议与结果页对同一个词不互相矛盾,改任一处后两处都验证;
- 筛选与排序 URL 可复制、可返回,关闭 JavaScript 仍能提交搜索;
- 用邮箱形态的词搜索,确认它没有进入任何公开展示位置;
- 切换市场与语言后,结果、价格与可售同步。
待继续完善
- 缺少真实店铺的中文搜索与混合类型实测,页面与文章数量限制需复核;
- search 类型是否、如何使用 alternate 未核验;筛选在混合结果下的作用范围未核验;
- 缺少真实搜索日志对分流表的验证,以及日志保留与隐私的合规结论。