小技プログラミング

多言語サイトで自動リダイレクトさせる

多言語サイトを運営している場合に、自動でリダイレクトさせたい場合に、phpでリダイレクトするサンプルコードです。

環境変数 HTTP_ACCEPT_LANGUAGE から訪問者の利用しているブラウザの利用可能言語リストをカンマ区切りで配列に格納し、内容を判定して表示するディレクトリを切り分けています。

言語判定ではenでマッチするものは /en 英語ページへそれ以外はルートディレクトリ(日本語ページ)を表示する想定になっています。

  • <?php
  • $langs = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  • $ary_lang = explode(',', $langs);
  • if ($ret == '') {
  • foreach ($ary_lang as $lang) {
  • if (preg_match('/^en/i', $lang)) {
  • $ret = 'en';
  • break;
  • } else {
  • $ret = 'jp';
  • break;
  • }
  • }
  • if ($ret == 'en') {
  • header("Location: /en");
  • }
  • if ($ret == '') {
  • $ret = 'jp';
  • }
  • }
  • ?>

上記でブラウザの言語が英語なら英語ページへ、その他はルートディレクトリへリダイレクトされます。

ただし、google検索でのSEOを考える場合は、Search Console でリクエストをする際に、「リダイレクトされました」と警告が出て正しくインデックスされないことからもリダイレクトは極力避けるべきだと考えられます。

googleでは、英語圏ユーザへのページ誘導はgoogleに任せてしまう仕組みにする事が推奨されています。

下記のように 各言語毎に表示するべきURLをhead タグ内へ記載します。

  • <head>
  • <title>Widgets, Inc</title>
  • <link rel="alternate" hreflang="en-gb"
  • href="http://en-gb.example.com/page.html" />
  • <link rel="alternate" hreflang="en-us"
  • href="http://en-us.example.com/page.html" />
  • <link rel="alternate" hreflang="en"
  • href="http://en.example.com/page.html" />
  • <link rel="alternate" hreflang="ja"
  • href="http://ja.example.com/page.html" />
  • <link rel="alternate" hreflang="x-default
  • href="http://www.example.com/" />
  • </head>

SEO対策が必要な場合、上記hreflang設置と英語ページへのリンクメニューを設置するくらいにして、リダイレクトは避けるべきでしょう。