多言語サイの検索結果が英語表記になってしまったときのメモ
多言語サイトのGoogle検索結果が英語表記になってしまったので修正した時のメモです。
原因と対策
原因1
ユーザーの言語に合わせて、日本語の場合はhttp://xxx/
に、英語の場合はhttp://xxx/en/
に、スペイン語の場合はhttp://xxx/es/
に、それぞれJavascriptでリダイレクトをかけていたのが原因でした。
こういったリダイレクトの場合、「Googlebot」は英語ユーザーになるので英語ページにリダイレクトされてしまい、英語のMETA情報が検索結果に表示されたようです。
対策1
Javascriptでのリダイレクトをやめて、かわりにhreflang
タグを設定しました。
hreflangタグを設定すると、ユーザーの言語に合わせた検索結果が表示できます。
(例)メインターゲットが日本語の、日・英2言語に対応したサイトの場合
<link href="日本語サイトのページURL" hreflang="x-default" rel="alternate"> <link href="日本語サイトのページURL" hreflang="ja" rel="alternate"> <link href="英語サイトのページURL" hreflang="en" rel="alternate">
上記のように指定します。
hreflang
タグの確認方法
「Search Console」のアカウントをもっていれば、Search Consoleの「ダッシュボード > 検索トラフィック > インターナショナルターゲティング」で確認できます。
正しく設定されてないと「サイトにhreflangタグがありません。」と表示されます。
ここで問題がないのに反映されない場合は、サイトがGoogleのルールーに違反してるのが原因かもしれません。←(原因2)
原因2
ページロード時は<body>
をcssで非表示にして、読み込み後にjsで表示させていた(非同期読み込み)のが原因で、コンテンツのないページと認識されていました。
Googlebotのレンダリング結果を調べるのには「Fetch as Google」を使いました。
「Fetch as Google」とは
「Google が行う URL のクロールまたはレンダリングの方法をテストする」もので、週に500回まで取得できます。 「Search Console」内にあるので、Search Consoleのアカウントが必要です。 私の場合、ここでレンダリングを確認したら、キャプチャ画像にコンテンツが何も表示されていない状態(真っ白)でした。
対策2
cssで<body>
を非表示にするのをやめて、jsがなくても全コンテンツが正しく表示されるように作り直しました。
Googlebotのjsレンダリングは、同期的な読み込みには対応しいるけど、Ajax 経由など非同期読み込みには対応してないそうです。
こちらのサイトが参考になりました
javascriptを使ったSEO対策まとめ - Qiita
検索結果を直すには「Search Console」
「Search Console」のアカウントを持っていれば、サイトの再クロールの依頼を出したり、クロールエラーの確認ができます。アカウントがない場合は再クロールされるのを数日待ちます。
修正&反映のながれ
- (1)ソースを修正します
- (2)「Search Console」に確認したいサイトを登録して、「クロール > Fetch as Google」に移動します。
(3)「取得してレンダリング」ボタンをクリックします
(4)しばらくすると読み込みが完了するので、リストから確認したい項目を選択してレンダリング表示を確認します
- (5)表示に問題がなければ「インデックス登録をリクエスト」をクリックします
あとは再クロールされるのを待ちます。即時に反映されることもあれば、1〜2日かかることもありました。
ちなみに
再クロール直後は、日本語の検索結果が表示されるようになった!と思ったのに、翌日には英語に戻ってるということがありました。そのときはhreflang
タグは正しいけど、クロールのレンダリングが正しくないのが原因でした。(←原因2)
その他
解決のヒントを探すなら
メインターゲットを日本以外にするなら、ドメインは「.com」や「.net」
日本のユーザーがメインターゲットで、補足として多言語サイトを設置するなら「.jp」など地域に紐づいたドメイン(ccTLD)でも問題ないそうです。ただし英語圏をメインターゲットにする場合は、「.com」や「.net」など(gTLD)にするのだそうです。
雑感
検索結果の表示が意図通りにならない場合、クロールエラーやGoogleの仕様にそってない、などSEO的な要因が多いようですが、SEOに不慣れだと単純なことでも原因をみつけるまでが一苦労でした。
↓ここらへんを理解しておくと何かとよさそうだなと思いました。