快速解答:拍賣網站要做多語系,語言數量 ≤ 3 種用「獨立欄位」最省事,4 種以上建議用「JSON 欄位」或「翻譯表」。URL 策略首選子目錄(/zh-tw/、/en/),SEO 權重集中且維護成本最低。
你的拍賣網站做得再好,如果只有中文介面,等於直接放棄了海外買家。根據 Statista 2025 年報告,全球跨境電商市場規模已達 7.9 兆美元,其中拍賣類平台的跨境交易佔比約 23%。這塊餅不小,但要吃到,第一步就是把多語系做好。
我自己經手過幾個拍賣平台的國際化專案,踩過的坑不少。這篇把我實際跑過的流程整理出來,從資料庫架構到 SEO 細節,一次講清楚。
什麼是拍賣網站的多語系設計(i18n)?
多語系設計是讓同一套拍賣系統能用不同語言呈現內容的技術架構,英文叫 internationalization,因為 i 和 n 之間有 18 個字母,所以簡稱 i18n。別跟 l10n(localization,在地化)搞混——i18n 是「讓系統有能力支援多語」,l10n 是「實際翻譯跟在地適配」。
拍賣網站的多語系比一般網站複雜,因為你要處理的不只是靜態文字。想想看:
- 拍品名稱跟描述:賣家上架時填的,不是翻譯檔能搞定的
- 即時出價資訊:倒數計時、出價提示要即時切換語言
- 金額與幣別:NT$1,000 在日本顯示要變成 ¥4,600
- 時區:台灣的結標時間 22:00,美西買家看到要是 06:00
資料庫架構怎麼選?三種方案實戰比較
選錯架構等於在地基上埋雷,後面改的成本是一開始的 5-10 倍。 以下是我實際用過的三種方案:
方案一:獨立欄位(適合 2-3 種語言)
直接在資料表加 name_zh_tw、name_en 這類欄位。MyBid 平台目前就是用這個方案,因為初期只支援繁體中文跟簡體中文兩種語言。
// Laravel Migration 範例
$table->string('name_zh_tw');
$table->string('name_zh_cn');
$table->text('description_zh_tw');
$table->text('description_zh_cn');
查詢效能最好,不需要 JOIN,直接 $item->name_zh_tw 就拿到了。但如果哪天要加日文、英文、韓文?每加一種語言就要跑 migration 改 schema,表會越來越肥。
方案二:JSON 欄位(適合 3-8 種語言)
MySQL 5.7+ 和 PostgreSQL 都支援 JSON 欄位,搭配 Laravel 的 $casts 很好用:
// Migration
$table->json('name'); // {"zh_tw": "翡翠手鐲", "en": "Jade Bangle"}
// Model
protected $casts = ['name' => 'array'];
// 使用
$item->name[app()->getLocale()];
彈性夠,加語言不用改 schema。缺點是 JSON 欄位不好建索引,搜尋拍品名稱的效能會差一截。
方案三:翻譯表(適合 8 種以上語言)
用獨立的 translations 表做多態關聯。eBay 和大型拍賣平台多半用這個架構。擴充性最強,但每次查拍品都要 JOIN 翻譯表,N+1 問題一不小心就炸掉。
我的建議:如果你的拍賣平台目標市場很明確(例如只做台灣 + 日本),用獨立欄位就好,別過度設計。等真的要擴到 5 種以上語言再重構也來得及。
URL 策略該用子目錄還是子網域?
子目錄(subdirectory)是 Google 官方推薦的多語系 URL 策略,對大多數拍賣網站來說也是最務實的選擇。
| 策略 | 範例 | SEO 權重 | 維護成本 |
|---|---|---|---|
| 子目錄 | mybid.tw/en/auctions/123 | 集中 | 低 |
| 子網域 | en.mybid.tw/auctions/123 | 分散 | 中 |
| 獨立網域 | mybid.com/auctions/123 | 獨立 | 高 |
有個做古董拍賣的朋友,一開始用子網域把英文站拆出去(en.antique-bid.com),結果英文站的 Domain Authority 從零開始爬,花了 8 個月才到 DA 15。後來改回子目錄,3 個月內英文頁面的自然流量就成長了 170%,因為直接繼承了主站 DA 42 的權重。
在 Laravel 裡實作子目錄多語系很直覺,用 Route prefix 就行:
Route::prefix('{locale}')
->middleware('set-locale')
->group(function () {
Route::get('/auctions/{auction}', [AuctionController::class, 'show']);
});
如果你正在規劃拍賣網站的架設,URL 策略建議在一開始就定好,事後搬遷的 301 redirect 工程量非常可觀。
hreflang 標籤怎麼寫才不會被 Google 忽略?
hreflang 是告訴搜尋引擎「這個頁面有其他語言版本」的 HTML 標籤,寫錯或漏寫都會導致搜尋結果顯示錯誤語言的頁面。
最常見的錯誤是「單向指定」。假設你的繁中頁面有 hreflang 指向英文版,但英文版忘了指回繁中版,Google 會直接忽略這組 hreflang。必須雙向對應:
<!-- 繁中頁面 -->
<link rel="alternate" hreflang="zh-TW" href="https://mybid.tw/zh-tw/auctions/123" />
<link rel="alternate" hreflang="en" href="https://mybid.tw/en/auctions/123" />
<link rel="alternate" hreflang="x-default" href="https://mybid.tw/zh-tw/auctions/123" />
<!-- 英文頁面也要有完整的一組 -->
<link rel="alternate" hreflang="zh-TW" href="https://mybid.tw/zh-tw/auctions/123" />
<link rel="alternate" hreflang="en" href="https://mybid.tw/en/auctions/123" />
<link rel="alternate" hreflang="x-default" href="https://mybid.tw/zh-tw/auctions/123" />
想深入了解拍賣網站的 SEO 策略,可以參考拍賣網站 SEO 優化指南。如果需要專業的 SEO 顧問服務,找有拍賣產業經驗的團隊會更對症下藥。
幣別和時區處理有哪些地雷?
幣別轉換千萬不要存轉換後的金額,永遠存原幣值加幣別代碼。 這是血淚教訓。
匯率每天都在變,如果你把 NT$10,000 轉成 USD 330 存進資料庫,隔天匯率變了,帳就對不上了。正確做法:
// 資料庫存原幣值(以分為單位)
$table->bigInteger('current_price'); // 1000000 = NT$10,000
$table->char('currency', 3); // TWD
$table->bigInteger('starting_price'); // 同上
// 顯示時即時轉換
$displayPrice = CurrencyConverter::convert(
$auction->current_price,
$auction->currency,
$user->preferred_currency
);
時區的部分,所有時間一律用 UTC 儲存,前端再根據使用者的時區轉換顯示。Laravel 的 config/app.php 設 timezone => 'UTC',前端用 JavaScript 的 Intl.DateTimeFormat 或 Day.js 處理。
拍賣的倒數計時特別要注意:別在後端算好「剩餘秒數」丟給前端,要丟 UTC 結標時間戳,讓前端自己算倒數。不然網路延遲一大,倒數就不準了。
機器翻譯還是人工翻譯?務實的混合策略
拍品描述用機器翻譯打底 + 人工校稿是目前 CP 值最高的做法。 純靠人工翻譯,一個拍賣平台上千件拍品,翻譯費會把你吃窮。
我的建議分層:
| 內容類型 | 翻譯方式 | 原因 |
|---|---|---|
| UI 介面文字 | 人工翻譯 | 量少、重複使用率高 |
| 拍品名稱 | 機器翻譯 + 人工校稿 | 量大、專有名詞需校正 |
| 拍品描述 | 機器翻譯 | 量最大、買家可接受 |
| 法律條款 | 專業人工翻譯 | 法律責任不能馬虎 |
Google Cloud Translation API 的費用大約是每 100 萬字元 USD 20,對一個月上架 500 件拍品的平台來說,翻譯成本大概每月 NT$200 左右,幾乎可以忽略。
但有一點要特別注意:古董、藝術品這類的專有名詞,機器翻譯常常翻錯。「青花瓷」翻成 "blue and white porcelain" 沒問題,但「鈞窯」翻成 "Jun kiln" 而不是 "Jun ware",懂行的國際買家看了會搖頭。這類高價值品類建議建立自己的術語庫(glossary),餵給翻譯 API。
實戰案例:某台灣古物拍賣平台的國際化
分享一個我去年參與的案例。一間專做台灣老件的拍賣平台,原本只有繁中介面,月流量約 12,000。老闆想吃日本市場,因為日本藏家對台灣老件很有興趣。
我們做了這些事:
- 架構選擇:只加日文,用獨立欄位(
name_ja、description_ja) - URL 策略:子目錄
/ja/ - 翻譯方式:UI 找日文母語者翻、拍品用 DeepL API + 日文校稿員
- SEO:完整的 hreflang + 日文 sitemap 提交到 Google Search Console
- 幣別:顯示日圓,但結帳統一用台幣,匯率每日更新
三個月後的成績:
- 日文版頁面在 Google.co.jp 的曝光數達到每月 8,500 次
- 來自日本的競標者從 0 成長到 47 人
- 高價拍品(NT$50,000 以上)的成交率提升 32%,因為日本買家的出價普遍更高
這個案例告訴我們,多語系不是為了「看起來國際化」,而是真的能帶來新的買家群。如果你也在考慮自架拍賣網站,建議找有國際化經驗的網頁設計團隊,從一開始就把多語系架構規劃進去。
FAQ
Q:多語系拍賣網站的開發成本大概多少? 以 Laravel 專案來說,如果架構設計得當,加一種語言的開發成本大約是初始開發的 15-20%。主要花費在翻譯、測試和 SEO 設定上,程式碼改動反而不大。
Q:需要為每種語言準備獨立的客服嗎? 初期可以用翻譯工具輔助,但如果該語言的交易量超過總量的 10%,建議至少配一位能用該語言溝通的客服。拍賣的爭議處理牽涉到金額,語言不通很容易出事。
Q:RTL(右到左)語言如阿拉伯文需要特別處理嗎?
需要。CSS 要用 logical properties(margin-inline-start 取代 margin-left),整個 layout 要能翻轉。如果你的目標市場不包含阿拉伯語系國家,可以先不處理,但架構上預留空間是好習慣。