2026年10月7日時点で、ShifterはOxylabsやBright Dataを上回る、最大規模の米国ライブIPプールを保有しており、しかもコストはその一部で済みます。Shifterは現在、稼働中の米国IPの中で最大のプールを保有しています

ベンチマークを見る

ナレッジ

規模対応のローカライゼーションQA:1つの市場でしか発生しない不具合を発見する方法

ローカライズされたサイトは、本社の誰にも見えない形で不具合を起こす。現地の訪問者として各市場をテストする方法と、バグを発見するためのチェック項目。

Daniel Okafor

2026年10月13日 · 2 分で読める

サイトが開発された国では完璧に動作していても、他の12か国では静かに壊れていることがある。イタリアでは翻訳されないままのチェックアウトボタン、ドイツの訪問者にドル表示される価格、フランスでページ全体を覆う同意バナー、hreflangが間違ったURLを指しているために検索エンジンが決して見つけられない言語バージョン。これらはどれも、チームがオフィスからテストしても表面化しない。

理由は単純だ。市場間で変わるもののほとんどは、訪問者がどこにいるかによって決まる。現地の顧客が見ているものを確認するには、その市場からテストしなければならない。本ガイドでは、市場横断的なローカライゼーションQAを大規模に行う方法を扱う。何を確認すべきか、各市場を現地の訪問者としてどう見るか、そして最も一般的なバグを自動的に検出する小さなチェッカーについて説明する。

ローカライゼーションのバグが隠れる理由

ローカライズされたサイトは、言語ごとに1つの固定ページを提供することは稀だ。訪問者が送る信号に基づいて、リクエスト時に何を表示するかを決定する。

  • 位置情報(IPアドレスから):通貨、価格、配送オプション、法的バナー、商品の在庫状況、そして時には言語そのもの。
  • 言語設定(ブラウザから):どの翻訳を表示するか、日付や数字をどう書式化するか。
  • URL(/de/やde.example.comなど):サイトがリクエストされたバージョンで、他の2つの信号と一致する場合もしない場合もある。

本社でのテストは通常、1つの組み合わせしかカバーしない。本社自身の国、英語ブラウザ、デフォルトのURLだ。翻訳のレビューは言葉を確認するが、実際に配信されるページ自体は確認しない。バグは誰もテストしなかった組み合わせの中に潜んでいる。

1つの市場だけで壊れるもの

バグ例通常の発生原因
未翻訳の文字列イタリアのサイトに”Add to cart”新機能が英語の文字列のまま出荷され、翻訳ワークフローに乗らない
誤った通貨や価格の書式ドイツの訪問者に$49.99と表示、または49.99 €の代わりに49,99 €ある場所ではURLから、別の場所ではIPから通貨が選ばれている
壊れたhreflang言語バージョンが404や別の言語を指しているローンチ後にURLが変更され、代替が更新されていない
lang属性の欠落や誤りドイツ語ページにlang="en"ハードコードされた属性を持つ共有テンプレート
リダイレクトループや強制リダイレクトオーストリアの訪問者がドイツのショップに送られ戻れない明示的な選択を無視するジオリダイレクト
法的表示と同意レイヤー特定のEU国でコンテンツを覆うバナー国別の同意設定
レイアウトの崩れドイツ語のラベルがボタンを壊す、右から左の文字がグリッドを壊す短い英語の文字列だけでテストされたデザイン

これらのいくつかは検索に直接影響する。lang属性が誤っていたり、代替が壊れていたりするページは、間違った言語としてインデックスされるか、まったくインデックスされない可能性がある。hreflangを使ってページのすべての言語バージョンを見つけるというガイドでは、サイトの代替をマッピングし、どこにもつながっていないものを見つける方法を紹介している。

ステップ1:各市場を現地の訪問者として見る

核心となる要件は、市場の内部から、現地の訪問者のように設定されたブラウザで各ページをリクエストすることだ。実務上はこれは一致すべき3つの要素を意味する。

  1. 市場内のIPアドレス。 国やシティターゲティング付きのレジデンシャルプロキシを使えば、現地の一般消費者回線上のアドレスを得られる。これはサイトのジオロジックが期待しているものだ。当社のレジデンシャルプロキシは195以上の国をカバーしており、必要に応じてシティターゲティングも可能だ。
  2. 市場の言語とロケール。 ブラウザの言語ヘッダーとロケールを一致させる。
  3. 市場のタイムゾーン。 実際のブラウザでテストする場合、一部のサイトはこれを別の位置情報信号として利用しているためだ。

これらが一致しないと、実際の顧客が経験しない組み合わせをテストすることになり、存在しないバグを追いかけることになりかねない。プロキシのジオ、タイムゾーン、ロケールを一致させるというガイドでは、1つの設定からこの3つすべてを導き出す方法を扱っている。

また、各市場ごとに新しいセッションでテストすること。前回の訪問からのクッキーが、サイトを最後にテストした国に固定してしまい、ジオロジックのバグを隠してしまうことがある。

ステップ2:すべての市場を同じ方法でチェックする

目視によるレビューは、数十の市場と数千のページには対応できない。しかし、ほとんどのローカライゼーションバグはHTML内で検出できる。以下の関数は、最も一般的な4つの問題について、1つのローカライズされたページをチェックする。lang属性、残留している英語の文字列、誤った通貨の価格、そして市場に対するhreflangエントリの欠落だ。

import re

from lxml import html as lxml_html


