外向け Sotomuke

← ヘルプセンター · 公開(DNS設定)

サブディレクトリ(example.co.jp/en/)で配信する — 開発者向けガイド

自社ドメイン直下の /en/ などで配信したい制作会社・開発者向け。Cloudflare、Worker、nginx、Apache、Next.js/Vercel、Netlify、CloudFront の転送設定とサイトマップの扱い。

標準の公開先はサブドメイン(例: 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 では設定できません。その場合はサブドメインをお使いください。
  • 日本語ページは今まで通りお客様のサーバーが配信します。転送するのは言語パスだけです。

手順の全体像

  1. ダッシュボードの「公開設定」→「サブディレクトリで配信する」に公開URL(例: https://example.co.jp)を保存します。以後、canonical・hreflang・サイトマップ・言語切替のURLがこのドメインになります。
  2. 下のいずれかの方法で、/en/・/zh-Hans/・/ko/ など選択した言語のパス(配下すべて)を global.example.co.jp に転送します。Host ヘッダーも global.example.co.jp に書き換えるのがポイントです(Sotomuke はホスト名でサイトを判別します)。
  3. 「転送を確認」ボタンで、各言語のURLが Sotomuke から応答していることを確認します(応答に x-sotomuke-site ヘッダーが付きます)。
  4. 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 で次のルールを作ります。

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 のホスト名を送る)設定にします。

確認ポイント

制作会社の方へ

エージェンシープランでは各サイトに同じ設定ができます。多数のサイトを同じCDNで運用している場合は、言語パスの転送をテンプレート化しておくと新規サイトの追加が数分で終わります。設定代行や検証のご相談はお問い合わせください。

関連する記事

解決しない場合は お問い合わせ ください。通常1営業日以内にご返信します。