首頁指南Shopify 內建留言少了回覆這一層

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 說明中心與 shopify.dev 頁面,確認日期 2026-08-25。

一個月才收到一則留言的商店,留著內建表單完全合理。該換掉的時機,是你希望讀者在文章底下彼此對話,而不是各自往你的信箱丟一張單向的紙條。

先看你的佈景主題用的是哪一種文章範本

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 則評論

新增評論…
以 Alex 身分留言發佈
  • M
    Maya2 小時前

    真的一行就搞定,沒想到安裝這麼簡單!

  • J
    Jordan昨天

    連登入都是共用的,不用再額外接入。👍

這是用範例留言畫出來的預覽。放在 Shopify 網誌文章底下時,它會照佈景主題定好的內文寬度長成同一個樣子。

把載入器和掛載元素各自放到位

  1. 網址列上那個位址才是要登記的對象

    候選只有兩個。.myshopify.com 位址是開店時發的,之後一直跟著商店;後來接上的自訂網域,才是顧客實際輸入的那一個。網誌文章由哪一個送出,看你的網域設定走到哪一步,還沒接自訂網域的商店,一切都走 myshopify 位址。小工具會拿 location.hostname 去對你 site id 底下登記的網域清單,所以請登記「打開真正的文章時,網址列上那個位址」。正在轉換中,或者習慣用 myshopify 位址驗收的話,兩個都登記。登記在 BootSignal 控制台,換回來的是一組 site id,而那串字是 BootSignal 唯一要放進佈景主題的東西。

  2. 先複製佈景主題,再打開編輯程式碼

    在 Shopify 管理介面前往「網路商店」,找到佈景主題,按一下 ... 開啟動作選單,選「編輯程式碼」。手機上的路徑是:選單圖示 >「銷售管道」>「網路商店」>「管理佈景主題」> 水平選單圖示 >「編輯程式碼」。動手之前先按「複製」留一份,佈景主題更新有機會把你改過的程式碼一起帶走,手上有副本比較好回頭。

  3. 載入器放進 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>
  4. 掛載元素放進文章區段

    JSON 主題請打開 Sections 資料夾(區段檔),編輯文章的主要區段(Dawn 主題的話是 sections/main-article.liquid)。掛載元素放在文章內容之後,通常就是內建留言區原本的位置。vintage 主題則貼進 templates/article.liquid 的同一個位置。把 data-thread-id 綁到文章上,每篇文章才會各自有一條討論串。

    程式碼
    <div data-bootsignal="comments" data-thread-id="{{ article.handle }}"></div>
  5. 存檔,然後打開一篇已發佈的文章

    存好區段檔,用一般的瀏覽器分頁載入一則真正的網誌文章網址。討論串會出現在文章底下,第一位用 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。在商店的網誌上,評分很值得放:一篇底下帶著分數的選購指南,讀起來跟沒有分數的不一樣。

預覽
★★★★ 4.2 · 36 則評論
★★★★★

五分鐘搞定,介面也很乾淨。

Sam

評分與評論小工具,掛載方式和留言討論串一樣,都用 data-thread-id 綁定。

在這裡收到的評論也會餵給用戶評價牆,而那面牆只放得出真的有人留下的話。它沒有辦法自己編一則出來,這一點在做生意的網站上很重要,因為看起來像假的社會認同會直接讓你少一張單。

每次佈景主題更新後,回頭看一眼那篇文章

這是沒有人會提醒你的維護項目。Shopify 講得很直接:如果你對佈景主題程式碼所做的變更與佈景主題更新不相容,更新後的副本會移除你所有的程式碼變更。你的載入器和掛載元素就是程式碼變更。它們可能在一次你為了完全無關的理由批准的更新裡消失,而且沒有任何警告,因為少了一條討論串並不會讓頁面壞掉。

  1. 更新之前,先複製現在這個佈景主題,讓還能動的那一版以副本的形式留著。
  2. 更新發佈之後,打開一篇網誌文章,確認討論串還在。
  3. 不見了就重新打開編輯程式碼,把兩塊各自貼回去:載入器回 theme.liquid,掛載元素回文章區段。
  4. 留言本身永遠不會有事。它們存在 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 變數,原本的留言就回來了。
內建留言和小工具兩個都留著行不行?
行,但訪客會看到兩個留言表單,先碰到哪個就回哪個,對話被切成兩套系統。小工具上線之後,到「內容」>「網誌文章」>「管理網誌」把那個網誌設成「已停用留言」。動手前先把值得留的內容存一份,因為刪掉的留言救不回來。
在我的 Shopify 網誌加上留言

先登記商店網域,再把一段載入器貼進 theme.liquid。

數據來源