Shopify 內建留言少了回覆這一層
theme.liquid 放一段載入器,文章區段放一個掛載元素,JSON 範本卡住的地方也一併講清楚。
Shopify 本來就附了網誌留言表單,連審核都有,所以第一個該問的是:你真的還需要另外裝一個嗎?內建表單缺的是回覆。Liquid 的 comment 物件裡沒有指向上一則留言的欄位,Shopify 自家的說明也直接告訴賣家,想要有層次的討論串就去裝 app。如果你是為了這一點才找到這裡,那麼一個託管式的評論小工具,一段 script 加一個掛載元素就結束了。Shopify 這邊真正卡人的不是程式碼,是程式碼該放哪裡。Online Store 2.0 世代主題的文章範本是 templates/article.json,而 Shopify 把話說得很死:"If you're using a JSON template, then any HTML or Liquid code needs to be included in a section",也就是用 JSON 範本的時候,HTML 或 Liquid 都得寫進區段裡。所以掛載元素該去的地方是文章的主要區段檔(Dawn 主題的話是 sections/main-article.liquid),不是那個 JSON。
內建留言表單做得到什麼,做不到什麼
Shopify 的網誌留言是一個網誌一個網誌設定的。管理介面走「內容」>「網誌文章」>「管理網誌」,設定只有三個狀態:「已停用留言」、「允許留言,待審核」、「允許留言,且自動發佈」。每一則留言都會帶「已核准」、「未核准」、「垃圾郵件」其中一個狀態,Shopify 會自動標出疑似垃圾留言,而把垃圾標記取消的動作本身就等於核准。真正讓人後來才發現的有兩件事:核准過的留言退不回未核准,刪掉的留言救不回來。
更大的限制在結構。佈景主題用 {% form 'new_comment', article %} 畫出表單,再跑 article.comments 把既有留言列出來,這份清單一頁上限 50 則。comment 物件給得出來的欄位是 author、content、created_at、email、id、status、updated_at、url。沒有任何一個欄位說得出某則留言是回給誰的,所以就算你自己動手寫 Liquid,回覆也畫不出來。
| 行為 | Shopify 內建留言 | BootSignal Comments |
|---|---|---|
| 回覆某一則留言 | 沒有(comment 物件沒有父留言欄位) | 有層次的回覆 |
| 留言的人是誰 | 在表單裡自己打的名字和電子郵件 | Google 登入,所有 BootSignal 小工具共用 |
| 資料放在哪 | 你的 Shopify 商店 | BootSignal,綁在你登記的網域上 |
| 管理方式 | Shopify 管理介面,三種狀態,垃圾留言自動標記 | BootSignal 控制台,刪留言或封鎖發言者 |
| 拿掉一則留言 | 只能刪除,刪了就救不回來 | 在控制台刪除 |
| 分頁 | article.comments 一頁 50 則 | 小工具自己處理 |
| 要裝什麼 | 佈景主題裡本來就有 | 一段載入器加一個掛載元素 |
一個月才收到一則留言的商店,留著內建表單完全合理。該換掉的時機,是你希望讀者在文章底下彼此對話,而不是各自往你的信箱丟一張單向的紙條。
先看你的佈景主題用的是哪一種文章範本
Shopify 真正的關卡在這裡,而且跟你付多少錢無關。複製任何東西之前先確認,因為它決定你要打開哪一個檔案。在佈景主題的程式碼編輯器裡打開 Templates 資料夾(範本檔),找文章範本。看到 templates/article.liquid,那是 vintage 世代的佈景主題,HTML 和 Liquid 可以直接寫進去。看到 templates/article.json,那是 Online Store 2.0 或 Horizon 世代,現在多數商店都在這一邊。
JSON 範本是一份區段與設定的清單,不是標記。把 <div> 貼進去只會讓 JSON 壞掉、存檔失敗,而很多人正是在這一步收手,然後認定小工具在 Shopify 上裝不起來。JSON 主題要動的是文章的主要區段:打開 Sections 資料夾(區段檔),找到那份範本引用的區段。Dawn 主題的話是 sections/main-article.liquid。順帶一提,同一個區段在佈景主題編輯器裡顯示的名稱,是由佈景主題自己的語言檔決定的,換一個主題或換一種語言看到的字就不一樣,所以認檔名比認名稱可靠。
哪些商店真的裝得起來
沒有需要升級的方案。Shopify 把程式碼編輯器、佈景主題編輯器、Custom Liquid 區段和 app 嵌入區塊都寫進說明文件,沒有附上任何方案條件;Basic 方案頁面列的內容包含一個你可以自己調整的線上商店,以及一個會收留言的內建網誌功能。從 Basic 往上,故事就這麼多。不過 Shopify 目前列出的九個方案裡,有四個站在這個故事外面,理由分成兩種。
Lite 和 Agentic 根本沒有可以安裝的地方。Lite 方案頁面寫明這個方案不含網路商店這個銷售管道,Agentic 方案頁面則把 Online Store 排在「這個方案無法使用」的功能清單第一行。沒有線上商店就沒有佈景主題、沒有網誌,討論串也沒有地方落腳,所以不是被擋住,是這件事一開始就不成立。
Starter 和 Retail 共用另一種限制。兩者都只讓你用 Spotlight 這一個佈景主題,都寫著其他佈景主題與進一步的自訂選項無法使用,而程式碼編輯器進不進得去,兩邊的頁面都沒交代。所以請把它們當成「沒有確認」,不是可以,也不是不行:在自己的商店按一次編輯程式碼,比任何推測都快。這兩個方案也都不再開放新商店。Starter 頁面的原文是 "The Starter plan isn't available to new stores.",Retail 頁面對 Retail 有同一句話。現在還在用這兩個方案的人,是因為本來就在用。
讀者會看到的留言區長什麼樣
2 則評論
- M
真的一行就搞定,沒想到安裝這麼簡單!
- J
連登入都是共用的,不用再額外接入。👍
這是用範例留言畫出來的預覽。放在 Shopify 網誌文章底下時,它會照佈景主題定好的內文寬度長成同一個樣子。
把載入器和掛載元素各自放到位
網址列上那個位址才是要登記的對象
候選只有兩個。
.myshopify.com位址是開店時發的,之後一直跟著商店;後來接上的自訂網域,才是顧客實際輸入的那一個。網誌文章由哪一個送出,看你的網域設定走到哪一步,還沒接自訂網域的商店,一切都走 myshopify 位址。小工具會拿location.hostname去對你 site id 底下登記的網域清單,所以請登記「打開真正的文章時,網址列上那個位址」。正在轉換中,或者習慣用 myshopify 位址驗收的話,兩個都登記。登記在 BootSignal 控制台,換回來的是一組 site id,而那串字是 BootSignal 唯一要放進佈景主題的東西。先複製佈景主題,再打開編輯程式碼
在 Shopify 管理介面前往「網路商店」,找到佈景主題,按一下
...開啟動作選單,選「編輯程式碼」。手機上的路徑是:選單圖示 >「銷售管道」>「網路商店」>「管理佈景主題」> 水平選單圖示 >「編輯程式碼」。動手之前先按「複製」留一份,佈景主題更新有機會把你改過的程式碼一起帶走,手上有副本比較好回頭。載入器放進 theme.liquid
在檔案樹裡打開 Layout 資料夾(版面配置檔),選
theme.liquid。載入器貼在結尾的</body>標籤前面,按儲存。defer請留著:Shopify 的 Theme Check 會把擋住解析的 script 列為店面變慢的原因,加了 defer 的標籤不會卡住畫面。其他每一個 BootSignal 小工具都靠這同一段載入,所以之後再加評分或公告橫幅,店面不會多出第二個 script 檔。<script src="https://bootsignal.com/bootsignal.js" data-site-id="YOUR_SITE_ID" data-lang="zh-tw" defer></script>掛載元素放進文章區段
JSON 主題請打開 Sections 資料夾(區段檔),編輯文章的主要區段(Dawn 主題的話是
sections/main-article.liquid)。掛載元素放在文章內容之後,通常就是內建留言區原本的位置。vintage 主題則貼進templates/article.liquid的同一個位置。把data-thread-id綁到文章上,每篇文章才會各自有一條討論串。<div data-bootsignal="comments" data-thread-id="{{ article.handle }}"></div>存檔,然後打開一篇已發佈的文章
存好區段檔,用一般的瀏覽器分頁載入一則真正的網誌文章網址。討論串會出現在文章底下,第一位用 Google 登入的訪客就能開始寫。什麼都沒出現的話,先讀一次網址列上的主機名稱,拿去對控制台裡的清單,因為小工具自己在做的就是這件比對。
掛載用的 div 為什麼不該待在 theme.liquid 裡
theme.liquid 是全站版面。載入器放那裡剛剛好,因為它本來就該每一頁都跑;掛載元素是另一回事,貼進版面之後,你的商品頁、購物車、政策頁和首頁都會冒出一個空的留言區。賣家很常這樣做,然後困惑為什麼結帳按鈕底下坐著一個留言框。
如果你真的碰不到文章區段(佈景主題被鎖住,或者結構特殊),就用範本條件把掛載包起來,讓它只在網誌文章上出現。
{% if template contains 0 %}
<div data-bootsignal="comments" data-thread-id="{{ article.handle }}"></div>
{% endif %}這樣是會動,代價是全店每一頁都要載入一段只跟網誌有關的標記。區段檔才是它該住的地方。
不開程式碼編輯器的 Custom Liquid 路線
有一條不必寫程式的路。打開佈景主題編輯器(「網路商店」>「編輯佈景主題」),用上方工具列中間的範本下拉選單切到網誌文章範本,再到左側的「區段」欄按「新增區段」或「新增區塊」,選 Custom Liquid。掛載元素貼進程式碼欄位,存檔。Shopify 的 Theme Store 規範要求上架的佈景主題一定要有這個區段,並且把 Custom Liquid 區塊描述成給 app 用的插入點,所以多數賣家手上都有。
liquid這個設定的內容上限是 50kb,任何小工具片段都碰不到這個數字。- 不合法的 Liquid 會在存檔時報錯,沒關好的 HTML 標籤則會自動補上,貼得馬虎的片段可能悄悄重排。片段請貼完整。
- 這個設定不能用
{% javascript %}或{% stylesheet %}標籤,所以能用的形狀只有純 HTML 加一個<script src>。 - 自己做的佈景主題、不是從市集下載的佈景主題、或者年紀比較大的 vintage 主題,有可能根本沒有 Custom Liquid。那就只剩程式碼編輯器這條路。
把內建表單關掉,不然你會同時跑兩套
小工具上線之後,佈景主題還是會在它底下畫出 Shopify 自己的留言表單。到「內容」>「網誌文章」>「管理網誌」,挑那個網誌,設成「已停用留言」。表單就會從佈景主題上消失,不必動你的程式碼。
關掉之前,想留的東西先複製出來,而且要複製到 Shopify 以外的地方。刪掉的留言救不回來,內建留言也沒有搬進小工具的路徑,所以舊的討論和新的討論從一開始就是兩件各自獨立的東西。
有層次的回覆、Google 登入,管理都在你的控制台裡。
價格,以及流量為什麼動不到它
一份訂閱涵蓋這條討論串,也涵蓋你之後想掛在它旁邊的每一個小工具:每月 $20 或每年 $200,以登記的網域計價,瀏覽數和訪客數都不計。這件事在商店的網誌上比在個人網站上更要緊,因為一篇選購指南被折扣網站轉走,隔夜就能讓流量翻好幾倍,帳單卻不會跟著動。第二家商店就是第二個網域,在控制台新增。目錄現在是 38 個付費小工具加 33 個免費瀏覽器工具,你訂閱之後才加進來的小工具也一起算(完整價格)。跟其他留言工具的帶價比較放在對比區。
萬一訂閱斷了,討論串不會從你的網誌上消失。留言仍然看得到,只是變成唯讀,什麼都不會被刪,重新訂閱之後一切照舊回來。要在一個打算經營好幾年的店面上裝東西,這件事值得先知道。
同一篇文章上的星等評分
你貼進 theme.liquid 的那段載入器餵得動其他每一個小工具,所以第二個小工具的代價,只是同一份區段檔裡多一個 div。在商店的網誌上,評分很值得放:一篇底下帶著分數的選購指南,讀起來跟沒有分數的不一樣。
五分鐘搞定,介面也很乾淨。
Sam評分與評論小工具,掛載方式和留言討論串一樣,都用 data-thread-id 綁定。
在這裡收到的評論也會餵給用戶評價牆,而那面牆只放得出真的有人留下的話。它沒有辦法自己編一則出來,這一點在做生意的網站上很重要,因為看起來像假的社會認同會直接讓你少一張單。
每次佈景主題更新後,回頭看一眼那篇文章
這是沒有人會提醒你的維護項目。Shopify 講得很直接:如果你對佈景主題程式碼所做的變更與佈景主題更新不相容,更新後的副本會移除你所有的程式碼變更。你的載入器和掛載元素就是程式碼變更。它們可能在一次你為了完全無關的理由批准的更新裡消失,而且沒有任何警告,因為少了一條討論串並不會讓頁面壞掉。
- 更新之前,先複製現在這個佈景主題,讓還能動的那一版以副本的形式留著。
- 更新發佈之後,打開一篇網誌文章,確認討論串還在。
- 不見了就重新打開編輯程式碼,把兩塊各自貼回去:載入器回
theme.liquid,掛載元素回文章區段。 - 留言本身永遠不會有事。它們存在 BootSignal 這邊,用 thread id 歸檔,貼回去之後整條討論串會原封不動地回來。
把這件事記到你平常記錄商店變更的地方,跟其他佈景主題自訂項放在一起。更新後花兩分鐘,好過某天由顧客告訴你,你最好那篇文章底下的討論已經消失一個月了。
常見問題
- 我用的是 Starter 方案,這樣裝得起來嗎?
- 有可能不行,而 Shopify 沒把話說死。Starter 只讓你用 Spotlight 佈景主題,也寫著其他佈景主題與自訂選項無法使用,卻沒交代程式碼編輯器進不進得去,所以在規劃之前,先到自己的商店按一次編輯程式碼。Retail 帶著同一條限制。另外兩個方案則是明確的不行,理由不一樣:Lite 不含網路商店這個銷售管道,Agentic 的不可用功能清單第一項就是 Online Store,兩者都沒有網誌可以掛討論串。Basic 以上沒有東西要升級,因為 Shopify 把程式碼編輯器、佈景主題編輯器和 Custom Liquid 區段都寫成不附帶方案條件。另外還有一條:付費佈景主題得先買下來才能編輯它的程式碼,這在每個方案上都一樣。
- 可以把小工具的程式碼貼進 templates/article.json 嗎?
- 不行。Shopify 寫明,使用 JSON 範本時,任何 HTML 或 Liquid 都必須放進區段裡。JSON 範本裝的是區段和設定,標記貼進去只會把檔案弄壞。改成編輯文章的主要區段,Dawn 主題的話是
sections/main-article.liquid;或者從佈景主題編輯器在網誌文章範本上加一個 Custom Liquid 區段。 - 討論串在佈景主題編輯器裡看起來怪怪的,是不是裝壞了?
- 多半不是。那個預覽是從你自己的商店網域畫出來的,不是第三方沙箱,所以標記通常會照預期出現。在那裡判斷不了的是行為:編輯器會在區段內容上疊自己的選取外框,還會攔截點擊,在那個框裡試 Google 登入,成功或失敗都證明不了什麼。存檔之後,用一般瀏覽器分頁打開一篇已發佈的文章。只有那個畫面說的是真話,而且它也正是顧客看到的畫面。
- 留言的人需要有 Shopify 顧客帳號嗎?
- 不需要。小工具用 Google 帶人登入,身分留在 BootSignal 這一側,所以不會有東西寫進你的 Shopify 顧客名單,也沒有人為了在文章底下回一句話而去開一個商店帳號。你網域上的每一個 BootSignal 小工具,共用同一次 Google 登入。
- 我改了網誌文章的 handle,討論串就空了,留言跑去哪裡?
- 哪裡都沒去。掛載元素是用
data-thread-id認討論串的,而{{ article.handle }}在你改完之後會解析成新的 handle,於是小工具現在查的是一條從來沒被寫過的串。改標題不會有這個結果,只有改 handle 才會。把舊的 handle 改回去,或者在data-thread-id直接寫死舊值而不用 Liquid 變數,原本的留言就回來了。 - 內建留言和小工具兩個都留著行不行?
- 行,但訪客會看到兩個留言表單,先碰到哪個就回哪個,對話被切成兩套系統。小工具上線之後,到「內容」>「網誌文章」>「管理網誌」把那個網誌設成「已停用留言」。動手前先把值得留的內容存一份,因為刪掉的留言救不回來。
先登記商店網域,再把一段載入器貼進 theme.liquid。
數據來源
- Shopify Dawn: 日本語テーマ翻訳ファイル(テーマエディタに出るセクション表示名の出どころ) (核對 2026-08-25)
- Shopify Help Center: Managing comments on blog posts (three comment settings, statuses, spam handling, deleted comments cannot be recovered) (核對 2026-08-25)
- Shopify Help Center: Manage blogs for your online store (Content > Blog posts > Manage blogs) (核對 2026-08-25)
- Shopify.dev: Liquid comment object (author, content, created_at, email, id, status, updated_at, url, and no parent or reply property) (核對 2026-08-25)
- Shopify.dev: Article template (article.liquid vs article.json, the new_comment form, 50 comments per page) (核對 2026-08-25)
- Shopify.dev: Templates (HTML and Liquid in a JSON template must live in a section) (核對 2026-08-25)
- Shopify Help Center: Editing theme code (Edit code click path, theme purchase before code edits, theme update removes incompatible changes, Theme Check parser blocking scripts) (核對 2026-08-25)
- Shopify Help Center: Theme editor features overview (Edit theme, template dropdown, Sections sidebar) (核對 2026-08-25)
- Shopify Help Center: Sections and blocks (Add section and Add block) (核對 2026-08-25)
- Shopify.dev: Input settings (liquid setting type, 50kb cap, auto closed tags, javascript and stylesheet tags unavailable) (核對 2026-08-25)
- Shopify.dev: Theme Store requirements (Custom Liquid section requirement, insertion point for apps) (核對 2026-08-25)
- Shopify Help Center: Adding custom CSS to your theme (1500 characters theme wide, 500 per section, no @import) (核對 2026-08-25)
- Shopify Help Center: Plan features (the nine current plans, and the Retail and Agentic plan pages) (核對 2026-08-25)
- Shopify Help Center: Basic plan (customizable online store, built in blogging engine that collects comments) (核對 2026-08-25)
- Shopify Help Center: Starter plan (Spotlight theme only, other customization options unavailable, not available to new stores) (核對 2026-08-25)
- Shopify Help Center: Lite plan (does not include the online store sales channel) (核對 2026-08-25)