標準の公開先はサブドメイン(例: global.example.co.jp/en/)で、DNSレコード1件だけで動きます。Google の評価はサブドメインでもサブディレクトリでも同等ですが、ブランドやURL設計の都合で example.co.jp/en/ のように自社ドメイン直下で配信したい場合、お客様側のCDNまたはサーバーで言語パスを Sotomuke に転送(リバースプロキシ)すれば実現できます。
前提
- サブドメイン(例:
global.example.co.jp)での公開が完了していること。転送先はこのホスト名です。 - 自社ドメインの前段に転送ルールを書ける環境があること(Cloudflare、各種CDN、nginx/Apache、Next.js/Vercel、Netlify など)。共有レンタルサーバーや STUDIO・Wix などの SaaS では設定できません。その場合はサブドメインをお使いください。
- 日本語ページは今まで通りお客様のサーバーが配信します。転送するのは言語パスだけです。
手順の全体像
- ダッシュボードの「公開設定」→「サブディレクトリで配信する」に公開URL(例:
https://example.co.jp)を保存します。以後、canonical・hreflang・サイトマップ・言語切替のURLがこのドメインになります。 - 下のいずれかの方法で、
/en/・/zh-Hans/・/ko/など選択した言語のパス(配下すべて)をglobal.example.co.jpに転送します。Host ヘッダーもglobal.example.co.jpに書き換えるのがポイントです(Sotomuke はホスト名でサイトを判別します)。 - 「転送を確認」ボタンで、各言語のURLが Sotomuke から応答していることを確認します(応答に
x-sotomuke-siteヘッダーが付きます)。 https://example.co.jp/robots.txtにSitemap: https://global.example.co.jp/sitemap.xmlの1行を追加します。Google は robots.txt から参照されたサイトマップであれば別ホストでも受け付けます。Search Console で example.co.jp のプロパティにこのサイトマップを送信してください。
方法A: Cloudflare(Origin Rules・コード不要)
ドメインが Cloudflare のプロキシ(オレンジ雲)配下なら最も簡単です。Rules → Origin Rules で次のルールを作ります。
- 条件: URI Path starts with
/en/(言語ごとに OR で追加。式で書くなら(starts_with(http.request.uri.path, "/en/")) or (starts_with(http.request.uri.path, "/ko/"))) - Host header: Rewrite to
global.example.co.jp - DNS record: Override to
global.example.co.jp
API で作る場合は origin_rules フェーズのルールセットに action: "route"、action_parameters: { host_header: "global.example.co.jp", origin: { host: "global.example.co.jp" } } を追加します。
方法B: Cloudflare Worker(細かく制御したい場合)
export default {
async fetch(request) {
const url = new URL(request.url);
const langs = ["en", "zh-Hans", "ko"]; // ダッシュボードで選んだ言語
const lang = url.pathname.split("/")[1];
if (langs.includes(lang) || url.pathname === "/sitemap-sotomuke.xml") {
const target = new URL(url);
target.hostname = "global.example.co.jp"; // 公開ホスト名
if (url.pathname === "/sitemap-sotomuke.xml") target.pathname = "/sitemap.xml";
const res = await fetch(target.toString(), { headers: request.headers, cf: { cacheTtl: 300 } });
return new Response(res.body, res);
}
return fetch(request); // それ以外は元サイトへ
},
};
Worker のルートは example.co.jp/* に設定します。/sitemap-sotomuke.xml も転送しておくと、robots.txt に同一ホストのサイトマップとして書けます。
方法C: nginx
location ~ ^/(en|zh-Hans|ko)/ {
proxy_pass https://global.example.co.jp;
proxy_set_header Host global.example.co.jp;
proxy_ssl_server_name on;
proxy_ssl_name global.example.co.jp;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location = /sitemap-sotomuke.xml {
proxy_pass https://global.example.co.jp/sitemap.xml;
proxy_set_header Host global.example.co.jp;
proxy_ssl_server_name on;
}
方法D: Apache(mod_proxy)
SSLProxyEngine On
ProxyPreserveHost Off
ProxyPassMatch "^/(en|zh-Hans|ko)/(.*)$" "https://global.example.co.jp/$1/$2"
ProxyPass "/sitemap-sotomuke.xml" "https://global.example.co.jp/sitemap.xml"
RequestHeader set Host "global.example.co.jp"
mod_proxy・mod_proxy_http・mod_ssl が必要です。レンタルサーバーの .htaccess では通常使えません。
方法E: Next.js / Vercel
// next.config.js
module.exports = {
async rewrites() {
return [
{ source: "/:lang(en|zh-Hans|ko)/:path*", destination: "https://global.example.co.jp/:lang/:path*" },
{ source: "/sitemap-sotomuke.xml", destination: "https://global.example.co.jp/sitemap.xml" },
];
},
};
静的サイトを Vercel に置いている場合は vercel.json の rewrites に同じ内容を書きます。
方法F: Netlify
# _redirects
/en/* https://global.example.co.jp/en/:splat 200
/zh-Hans/* https://global.example.co.jp/zh-Hans/:splat 200
/ko/* https://global.example.co.jp/ko/:splat 200
/sitemap-sotomuke.xml https://global.example.co.jp/sitemap.xml 200
方法G: AWS CloudFront
Origin に global.example.co.jp(HTTPS のみ、Origin protocol policy: HTTPS only)を追加し、Behavior の Path pattern /en/* などをその Origin に向けます。Cache policy は Query string を転送する設定に、Origin request policy は Host を転送しない(CloudFront が Origin のホスト名を送る)設定にします。
確認ポイント
curl -sI https://example.co.jp/en/ | grep -i x-sotomuke-siteでx-sotomuke-site: <スラッグ>が返れば転送できています。- クエリ文字列(
?utm_source=など)はそのまま転送してください。 - 転送ルールは、WordPress などのルーティングより前に評価される必要があります。元サイトが 404 を返す場合はルールの順序を確認してください。
- 公開URLを設定すると、サブドメイン側のURL(
global.example.co.jp/en/)は引き続き動きますが、canonical は自社ドメインを指すため検索結果には自社ドメインのURLが載ります。 - 翻訳ページへのアクセス計測は変わらず Sotomuke のダッシュボードに表示されます。
制作会社の方へ
エージェンシープランでは各サイトに同じ設定ができます。多数のサイトを同じCDNで運用している場合は、言語パスの転送をテンプレート化しておくと新規サイトの追加が数分で終わります。設定代行や検証のご相談はお問い合わせください。