def market_problems(page_html, market):
    """Things that only break in one market, checked on one localized page.

    market: {"lang": "de", "currency": "€", "leftovers": ["Add to cart", "Free shipping"]}
    """
    doc = lxml_html.fromstring(page_html)
    problems = []

    lang = (doc.get("lang") or "").lower()
    if not lang.startswith(market["lang"]):
        problems.append(f"html lang is {lang or 'missing'}, expected {market['lang']}")

    text = " ".join(" ".join(doc.itertext()).split())
    for phrase in market["leftovers"]:
        if phrase.lower() in text.lower():
            problems.append(f"untranslated text: {phrase!r}")

    prices = re.findall(r"[$€£¥₩R]\$?\s?\d[\d.,]*|\d[\d.,]*\s?[$€£¥₩]", text)
    wrong = [p for p in prices if market["currency"] not in p]
    if wrong:
        problems.append(f"{len(wrong)} of {len(prices)} prices not in {market['currency']}, e.g. {wrong[0]!r}")

    if not doc.xpath(f"//link[@rel='alternate'][starts-with(@hreflang, '{market['lang']}')]"):
        problems.append(f"no hreflang entry for {market['lang']}")
    return problems

2つのページで実行してみる(例示的なHTMLであり、実際のサイトではない)。

from locqa import market_problems

markets = {
    "de": {"lang": "de", "currency": "€", "leftovers": ["Add to cart", "Free shipping"]},
    "fr": {"lang": "fr", "currency": "€", "leftovers": ["Add to cart", "Free shipping"]},
}
pages = {   # in practice: the same product page, fetched from inside each market
    "de": '<html lang="de"><head><link rel="alternate" hreflang="de" href="/de/p/1"></head>'
          '<body><h1>Wasserkocher</h1><p>49,99 €</p><p>Free shipping</p></body></html>',
    "fr": '<html lang="fr"><head><link rel="alternate" hreflang="fr" href="/fr/p/1"></head>'
          '<body><h1>Bouilloire</h1><p>$49.99</p><p>Ajouter au panier</p></body></html>',
}
for code, page in pages.items():
    print(code, market_problems(page, markets[code]) or "ok")
de ["untranslated text: 'Free shipping'"]
fr ["1 of 1 prices not in €, e.g. '$49.99'"]

ドイツ語のページには残留した英語のフレーズがあり、フランス語のページにはドル表示の価格がある。どちらも翻訳レビューには通過してしまう。なぜなら翻訳された文字列自体には問題がないからだ。

残留フレーズのリストは自社のインターフェースから構築すること。ボタンのラベル、配送やチェックアウトのメッセージ、エラーメッセージなどだ。これらは最も後になって追加されがちな文字列だ。価格の書式は通貨記号だけでなく注意が必要だ。同じ記号でも複数の書き方があるためだ。ロケール間で価格、数字、日付を正規化するというガイドでは、これらを確実に解析する方法を扱っている。

ステップ3:スケジュールに沿って実行する

ローカライゼーションはローンチ後にも壊れる。ローンチ時だけではない。新機能、テンプレートの変更、価格更新が1つの市場だけを壊し、他のすべての市場は問題なく見えることがある。実用的なリズムとしては以下が挙げられる。

  • リリースごと: すべての市場における主要ページの小さなセット(ホーム、カテゴリ、商品、カート、チェックアウト)。
  • 週次: 各市場でのより広いページのサンプル。最近変更されたものを含む。
  • ジオロジック、価格設定、同意に関する変更後: フルパス。

結果は市場ごと、チェックごとに報告し、各チームが自分たち自身の問題を見られるようにすること。失敗が最も多い市場は、通常、現地テストが最も少ない市場だ。

自動化では検出できないもの

一部の問題は、その市場を知る人間がまだ必要だ。文法的には正しいが響きがおかしい翻訳、現地でよくない意味を持つ画像や色、テンプレートがカバーしていない法的要件などだ。自動チェックは、人々がドル記号を探し回る代わりに、こうした問題にレビューの時間を費やせるようにする。

一部のサイトは国によって異なる同意とプライバシーのレイヤーを表示しており、これはユーザーが見るものと自動テストが到達できるものの両方を変えてしまう。国別の同意ウォールに関する当社の調査では、EU内でこれがどれほど異なるかを示している。

FAQ

ローカライゼーションQAとは何か?

サイトの各言語・市場バージョンが現地の訪問者にとって正しく動作し、正しく読めるかをテストすること。翻訳、通貨や価格の書式、レイアウト、法的表示、リダイレクト、そして検索エンジンが各バージョンを見つけるために使う信号などが対象だ。

他の市場をVPNでテストできないのはなぜか?

手早く確認する分にはVPNでも可能だが、多くのサイトはVPNやデータセンターのアドレスを認識し、家庭用回線とは異なる扱いをする。そのため、実際の現地顧客が見ているものを見られない可能性がある。市場内のレジデンシャルIPの方が、実際の体験に近い。

すべての市場でどのページをテストすべきか?

最低限、ホームページ、カテゴリページ、商品ページ、カートとチェックアウト、そして価格や法的文言を含むページだ。最近変更されたページのローテーションサンプルに拡大すること。

ローカライゼーションのバグはSEOにどう影響するか?

誤ったlang属性、壊れたhreflangの代替、強制的なジオリダイレクトは、検索エンジンが間違った言語バージョンをインデックスしたり、バージョンを完全に見逃したりする原因となり、その市場での可視性が失われる。

まとめ

ローカライゼーションのバグは、誰もテストしていない市場に隠れている。IP、言語、タイムゾーンが一致した状態で、各市場を現地の訪問者として見ること。そして、すべてのリリース後に、すべての市場で同じ自動チェックを実行すること。機械的な問題(言語属性、残留文字列、通貨、hreflang)は機械で捕まえ、現地の読者にしか判断できないものに人間のレビューを充てること。

始める準備はできていますか?

Shifterのレジデンシャルプロキシをお試しください。IP 205M+件、195+カ国、$0.10/GBから。

始める