# 我的價格要等 JavaScript 跑完才出現，怎麼確認 AI 代理程式讀得到？

> 比較原始碼的價格、幣別與供應狀態，以及同一訪客情境的 Shopify 回應。確定的缺漏交開發者處理。

2026年9月5日 · 更新於 2026年9月21日 · 查證於 2026年9月21日

https://app.ai-commerce-ready.com/blog/zh-tw/confirm-agents-can-read-your-price-without-javascript/

## 適用情況

你需要確認公開商品頁的伺服器端 JSON-LD 是否包含價格、幣別與供應狀態，包括商店檢查指出缺漏之後。 [1][4]

## 不適用情況

Shopify Catalog 透過 Shopify 將商品資料傳送至已啟用的 AI 通路。本篇處理另一條開放網頁路徑，不處理 Catalog 傳送。 [6]

## 為什麼重要

並非所有爬蟲都會執行 JavaScript。Google 提醒，動態產生的 Product 標記可能讓 Shopping 對價格與供應狀態的爬取較不頻繁、較不可靠。 [1][2]

## 怎麼做

在網頁原始碼中找出商品的 JSON-LD Offers，將最低價格、幣別與合併判讀的供應狀態，與同一訪客情境的商品 .js 和 cart.js 回應比對。修正已確認的缺漏後重做比較。 [4][5]

## 何時完成

每個已檢查頁面的伺服器端 JSON-LD 都指向該商品，且每筆 Offer 都完整、價格不小於零；最低價格、幣別與合併判讀的供應狀態，都與同一情境的 Shopify 回應一致。 [4][5]

## 不能證明什麼

一致的證據只涵蓋已檢查的頁面與訪客情境，無法證明爬蟲已抓取或索引頁面、助理已引用商品，或 Shopify Catalog 已傳送商品資料。 [1][6]

## 操作步驟

1. 用未登入的視窗開啟公開商品頁並檢視原始碼。找出屬於該商品的 application/ld+json 區塊，以及其中的 Offer 或 AggregateOffer 資料。只有可見的價格文字並不足夠。 [1][5]
2. 維持相同訪客情境，在商品網址的商品路徑後加上 .js，並開啟相應語系路徑的 cart.js。記下 price_min 除以 100 的金額、available，以及購物車的 currency。 [4]
3. 依下方說明比較每筆 Offer 的價格、幣別與供應狀態。最低價格及合併判讀的供應狀態一致，就保持頁面不變。情境或幣別不同時先停止，不要據此判定主題故障。 [4]
4. 確認 Offer 缺漏或內容不一致後，請主題或店面開發者修正伺服器送出的標記，再重做比較並重新檢查商店。如果無法安全修改程式碼，將觀察到的證據交給該開發者。 [5][2]

