SEOオプションでは、公開URLに含まれる言語を基に現在の表示言語を判定できます。
- サブドメイン方式:言語サブドメインから判定します。
- サブディレクトリ方式:先頭の言語ディレクトリから判定します。
- 独自ドメイン方式:言語とドメインの対応表から判定します。
サブドメイン方式をブラウザで判定する
次の例は、元サイトが example.com の場合です。例中のドメイン、翻訳先言語の一覧、元言語の ja は、実際のサイト設定に合わせて変更してください。
const originalHost = 'example.com'; const targetLanguages = ['en', 'zh', 'zh-tw', 'pt-br']; const host = window.location.hostname.toLowerCase(); const suffix = '.' + originalHost; const prefix = host.endsWith(suffix) ? host.slice(0, -suffix.length) : ''; const language = targetLanguages.includes(prefix) ? prefix : 'ja'; console.log(language);サブドメイン全体を取得するため、
zh-tw や pt-br のようなハイフン付き言語コードも判定できます。/^([a-z]{2,5})/ のように先頭の英字だけを取得する正規表現では、ハイフン付きコードを正しく判定できません。サブディレクトリ方式をブラウザで判定する
const targetLanguages = ['en', 'zh', 'zh-tw', 'pt-br']; const prefix = window.location.pathname.split('/')[1].toLowerCase(); const language = targetLanguages.includes(prefix) ? prefix : 'ja'; console.log(language);言語プレフィックスがないURLは、元言語のページとして扱います。
独自ドメインマッピングを使用する場合
言語ごとに完全に異なるドメインを使用する場合は、サイトと同じ対応表をフロントエンド側にも用意してください。
const languageByHost = { 'example.com': 'ja', 'example.net': 'en', 'example.cn': 'zh' }; const language = languageByHost[window.location.hostname.toLowerCase()] || 'ja'; console.log(language);オリジンサーバーで判定する
AIシュリーマンがSEOページの元コンテンツを取得する際は、オリジンサーバーへのリクエストヘッダーに翻訳先言語を設定します。
Target-Language: enPHP
<?php $language = $_SERVER['HTTP_TARGET_LANGUAGE'] ?? 'ja'; ?>利用しているWebサーバーによって、ヘッダー名の大文字・小文字の扱いが異なる場合があります。
Ruby on Rails
language = request.headers['Target-Language'].presence || 'ja'Node.js/Express
Node.jsではヘッダー名が小文字へ正規化されます。
app.get('/', (req, res) => { const language = req.get('Target-Language') || 'ja'; res.json({ language }); });サーバー側判定の注意
オリジンサーバーのレスポンス内容を
Target-Language によって変更する場合は、キャッシュキーも言語別に分離してください。言語ヘッダーを考慮せず同じCDNキャッシュを使用すると、異なる言語向けの元HTMLが混在する可能性があります。単に画面上で現在の言語を取得する用途では、公開URLから判定する方法を推奨します。