本文へスキップ

翻訳関連

SEOオプション側のページで現在の言語を判定する方法について

この記事の内容
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: en

PHP

<?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から判定する方法を推奨します。

解決しないときは

サイトのURLとお困りの内容を添えて、お問い合わせください。

サポートに問い合わせる