- 官方頁面: [Shopify 管理介面佈景主題程式碼編輯器](https://admin.shopify.com/)
- 如何前往: Shopify 管理介面 > 網路商店 > 佈景主題 > 在相關的佈景主題上按 ··· 選單 > 編輯程式碼
- 操作前先確認: 佈景主題程式碼編輯器開啟，顯示主題的目錄，包括 sections 與 snippets。
- 何時停止: 抽樣證據一致時，不需改動。證據無法讀取、訪客情境或幣別不同，或標記形式無法用這項檢查比較時，先停止並交給開發者確認。保留原先預期的登入與定價限制。 [4][3]

## 付費協助與免費選項

- 何時值得付費協助: 已確認的標記缺漏若需修改自訂主題、定價整合或無頭店面，同時保留預期的價格與存取規則，請開發者協助可能有價值。 [2][5]
- 現有免費選項: 瀏覽器能顯示網頁原始碼與 Shopify 的公開商品 JSON。Shopify 也提供產生商品 JSON-LD 的 Liquid structured_data 篩選器；主題必須使用它，才會包含這份輸出。 [4][5]

**檢查隨網頁送出的價格資料，不能只看畫面上的價格。** JSON-LD 是主題放在網頁原始碼中的商品資料。將其中的價格、幣別與供應狀態，和 Shopify 的公開商品及購物車回應比對。

本篇處理公開網頁。Shopify 的[資料分享說明](https://help.shopify.com/en/manual/online-sales-channels/agentic-storefronts/data-privacy)將它與 Catalog 傳送分開。

## 1. 讀網頁原始碼

未登入時開啟商品頁，選擇**檢視網頁原始碼**。瀏覽器的檢查工具可能顯示 JavaScript 執行後的內容。

找到 `application/ld+json`，再找屬於這件商品的 `Product` 或 `ProductGroup` 及其 `offers`，包含子類。用網址、識別碼或商品證據確認身分。推薦商品的 Offer、可見價格或單獨的 `Offer` 字樣都不夠。

Google 表示[並非所有機器人都執行 JavaScript](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics)。[動態產生的 Product 標記](https://developers.google.com/search/docs/appearance/structured-data/generate-structured-data-with-javascript)也可能讓 Shopping 較少爬取，價格與庫存較不可靠；這些說明不保證特定代理的行為。

## 2. 取得同一情境的 Shopify 資料

保持相同網域、語系、市場與未登入情境。商品在 `/products/example` 時，開啟 `/products/example.js`，保留語系前綴。記下 `price_min / 100` 與商品層級的 `available`。

[Shopify Ajax 商品文件](https://shopify.dev/docs/api/ajax/reference/product)表示，價格採用顧客的顯示幣別。從同一情境、相應語系的 `cart.js` 讀取 `currency`。商品回應不是所有訪客共用的基準幣別資料。

回應讀不到、重新導向改變商品或情境，或幣別不同時，以「無法比較」停下來。不能因此認定主題、app 或 JavaScript 出錯。

## 3. 比對這件商品的 Offers

每筆 Offer 都要有完整的 `price`、`priceCurrency` 與 `availability`；價格須為數值且不小於零。不能拼接不同的不完整 Offers。

- 最低 Offer 價格等於 `price_min / 100`。
- 每筆幣別等於購物車 `currency`。
- 合併供應狀態符合商品 `available`：true 表示至少一筆可購買，false 表示全部不可購買。最便宜的子類可以售罄，其他子類仍有貨。

商店檢查接受的可購買狀態是 `InStock`、`PreOrder`、`BackOrder`、`LimitedAvailability`；不可購買狀態是 `OutOfStock`、`SoldOut`、`Discontinued`。schema.org 網址讀最後的名稱，其他值需另查。

`AggregateOffer` 要比對 `lowPrice` 與 `priceCurrency`。若有子層 Offers，每筆須完整，最低價格符合 `lowPrice`，並由子層提供合併供應狀態；彙總層若有供應狀態，也須一致。沒有子層時，彙總層須自行提供供應狀態。

只使用 `priceSpecification` 或不支援的供應狀態時，交給開發者確認。即使標記正確，重新檢查仍可能顯示證據缺漏或不一致；不要只為通過檢查而改掉正確標記。[Google 商家資訊規則](https://developers.google.com/search/docs/appearance/structured-data/merchant-listing)是另一套要求；本檢查接受零元不代表 Google 也接受。

## 4. 修正確定的缺漏，再比對

交給開發者商品網址、訪客情境、JSON-LD 與商品／購物車值。不熟悉程式碼時，先停在這裡。

Liquid 主題可從主題程式碼編輯器處理。Shopify 的 [structured_data 篩選器](https://shopify.dev/docs/api/liquid/filters/structured_data)能產生 JSON-LD；開發者應修正來源，避免互相矛盾的重複 Offers。無頭店面的回應由店面開發者負責，主題編輯器不一定能控制。

保留市場定價、登入與 B2B 限制。不要移除定價 app 或公開受限價格。修正後重新比對同一批回應。

若從發現進入，回到商店檢查並重新檢查，閱讀涵蓋範圍與證據狀態。它以匿名訪客檢查主要網域最多三個已發布頁面，情境可能與你不同。網域／路徑重新導向、缺少幣別情境或幣別不同，都維持「未檢查」。

資料一致只確認這些頁面與情境，不能證明爬蟲已抓取、建立索引、助理已引用，或 Catalog 已傳送。

## 來源

1. [JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics)
2. [Generate structured data with JavaScript](https://developers.google.com/search/docs/appearance/structured-data/generate-structured-data-with-javascript)
3. [Merchant listing structured data](https://developers.google.com/search/docs/appearance/structured-data/merchant-listing)
4. [Ajax API product endpoint](https://shopify.dev/docs/api/ajax/reference/product)
5. [Liquid structured_data filter](https://shopify.dev/docs/api/liquid/filters/structured_data)
6. [Data sharing and privacy for agentic storefronts](https://help.shopify.com/en/manual/online-sales-channels/agentic-storefronts/data-privacy)
