🔍
SEO対応・Rewrite設定
言語プレフィックス付きURL(/en/ /ko/ など)を検索エンジンに正しくインデックスさせるための、サーバー側Rewrite設定です。
1
機能概要翻訳APIタグは言語を切り替えた際、URLに/en//ko/などの言語プレフィックスを付与します(pushStateによるURLバー変更)。
サーバー側でこのURLを実際のページへ内部転送(Rewrite)することで、クローラーが各言語URLを個別にインデックスできるようになります。
Rewrite設定はSEO対応のためのオプションです。設定しなくてもウィジェット自体は動作しますが、言語プレフィックスURLが404になるためSEO効果が得られません。
2
Apache2 / .htaccess設定を書き込む場所によって、正しいパターンの書き方が異なります。ご自身の環境に合う方を、そのままコピーしてください。(2つを混在させると、意図しない動作になります)
パターンA:
.htaccess ファイルに書く場合
<IfModule mod_rewrite.c>
RewriteEngine On
# 例: /en のように末尾スラッシュが無い場合は、まず /en/ へ301
RewriteRule ^(en|ko|es|zh-CN|zh-TW)$ /$1/ [R=301,L]
# 例: /en/ のように末尾がプレフィックスのみの場合、実際のエントリーファイルへ
# (index.html部分は、ご自身のサイトの実際のエントリーファイル名に置き換えてください)
RewriteRule ^(en|ko|es|zh-CN|zh-TW)/$ /index.html [END]
# 例: /en/products/ → /products/(URLバーはそのまま)
RewriteRule ^(en|ko|es|zh-CN|zh-TW)/(.*)$ /$2 [END,QSA]
</IfModule>
単純に
[L]だけで内部転送すると、環境によっては末尾スラッシュのURL(/en/)が403になることがあります。[END](Apache 2.3.9以降で利用可能)を使い、末尾スラッシュのケースは実在するエントリーファイルへ明示的に振り分けてください。パターンB:
apache2.conf ・ sites-enabled の <VirtualHost> ブロックに、直接書く場合
<VirtualHost *:443>
... DocumentRoot・ServerName・SSL設定 等 ...
RewriteEngine On
# 【重要】・.htaccessとは異なり、に直接書く
# 場合は、パターンの先頭に必ず / を付けてください。付け忘れると、
# パターンが実際のリクエストパス(/en/等、先頭に/を含む)に一致せず、
# 書き換えが一切発生しない、または意図しないパスに書き換わり
# 403/404になることがあります(実際に確認された不具合)。
# 例: /en のように末尾スラッシュが無い場合は、まず /en/ へ301
RewriteRule ^/(en|ko|es|zh-CN|zh-TW)$ /$1/ [R=301,L]
# 例: /en/ のように末尾がプレフィックスのみの場合、実際のエントリーファイルへ
# (index.html部分は、ご自身のサイトの実際のエントリーファイル名に置き換えてください)
RewriteRule ^/(en|ko|es|zh-CN|zh-TW)/$ /index.html [END]
# 例: /en/products/ → /products/(URLバーはそのまま)
RewriteRule ^/(en|ko|es|zh-CN|zh-TW)/(.*)$ /$2 [END,QSA]
</VirtualHost>
パターンAのコードを、そのまま(先頭スラッシュ無しで)
<VirtualHost>に貼り付けてしまうと、正しく動作しません。必ず、上のパターンBを使ってください。3
Nginx
server {
listen 80;
server_name example.com;
root /var/www/html;
# 言語プレフィックス付きURLを実パスに内部転送
location ~ ^/(en|ko|es|zh-CN|zh-TW)(/.*)?$ {
try_files $2 $2/ /index.php?$query_string;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
4
動作イメージ
# ① ユーザーが英語版URLにアクセス
ブラウザ: https://example.com/en/products/?id=23
# ② Rewriteが内部転送(URLバーは変わらない)
サーバー: /products/?id=23 を処理
# ③ 翻訳APIタグが /en/ を検知して英語翻訳を適用
翻訳APIタグ: sessionStorage に cur_lang='en' をセット → 英語翻訳適用
# ④ URLバーをそのまま維持(pushState)
URLバー: https://example.com/en/products/?id=23 を維持
対応言語コードは、ご利用中のドメインで実際に設定している言語に合わせて、Rewriteルールの
(en|ko|es|zh-CN|zh-TW)部分を変更してください。「ドメイン・言語」ページで設定済みの言語一覧を確認できます。