LoginSignup
1
1

More than 1 year has passed since last update.

サーチコンソールにインデックスが登録されなかった時の話 `$_SERVER`を使うときにはちょっと注意が必要

Last updated at Posted at 2023-03-26

ことの始まり

わけあって、ユーザーが使用する言語によって表示するページを変えようとした。
方法としては、$_SERVER['HTTP_ACCEPT_LANGUAGE']を使い以下のような感じで分岐させていた

※実際のコードとは異なります
if ((substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0,2)) == 'ja'){return redirect()->route('日本語のページ');}
return redirect()->route('英語のページ');

上記の方法で、本番環境でも一切の問題なくwebアプリは正常に動作した
しかし、サーチコンソールではインデックスが登録されない。

原因(ただの推測)

$_SERVER['HTTP_ACCEPT_LANGUAGE']の部分を消してみたらインデックスが登録されたので。
クローラーではHTTP_ACCEPT_LANGUAGEにあたる値がなかったため$_SERVER['HTTP_ACCEPT_LANGUAGE']の部分で止まってしまったと推測

対処

今現在はバックエンドで自動的に分岐するのは諦めて、ユーザーが言語を選ぶようにした。

try catchを使った以下のような対処もあるが、訳あって今回はこの方法は取れなかった。

try {
    if ((substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0,2)) == 'ja'){return redirect()->route('日本語のページ');}
} catch (\Throwable $th) {
    //エラーが起きてしまった時
    return redirect()->route('英語のページ');
}
    // ユーザーの言語が日本語ではない
    return redirect()->route('英語のページ');

駄文

クローラーの仕様を全く知らなかったため、このエラーの解決に1週間以上かかってしまった。
かなりマイナーなエラーかもしれないが、他の人が、私と似たようなエラーが起きた時にこの記事を参考にして短い時間でエラーが解決すると私としても嬉しい

フロントエンドの方にvueを使っているのだが以下の方法をこの記事を書いているうちに思いついた。

  1. 英語のページに遷移
  2. mountedでユーザーの言語を判断して
  3. ユーザーの言語が日本語の場合、日本語のページに遷移する
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1